Skip to content

Commit 3a7e93e

Browse files
committed
[Clang][CodeGen] Add tests. NFC.
1 parent c5de163 commit 3a7e93e

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py UTC_ARGS: --version 5
2+
// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm -std=c++11 -O1 -disable-llvm-passes %s -o - | FileCheck %s
3+
4+
struct alignas(32) F { int x; };
5+
6+
struct S {
7+
char &a;
8+
int &b;
9+
F &c;
10+
};
11+
12+
// CHECK-LABEL: define dso_local void @_Z4testR1S(
13+
// CHECK-SAME: ptr noundef nonnull align 8 dereferenceable(24) [[S:%.*]]) #[[ATTR0:[0-9]+]] {
14+
// CHECK-NEXT: [[ENTRY:.*:]]
15+
// CHECK-NEXT: [[S_ADDR:%.*]] = alloca ptr, align 8
16+
// CHECK-NEXT: store ptr [[S]], ptr [[S_ADDR]], align 8, !tbaa [[TBAA2:![0-9]+]]
17+
// CHECK-NEXT: [[TMP0:%.*]] = load ptr, ptr [[S_ADDR]], align 8, !tbaa [[TBAA2]], !nonnull [[META7:![0-9]+]], !align [[META8:![0-9]+]]
18+
// CHECK-NEXT: [[A:%.*]] = getelementptr inbounds nuw [[STRUCT_S:%.*]], ptr [[TMP0]], i32 0, i32 0
19+
// CHECK-NEXT: [[TMP1:%.*]] = load ptr, ptr [[A]], align 8, !tbaa [[TBAA9:![0-9]+]], !nonnull [[META7]]
20+
// CHECK-NEXT: store i8 0, ptr [[TMP1]], align 1, !tbaa [[TBAA14:![0-9]+]]
21+
// CHECK-NEXT: [[TMP2:%.*]] = load ptr, ptr [[S_ADDR]], align 8, !tbaa [[TBAA2]], !nonnull [[META7]], !align [[META8]]
22+
// CHECK-NEXT: [[B:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[TMP2]], i32 0, i32 1
23+
// CHECK-NEXT: [[TMP3:%.*]] = load ptr, ptr [[B]], align 8, !tbaa [[TBAA15:![0-9]+]], !nonnull [[META7]], !align [[META16:![0-9]+]]
24+
// CHECK-NEXT: store i32 0, ptr [[TMP3]], align 4, !tbaa [[TBAA17:![0-9]+]]
25+
// CHECK-NEXT: [[TMP4:%.*]] = load ptr, ptr [[S_ADDR]], align 8, !tbaa [[TBAA2]], !nonnull [[META7]], !align [[META8]]
26+
// CHECK-NEXT: [[C:%.*]] = getelementptr inbounds nuw [[STRUCT_S]], ptr [[TMP4]], i32 0, i32 2
27+
// CHECK-NEXT: [[TMP5:%.*]] = load ptr, ptr [[C]], align 8, !tbaa [[TBAA19:![0-9]+]], !nonnull [[META7]], !align [[META20:![0-9]+]]
28+
// CHECK-NEXT: [[X:%.*]] = getelementptr inbounds nuw [[STRUCT_F:%.*]], ptr [[TMP5]], i32 0, i32 0
29+
// CHECK-NEXT: store i32 0, ptr [[X]], align 32, !tbaa [[TBAA21:![0-9]+]]
30+
// CHECK-NEXT: ret void
31+
//
32+
void test(S &s) {
33+
s.a = 0;
34+
s.b = 0;
35+
s.c.x = 0;
36+
}
37+
//.
38+
// CHECK: [[TBAA2]] = !{[[META3:![0-9]+]], [[META3]], i64 0}
39+
// CHECK: [[META3]] = !{!"p1 _ZTS1S", [[META4:![0-9]+]], i64 0}
40+
// CHECK: [[META4]] = !{!"any pointer", [[META5:![0-9]+]], i64 0}
41+
// CHECK: [[META5]] = !{!"omnipotent char", [[META6:![0-9]+]], i64 0}
42+
// CHECK: [[META6]] = !{!"Simple C++ TBAA"}
43+
// CHECK: [[META7]] = !{}
44+
// CHECK: [[META8]] = !{i64 8}
45+
// CHECK: [[TBAA9]] = !{[[META10:![0-9]+]], [[META11:![0-9]+]], i64 0}
46+
// CHECK: [[META10]] = !{!"_ZTS1S", [[META11]], i64 0, [[META12:![0-9]+]], i64 8, [[META13:![0-9]+]], i64 16}
47+
// CHECK: [[META11]] = !{!"p1 omnipotent char", [[META4]], i64 0}
48+
// CHECK: [[META12]] = !{!"p1 int", [[META4]], i64 0}
49+
// CHECK: [[META13]] = !{!"p1 _ZTS1F", [[META4]], i64 0}
50+
// CHECK: [[TBAA14]] = !{[[META5]], [[META5]], i64 0}
51+
// CHECK: [[TBAA15]] = !{[[META10]], [[META12]], i64 8}
52+
// CHECK: [[META16]] = !{i64 4}
53+
// CHECK: [[TBAA17]] = !{[[META18:![0-9]+]], [[META18]], i64 0}
54+
// CHECK: [[META18]] = !{!"int", [[META5]], i64 0}
55+
// CHECK: [[TBAA19]] = !{[[META10]], [[META13]], i64 16}
56+
// CHECK: [[META20]] = !{i64 32}
57+
// CHECK: [[TBAA21]] = !{[[META22:![0-9]+]], [[META18]], i64 0}
58+
// CHECK: [[META22]] = !{!"_ZTS1F", [[META18]], i64 0}
59+
//.

0 commit comments

Comments
 (0)