diff --git a/test/Linker/Inputs/type-unique-dst-types2.ll b/test/Linker/Inputs/type-unique-dst-types2.ll new file mode 100644 index 00000000000..b565c6d7364 --- /dev/null +++ b/test/Linker/Inputs/type-unique-dst-types2.ll @@ -0,0 +1,3 @@ +%A.11 = type { %B } +%B = type { i8 } +@g1 = external global %A.11 diff --git a/test/Linker/Inputs/type-unique-dst-types3.ll b/test/Linker/Inputs/type-unique-dst-types3.ll new file mode 100644 index 00000000000..c5794ad839a --- /dev/null +++ b/test/Linker/Inputs/type-unique-dst-types3.ll @@ -0,0 +1,2 @@ +%A.11 = type opaque +@g2 = external global %A.11 diff --git a/test/Linker/type-unique-dst-types.ll b/test/Linker/type-unique-dst-types.ll new file mode 100644 index 00000000000..6033cb4d501 --- /dev/null +++ b/test/Linker/type-unique-dst-types.ll @@ -0,0 +1,16 @@ +; RUN: llvm-link %p/type-unique-dst-types.ll \ +; RUN: %p/Inputs/type-unique-dst-types2.ll \ +; RUN: %p/Inputs/type-unique-dst-types3.ll -S -o - | FileCheck %s + +; This tests the importance of keeping track of which types are part of the +; destination module. +; When the second input is merged in, the context gets an unused A.11. When +; the third module is then merged, we should pretend it doesn't exist. + +; CHECK: %A = type { %B } +; CHECK-NEXT: %B = type { i8 } +; CHECK-NEXT: %A.11.1 = type opaque + +%A = type { %B } +%B = type { i8 } +@g3 = external global %A