Add back r222727 with a fix.
authorRafael Espindola <rafael.espindola@gmail.com>
Fri, 28 Nov 2014 16:41:24 +0000 (16:41 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Fri, 28 Nov 2014 16:41:24 +0000 (16:41 +0000)
commita96f235c157c40b58e12e813faf97d8bc1004aa2
tree3f6f81dacefc83afc477ae8bc1b8c8da8964c71d
parent3d0974105a8583fdb16e6b7c911f864a8848f962
Add back r222727 with a fix.

The original patch would fail when:

* A dst opaque type (%A) is matched with a src type (%A).
* A src opaque (%E) type is then speculatively matched with %A and the
  speculation fails afterward.
* When rolling back the speculation we would cancel the source %A to dest
  %A mapping.

The fix is to keep an explicit list of which resolutions are speculative.

Original message:

Fix overly aggressive type merging.

If we find out that two types are *not* isomorphic, we learn nothing about
opaque sub types in both the source and destination.

llvm-svn: 222923
llvm/lib/Linker/LinkModules.cpp
llvm/test/Linker/Inputs/type-unique-opaque.ll [new file with mode: 0644]
llvm/test/Linker/type-unique-opaque.ll [new file with mode: 0644]