1; RUN: llvm-as %s -o %t.bc
2; RUN: llvm-link -S %t.bc -o - | FileCheck %s
3; RUN: llvm-link -S %s -o - | FileCheck %s
4
5; Test that we don't try to map %C.0 and C and then try to map %C to a new type.
6; This used to happen when lazy loading since we wouldn't then identify %C
7; as a destination type until it was too late.
8
9; CHECK: %C.0 = type { %B }
10; CHECK-NEXT: %B = type { %A }
11; CHECK-NEXT: %A = type { i8 }
12
13; CHECK: @g1 = global %C.0 zeroinitializer
14; CHECK:  getelementptr %C.0, %C.0* null, i64 0, i32 0, i32 0
15
16%A   = type { i8 }
17%B   = type { %A }
18%C   = type { %B }
19%C.0 = type { %B }
20define void @f1() {
21  getelementptr %C, %C* null, i64 0, i32 0, i32 0
22  ret void
23}
24@g1 = global %C.0 zeroinitializer
25