llvm-6502/test/Linker
Duncan P. N. Exon Smith 49135bb76c 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
2014-08-12 16:46:37 +00:00
..
Inputs Fix use of uninitialized variable. 2014-08-11 17:07:34 +00:00
2002-07-17-GlobalFail.ll
2002-07-17-LinkTest2.ll
2002-08-20-ConstantExpr.ll
2003-01-30-LinkerRename.ll
2003-01-30-LinkerTypeRename.ll
2003-04-23-LinkOnceLost.ll
2003-04-26-NullPtrLinkProblem.ll
2003-05-15-TypeProblem.ll
2003-05-31-LinkerRename.ll
2003-06-02-TypeResolveProblem2.ll
2003-06-02-TypeResolveProblem.ll
2003-08-20-OpaqueTypeResolve.ll
2003-08-23-GlobalVarLinking.ll
2003-08-23-RecursiveOpaqueTypeResolve.ll
2003-08-24-InheritPtrSize.ll
2003-08-28-TypeResolvesGlobal2.ll
2003-08-28-TypeResolvesGlobal3.ll
2003-08-28-TypeResolvesGlobal.ll
2003-10-27-LinkOncePromote.ll
2003-11-18-TypeResolution.ll
2004-02-17-WeakStrongLinkage.ll
2004-05-07-TypeResolution1.ll
2004-05-07-TypeResolution2.ll
2004-12-03-DisagreeingType.ll
2005-02-12-ConstantGlobals-2.ll
2005-02-12-ConstantGlobals.ll
2005-12-06-AppendingZeroLengthArrays.ll
2006-01-19-ConstantPacked.ll
2006-06-15-GlobalVarAlignment.ll
2008-03-05-AliasReference2.ll
2008-03-05-AliasReference.ll Use "weak alias" instead of "alias weak" 2014-07-30 22:51:54 +00:00
2008-03-07-DroppedSection_a.ll
2008-03-07-DroppedSection_b.ll
2008-06-13-LinkOnceRedefinition.ll
2008-06-26-AddressSpace.ll
2008-07-06-AliasFnDecl2.ll
2008-07-06-AliasFnDecl.ll
2008-07-06-AliasWeakDest2.ll
2008-07-06-AliasWeakDest.ll
2009-09-03-mdnode2.ll
2009-09-03-mdnode.ll
2011-08-04-DebugLoc2.ll
2011-08-04-DebugLoc.ll
2011-08-04-Metadata2.ll
2011-08-04-Metadata.ll
2011-08-18-unique-class-type2.ll
2011-08-18-unique-class-type.ll
2011-08-18-unique-debug-type2.ll
2011-08-18-unique-debug-type.ll
2011-08-22-ResolveAlias2.ll Use "weak alias" instead of "alias weak" 2014-07-30 22:51:54 +00:00
2011-08-22-ResolveAlias.ll Use "weak alias" instead of "alias weak" 2014-07-30 22:51:54 +00:00
alias.ll Allow alias to point to an arbitrary ConstantExpr. 2014-06-03 02:41:57 +00:00
AppendingLinkage2.ll
AppendingLinkage.ll
available_externally_a.ll
available_externally_b.ll
basiclink.ll
comdat2.ll IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
comdat3.ll IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
comdat4.ll IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
comdat5.ll IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
comdat6.ll IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
comdat7.ll IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
comdat8.ll IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
comdat.ll IR: Add COMDATs to the IR 2014-06-27 18:19:56 +00:00
ConstantGlobals1.ll
ConstantGlobals2.ll
ConstantGlobals3.ll
constructor-comdat.ll Fix use of uninitialized variable. 2014-08-11 17:07:34 +00:00
datalayout.ll
DbgDeclare2.ll
DbgDeclare.ll
debug-info-version-a.ll LTO: Add a testcase for linking modules with incompatible Debug Info 2014-05-19 23:41:25 +00:00
debug-info-version-b.ll LTO: Add a testcase for linking modules with incompatible Debug Info 2014-05-19 23:41:25 +00:00
dllstorage-a.ll
dllstorage-b.ll
func-attrs-a.ll
func-attrs-b.ll
global_ctors.ll Don't upgrade global constructors when reading bitcode 2014-08-12 16:46:37 +00:00
inlineasm.ll
link-global-to-func.ll
link-messages.ll
link-type-names.ll
linkage.ll
linkmdnode2.ll
linkmdnode.ll
linknamedmdnode2.ll
linknamedmdnode.ll
LinkOnce.ll
metadata-a.ll
metadata-b.ll
module-flags-1-a.ll
module-flags-1-b.ll
module-flags-2-a.ll
module-flags-2-b.ll
module-flags-3-a.ll
module-flags-3-b.ll
module-flags-4-a.ll
module-flags-4-b.ll
module-flags-5-a.ll
module-flags-5-b.ll
module-flags-6-a.ll
module-flags-6-b.ll
module-flags-7-a.ll
module-flags-7-b.ll
module-flags-8-a.ll
module-flags-8-b.ll
multiple-merged-structs.ll
partial-type-refinement-link.ll
partial-type-refinement.ll
PR8300.ll
prefixdata.ll
redefinition.ll
targettriple.ll
testlink1.ll
testlink2.ll
transitive-lazy-link.ll
type-unique-inheritance.ll
type-unique-odr-a.ll DebugInfo: Lazily construct subprogram definition DIEs. 2014-05-27 18:37:48 +00:00
type-unique-odr-b.ll Debug Info: Fix LTO type uniquing for C++ member declarations 2014-03-14 23:08:25 +00:00
type-unique-simple2-a.ll
type-unique-simple2-b.ll
type-unique-simple2.ll
type-unique-simple-a.ll
type-unique-simple-b.ll
type-unique-type-array-a.ll Clean up testing cases. 2014-07-28 23:16:05 +00:00
type-unique-type-array-b.ll Clean up testing cases. 2014-07-28 23:16:05 +00:00
unnamed-addr1-a.ll Allow aliases to be unnamed_addr. 2014-06-06 01:20:28 +00:00
unnamed-addr1-b.ll Allow aliases to be unnamed_addr. 2014-06-06 01:20:28 +00:00
unnamed-addr-err-a.ll
unnamed-addr-err-b.ll
visibility1.ll
visibility2.ll Use "weak alias" instead of "alias weak" 2014-07-30 22:51:54 +00:00
weakextern.ll