mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
Don't upgrade global constructors when reading bitcode
An optional third field was added to `llvm.global_ctors` (and `llvm.global_dtors`) in r209015. Most of the code has been changed to deal with both versions of the variables. Users of the C API might create either version, the helper functions in LLVM create the two-field version, and clang now creates the three-field version. However, the BitcodeReader was changed to always upgrade to the three-field version. This created an unnecessary inconsistency in the IR before/after serializing to bitcode. This commit resolves the inconsistency by making the third field truly optional (and not upgrading in the bitcode reader). Since `llvm-link` was relying on this upgrade code, rather than deleting it I've moved it into `ModuleLinker`, where it upgrades these arrays as necessary to resolve inconsistencies between modules. The ideal resolution would be to remove the 2-field version and make the third field required. I filed PR20506 to track that. I changed `test/Bitcode/upgrade-global-ctors.ll` to a negative test and duplicated the `llvm-link` check in `test/Linker/global_ctors.ll` to check both upgrade directions. Since I came across this as part of PR5680 (serializing use-list order), I've also added the missing `verify-uselistorder` RUN line to `test/Bitcode/metadata-2.ll`. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215457 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
; RUN: llvm-as < %s | llvm-dis -disable-output
|
||||
; RUN: verify-uselistorder < %s -preserve-bc-use-list-order
|
||||
%0 = type { %object.ModuleInfo.__vtbl*, i8*, %"byte[]", %1, %"ClassInfo[]", i32, void ()*, void ()*, void ()*, i8*, void ()* } ; type %0
|
||||
%1 = type { i64, %object.ModuleInfo* } ; type %1
|
||||
%2 = type { i32, void ()* } ; type %2
|
||||
|
@@ -1,4 +1,5 @@
|
||||
; RUN: llvm-dis < %s.bc| FileCheck %s
|
||||
; RUN: verify-uselistorder < %s.bc -preserve-bc-use-list-order
|
||||
|
||||
; CHECK: @llvm.global_ctors = appending global [0 x { i32, void ()*, i8* }] zeroinitializer
|
||||
; Global constructors should no longer be upgraded when reading bitcode.
|
||||
; CHECK: @llvm.global_ctors = appending global [0 x { i32, void ()* }] zeroinitializer
|
||||
|
Reference in New Issue
Block a user