From 49135bb76cba6792ad8abd52927a87049b730a4a Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Tue, 12 Aug 2014 16:46:37 +0000 Subject: 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 --- test/Linker/global_ctors.ll | 1 + 1 file changed, 1 insertion(+) (limited to 'test/Linker/global_ctors.ll') diff --git a/test/Linker/global_ctors.ll b/test/Linker/global_ctors.ll index 541f0d4f91b..49df81a0075 100644 --- a/test/Linker/global_ctors.ll +++ b/test/Linker/global_ctors.ll @@ -1,5 +1,6 @@ ; RUN: llvm-as %s -o %t.new.bc ; RUN: llvm-link %t.new.bc %S/Inputs/old_global_ctors.3.4.bc | llvm-dis | FileCheck %s +; RUN: llvm-link %S/Inputs/old_global_ctors.3.4.bc %t.new.bc | llvm-dis | FileCheck %s ; old_global_ctors.3.4.bc contains the following LLVM IL, assembled into ; bitcode by llvm-as from 3.4. It uses a two element @llvm.global_ctors array. -- cgit v1.2.3