1
- // RUN: %clang_cc1 -triple x86_64-linux -std=c++98 %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck %s
2
- // RUN: %clang_cc1 -triple x86_64-linux -std=c++11 %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck %s
3
- // RUN: %clang_cc1 -triple x86_64-linux -std=c++14 %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck %s
4
- // RUN: %clang_cc1 -triple x86_64-linux -std=c++1z %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck %s
1
+ // RUN: %clang_cc1 -triple x86_64-linux -std=c++98 %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck --check-prefixes=CHECK,DEFAULT %s
2
+ // RUN: %clang_cc1 -triple x86_64-linux -std=c++11 %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck --check-prefixes=CHECK,DEFAULT %s
3
+ // RUN: %clang_cc1 -triple x86_64-linux -std=c++14 %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck --check-prefixes=CHECK,DEFAULT %s
4
+ // RUN: %clang_cc1 -triple x86_64-linux -std=c++1z %s -O3 -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck --check-prefixes=CHECK,DEFAULT %s
5
+ // RUN: %clang_cc1 -triple x86_64-linux -std=c++1z %s -O3 -pointer-tbaa -disable-llvm-passes -pedantic-errors -emit-llvm -o - | FileCheck --check-prefixes=CHECK,POINTER-TBAA %s
5
6
6
7
// cwg158: yes
7
8
8
9
// CHECK-LABEL: define {{.*}} @_Z1f
9
10
const int *f (const int * const *p, int **q) {
11
+ // CHECK: load ptr, ptr %p.addr
10
12
// CHECK: load ptr, {{.*}}, !tbaa ![[INTPTR_TBAA:[^,]*]]
11
13
const int *x = *p;
12
14
// CHECK: store ptr null, {{.*}}, !tbaa ![[INTPTR_TBAA]]
@@ -18,10 +20,24 @@ struct A {};
18
20
19
21
// CHECK-LABEL: define {{.*}} @_Z1g
20
22
const int *(A::*const *g (const int *(A::* const **p)[3], int *(A::***q)[3]))[3] {
23
+ // CHECK: load ptr, ptr %p.addr
21
24
// CHECK: load ptr, {{.*}}, !tbaa ![[MEMPTR_TBAA:[^,]*]]
22
25
const int *(A::*const *x)[3 ] = *p;
23
- // CHECK: store ptr null, {{.*}}, !tbaa ![[MEMPTR_TBAA]]
26
+ // DEFAULT: store ptr null, {{.*}}, !tbaa ![[MEMPTR_TBAA]]
27
+ // POINTER-TBAA-NOT: store ptr null, {{.*}}, !tbaa ![[MEMPTR_TBAA]]
24
28
*q = 0 ;
25
29
return x;
26
30
}
27
31
32
+ // CHECK-LABEL: define {{.*}} @_Z1h
33
+ const int * h (const int * (*p)[10], int *(*q)[9]) {
34
+ // CHECK: load ptr, ptr %p.addr, align 8, !tbaa [[PTRARRAY_TBAA:!.+]]
35
+ const int * x = *p[0 ];
36
+
37
+ // CHECK: load ptr, ptr %q.addr, align 8, !tbaa [[PTRARRAY_TBAA]]
38
+ *q[0 ] = 0 ;
39
+ return x;
40
+ }
41
+
42
+ // POINTER-TBAA: [[PTRARRAY_TBAA]] = !{[[PTRARRAY_TY:!.+]], [[PTRARRAY_TY]], i64 0}
43
+ // POINTER-TBAA: [[PTRARRAY_TY:!.+]] = !{!"p1 _ZTSPi", !4, i64 0}
0 commit comments