Don't upgrade global constructors when reading bitcode
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 12 Aug 2014 16:46:37 +0000 (16:46 +0000)
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>
Tue, 12 Aug 2014 16:46:37 +0000 (16:46 +0000)
commit49135bb76cba6792ad8abd52927a87049b730a4a
tree827bd022a1f00882b29dcdb8967940ec1bf60723
parent01c6ad07d2267421ad3a4e5ff4055949948f89bb
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
lib/IR/AutoUpgrade.cpp
lib/Linker/LinkModules.cpp
test/Bitcode/metadata-2.ll
test/Bitcode/upgrade-global-ctors.ll
test/Linker/global_ctors.ll