xref: /aosp_15_r20/external/clang/test/CodeGen/tbaa-for-vptr.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - -fsanitize=thread %s | FileCheck %s
2*67e74705SXin Li // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - -O1 %s | FileCheck %s
3*67e74705SXin Li // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - -O1  -relaxed-aliasing -fsanitize=thread %s | FileCheck %s
4*67e74705SXin Li //
5*67e74705SXin Li // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - %s | FileCheck %s --check-prefix=NOTBAA
6*67e74705SXin Li // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - -O2  -relaxed-aliasing %s | FileCheck %s --check-prefix=NOTBAA
7*67e74705SXin Li //
8*67e74705SXin Li // Check that we generate TBAA for vtable pointer loads and stores.
9*67e74705SXin Li // When -fsanitize=thread is used TBAA should be generated at all opt levels
10*67e74705SXin Li // even if -relaxed-aliasing is present.
11*67e74705SXin Li struct A {
12*67e74705SXin Li   virtual int foo() const ;
13*67e74705SXin Li   virtual ~A();
14*67e74705SXin Li };
15*67e74705SXin Li 
CreateA()16*67e74705SXin Li void CreateA() {
17*67e74705SXin Li   new A;
18*67e74705SXin Li }
19*67e74705SXin Li 
CallFoo(A * a,int (A::* fp)()const)20*67e74705SXin Li void CallFoo(A *a, int (A::*fp)() const) {
21*67e74705SXin Li   a->foo();
22*67e74705SXin Li   (a->*fp)();
23*67e74705SXin Li }
24*67e74705SXin Li 
25*67e74705SXin Li // CHECK-LABEL: @_Z7CallFoo
26*67e74705SXin Li // CHECK: %{{.*}} = load {{.*}} !tbaa ![[NUM:[0-9]+]]
27*67e74705SXin Li // CHECK: br i1
28*67e74705SXin Li // CHECK: load {{.*}}, !tbaa ![[NUM]]
29*67e74705SXin Li //
30*67e74705SXin Li // CHECK-LABEL: @_ZN1AC2Ev
31*67e74705SXin Li // CHECK: store {{.*}} !tbaa ![[NUM]]
32*67e74705SXin Li //
33*67e74705SXin Li // CHECK: [[NUM]] = !{[[TYPE:!.*]], [[TYPE]], i64 0}
34*67e74705SXin Li // CHECK: [[TYPE]] = !{!"vtable pointer", !{{.*}}
35*67e74705SXin Li // NOTBAA-NOT: = !{!"Simple C++ TBAA"}
36