diff options
Diffstat (limited to 'test/Linker/type-unique-src-type.ll')
-rw-r--r-- | test/Linker/type-unique-src-type.ll | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/test/Linker/type-unique-src-type.ll b/test/Linker/type-unique-src-type.ll new file mode 100644 index 0000000..01b33a2 --- /dev/null +++ b/test/Linker/type-unique-src-type.ll @@ -0,0 +1,24 @@ +; RUN: llvm-as %s -o %t.bc +; RUN: llvm-link -S %t.bc -o - | FileCheck %s +; RUN: llvm-link -S %s -o - | FileCheck %s + +; Test that we don't try to map %C.0 and C and then try to map %C to a new type. +; This used to happen when lazy loading since we wouldn't then identify %C +; as a destination type until it was too late. + +; CHECK: %C.0 = type { %B } +; CHECK-NEXT: %B = type { %A } +; CHECK-NEXT: %A = type { i8 } + +; CHECK: @g1 = external global %C.0 +; CHECK: getelementptr %C.0* null, i64 0, i32 0, i32 0 + +%A = type { i8 } +%B = type { %A } +%C = type { %B } +%C.0 = type { %B } +define void @f1() { + getelementptr %C* null, i64 0, i32 0, i32 0 + ret void +} +@g1 = external global %C.0 |