Skip to content

Commit 8fe484f

Browse files
committed
[Clang][CodeGen] Add more tests. NFC.
1 parent ee7ef59 commit 8fe484f

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

clang/test/CodeGenCXX/load-reference-metadata.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,40 @@ void test(S &s) {
3434
s.b = 0;
3535
s.c.x = 0;
3636
}
37+
38+
struct A { alignas(32) char x[32]; };
39+
struct B : virtual A { long long b; char c; };
40+
extern B& b;
41+
extern B (&bb)[2];
42+
// CHECK-LABEL: define dso_local void @_Z13test_externalv(
43+
// CHECK-SAME: ) #[[ATTR0]] {
44+
// CHECK-NEXT: [[ENTRY:.*:]]
45+
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr @b, align 8, !tbaa [[TBAA23:![0-9]+]], !nonnull [[META7]], !align [[META8]]
46+
// CHECK-NEXT: [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_B:%.*]], ptr [[TMP0]], i32 0, i32 2
47+
// CHECK-NEXT: store i8 0, ptr [[C]], align 8, !tbaa [[TBAA25:![0-9]+]]
48+
// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr @bb, align 8, !tbaa [[TBAA23]], !nonnull [[META7]], !align [[META20]]
49+
// CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds [2 x %struct.B], ptr [[TMP1]], i64 0, i64 0
50+
// CHECK-NEXT: [[C1:%.*]] = getelementptr inbounds nuw [[STRUCT_B]], ptr [[ARRAYIDX]], i32 0, i32 2
51+
// CHECK-NEXT: store i8 0, ptr [[C1]], align 16, !tbaa [[TBAA25]]
52+
// CHECK-NEXT: ret void
53+
//
54+
void test_external() {
55+
b.c = 0; // align 8
56+
bb[0].c = 0; // align 32
57+
}
58+
59+
// CHECK-LABEL: define dso_local noundef ptr @_Z15test_deref_onlyR1B(
60+
// CHECK-SAME: ptr noundef nonnull align 8 dereferenceable(17) [[S:%.*]]) #[[ATTR0]] {
61+
// CHECK-NEXT: [[ENTRY:.*:]]
62+
// CHECK-NEXT: [[S_ADDR:%.*]] = alloca ptr, align 8
63+
// CHECK-NEXT: store ptr [[S]], ptr [[S_ADDR]], align 8, !tbaa [[TBAA23]]
64+
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8, !tbaa [[TBAA23]], !nonnull [[META7]], !align [[META8]]
65+
// CHECK-NEXT: [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_B:%.*]], ptr [[TMP0]], i32 0, i32 2
66+
// CHECK-NEXT: ret ptr [[C]]
67+
//
68+
char* test_deref_only(B &s) {
69+
return &s.c;
70+
}
3771
//.
3872
// CHECK: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}
3973
// CHECK: [[META3]] = !{!"p1 _ZTS1S", [[META4:![0-9]+]], i64 0}
@@ -56,4 +90,9 @@ void test(S &s) {
5690
// CHECK: [[META20]] = !{i64 32}
5791
// CHECK: [[TBAA21]] = !{[[META22:![0-9]+]], [[META18]], i64 0}
5892
// CHECK: [[META22]] = !{!"_ZTS1F", [[META18]], i64 0}
93+
// CHECK: [[TBAA23]] = !{[[META24:![0-9]+]], [[META24]], i64 0}
94+
// CHECK: [[META24]] = !{!"p1 _ZTS1B", [[META4]], i64 0}
95+
// CHECK: [[TBAA25]] = !{[[META26:![0-9]+]], [[META5]], i64 16}
96+
// CHECK: [[META26]] = !{!"_ZTS1B", [[META27:![0-9]+]], i64 8, [[META5]], i64 16}
97+
// CHECK: [[META27]] = !{!"long long", [[META5]], i64 0}
5998
//.

0 commit comments

Comments
 (0)