Bring r254336 back:
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 1 Dec 2015 15:19:48 +0000 (15:19 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 1 Dec 2015 15:19:48 +0000 (15:19 +0000)
commit39e89e8fd833c2e13cf6c29379ff608d6b7c52a2
treefc665b7e28dbc4eebc2004a6f35ad459cd2932ee
parent6979eb43962a1a5ad230f01cb5213f3490d22afd
Bring r254336 back:

The difference is that now we don't error on out-of-comdat access to
internal global values. We copy them instead. This seems to match the
expectation of COFF linkers (see pr25686).

Original message:

    Start deciding earlier what to link.

    A traditional linker is roughly split in symbol resolution and
"copying
    stuff".

    The two tasks are badly mixed in lib/Linker.

    This starts splitting them apart.

    With this patch there are no direct call to linkGlobalValueBody or
    linkGlobalValueProto. Everything is linked via WapValue.

    This also includes a few fixes:
    * A GV goes undefined if the comdat is dropped (comdat11.ll).
    * We error if an internal GV goes undefined (comdat13.ll).
    * We don't link an unused comdat.

    The first two match the behavior of an ELF linker. The second one is
    equivalent to running globaldce on the input.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@254418 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Linker/LinkModules.cpp
lib/Transforms/Utils/ValueMapper.cpp
test/Linker/Inputs/comdat11.ll [new file with mode: 0644]
test/Linker/Inputs/comdat13.ll [new file with mode: 0644]
test/Linker/comdat11.ll [new file with mode: 0644]
test/Linker/comdat12.ll [new file with mode: 0644]
test/Linker/comdat13.ll [new file with mode: 0644]
test/Linker/comdat9.ll