[IRMover] Don't map globals if their types are the same
authorPirama Arumuga Nainar <pirama@google.com>
Wed, 11 Sep 2019 18:35:49 +0000 (18:35 +0000)
committerPirama Arumuga Nainar <pirama@google.com>
Wed, 11 Sep 2019 18:35:49 +0000 (18:35 +0000)
commit8b46544641ef49e20621a3ac8e14fd4c95338522
treee490e4958daade820c9e0f4781a3c453f7d81736
parentabcc2a879c95d2ed262f1b344a069747c2138778
[IRMover] Don't map globals if their types are the same

Summary:
During IR Linking, if the types of two globals in destination and source
modules are the same, it can only be because the global in the
destination module is originally from the source module and got added to
the destination module from a shared metadata.

We shouldn't map this type to itself in case the type's components get
remapped to a new type from the destination (for instance, during the
loop over SrcM->getIdentifiedStructTypes() further below in
IRLinker::computeTypeMapping()).

Fixes PR40312.

Reviewers: tejohnson, pcc, srhines

Subscribers: mehdi_amini, hiraditya, steven_wu, dexonsmith, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D66814

llvm-svn: 371643
llvm/lib/Linker/IRMover.cpp
llvm/test/LTO/X86/Inputs/type-mapping-bug3.ll [new file with mode: 0644]
llvm/test/LTO/X86/type-mapping-bug3.ll [new file with mode: 0644]