diff options
Diffstat (limited to 'clang/test/CodeGenCXX')
-rw-r--r-- | clang/test/CodeGenCXX/bitset-blacklist.cpp | 32 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/bitset-inference.cpp | 107 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/bitsets.cpp | 16 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/cfi-blacklist.cpp | 29 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/cfi-cast.cpp | 34 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/cfi-cross-dso.cpp | 4 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/cfi-ms-rtti.cpp | 4 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/cfi-nvcall.cpp | 4 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/cfi-stats.cpp | 2 |
9 files changed, 168 insertions, 64 deletions
diff --git a/clang/test/CodeGenCXX/bitset-blacklist.cpp b/clang/test/CodeGenCXX/bitset-blacklist.cpp deleted file mode 100644 index ed15e43ce93..00000000000 --- a/clang/test/CodeGenCXX/bitset-blacklist.cpp +++ /dev/null @@ -1,32 +0,0 @@ -// RUN: echo "type:attr:uuid" > %t.txt -// RUN: %clang_cc1 -fms-extensions -fsanitize=cfi-vcall -fsanitize-blacklist=%t.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOUUID %s -// RUN: %clang_cc1 -fms-extensions -fwhole-program-vtables -fwhole-program-vtables-blacklist=%t.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOUUID %s -// RUN: echo "type:std::*" > %t.txt -// RUN: %clang_cc1 -fms-extensions -fsanitize=cfi-vcall -fsanitize-blacklist=%t.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOSTD %s -// RUN: %clang_cc1 -fms-extensions -fwhole-program-vtables -fwhole-program-vtables-blacklist=%t.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOSTD %s - -struct __declspec(uuid("00000000-0000-0000-0000-000000000000")) S1 { - virtual void f(); -}; - -namespace std { - -struct S2 { - virtual void f(); -}; - -} - -// CHECK: define{{.*}}s1f -// NOSTD: llvm.bitset.test -// NOUUID-NOT: llvm.bitset.test -void s1f(S1 *s1) { - s1->f(); -} - -// CHECK: define{{.*}}s2f -// NOSTD-NOT: llvm.bitset.test -// NOUUID: llvm.bitset.test -void s2f(std::S2 *s2) { - s2->f(); -} diff --git a/clang/test/CodeGenCXX/bitset-inference.cpp b/clang/test/CodeGenCXX/bitset-inference.cpp new file mode 100644 index 00000000000..d9528609ff2 --- /dev/null +++ b/clang/test/CodeGenCXX/bitset-inference.cpp @@ -0,0 +1,107 @@ +// RUN: %clang_cc1 -flto -triple x86_64-unknown-linux -std=c++11 -fms-extensions -fvisibility hidden -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=ITANIUM %s +// RUN: %clang_cc1 -flto -triple x86_64-pc-windows-msvc -std=c++11 -fms-extensions -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=MS --check-prefix=MS-STD %s +// RUN: %clang_cc1 -flto -triple x86_64-pc-windows-msvc -std=c++11 -fms-extensions -fwhole-program-vtables -flto-visibility-public-std -emit-llvm -o - %s | FileCheck --check-prefix=MS --check-prefix=MS-NOSTD %s + +struct C1 { + virtual void f(); +}; + +struct __attribute__((visibility("default"))) C2 { + virtual void f(); +}; + +struct __declspec(dllexport) C3 { + virtual void f(); +}; + +struct __declspec(dllimport) C4 { + virtual void f(); +}; + +struct [[clang::lto_visibility_public]] C5 { + virtual void f(); +}; + +struct __declspec(uuid("00000000-0000-0000-0000-000000000000")) C6 { + virtual void f(); +}; + +namespace std { + +struct C7 { + virtual void f(); + struct C8 { + virtual void f(); + }; +}; + +} + +extern "C++" { + +namespace stdext { + +struct C9 { + virtual void f(); +}; + +} + +} + +namespace other { + +struct C10 { + virtual void f(); +}; + +} + +namespace { + +struct C11 { + virtual void f(); +}; + +} + +void f(C1 *c1, C2 *c2, C3 *c3, C4 *c4, C5 *c5, C6 *c6, std::C7 *c7, + std::C7::C8 *c8, stdext::C9 *c9, other::C10 *c10) { + // ITANIUM: bitset.test{{.*}}!"_ZTS2C1" + // MS: bitset.test{{.*}}!"?AUC1@@" + c1->f(); + // ITANIUM-NOT: bitset.test{{.*}}!"_ZTS2C2" + // MS: bitset.test{{.*}}!"?AUC2@@" + c2->f(); + // ITANIUM: bitset.test{{.*}}!"_ZTS2C3" + // MS-NOT: bitset.test{{.*}}!"?AUC3@@" + c3->f(); + // ITANIUM: bitset.test{{.*}}!"_ZTS2C4" + // MS-NOT: bitset.test{{.*}}!"?AUC4@@" + c4->f(); + // ITANIUM-NOT: bitset.test{{.*}}!"_ZTS2C5" + // MS-NOT: bitset.test{{.*}}!"?AUC5@@" + c5->f(); + // ITANIUM-NOT: bitset.test{{.*}}!"_ZTS2C6" + // MS-NOT: bitset.test{{.*}}!"?AUC6@@" + c6->f(); + // ITANIUM: bitset.test{{.*}}!"_ZTSSt2C7" + // MS-STD: bitset.test{{.*}}!"?AUC7@std@@" + // MS-NOSTD-NOT: bitset.test{{.*}}!"?AUC7@std@@" + c7->f(); + // ITANIUM: bitset.test{{.*}}!"_ZTSNSt2C72C8E" + // MS-STD: bitset.test{{.*}}!"?AUC8@C7@std@@" + // MS-NOSTD-NOT: bitset.test{{.*}}!"?AUC8@C7@std@@" + c8->f(); + // ITANIUM: bitset.test{{.*}}!"_ZTSN6stdext2C9E" + // MS-STD: bitset.test{{.*}}!"?AUC9@stdext@@" + // MS-NOSTD-NOT: bitset.test{{.*}}!"?AUC9@stdext@@" + c9->f(); + // ITANIUM: bitset.test{{.*}}!"_ZTSN5other3C10E" + // MS: bitset.test{{.*}}!"?AUC10@other@@" + c10->f(); + // ITANIUM: bitset.test{{.*}}!{{[0-9]}} + // MS: bitset.test{{.*}}!{{[0-9]}} + C11 *c11; + c11->f(); +} diff --git a/clang/test/CodeGenCXX/bitsets.cpp b/clang/test/CodeGenCXX/bitsets.cpp index dba399cc96f..4d11f39b66b 100644 --- a/clang/test/CodeGenCXX/bitsets.cpp +++ b/clang/test/CodeGenCXX/bitsets.cpp @@ -1,12 +1,12 @@ // Tests for the cfi-vcall feature: -// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-vcall -fsanitize-trap=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CFI --check-prefix=ITANIUM --check-prefix=ITANIUM-NDIAG --check-prefix=NDIAG %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CFI --check-prefix=ITANIUM --check-prefix=ITANIUM-DIAG --check-prefix=DIAG --check-prefix=DIAG-ABORT %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-vcall -fsanitize-recover=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CFI --check-prefix=ITANIUM --check-prefix=DIAG --check-prefix=DIAG-RECOVER %s -// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -fsanitize=cfi-vcall -fsanitize-trap=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CFI --check-prefix=MS --check-prefix=NDIAG %s +// RUN: %clang_cc1 -flto -triple x86_64-unknown-linux -fvisibility hidden -fsanitize=cfi-vcall -fsanitize-trap=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CFI --check-prefix=ITANIUM --check-prefix=ITANIUM-NDIAG --check-prefix=NDIAG %s +// RUN: %clang_cc1 -flto -triple x86_64-unknown-linux -fvisibility hidden -fsanitize=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CFI --check-prefix=ITANIUM --check-prefix=ITANIUM-DIAG --check-prefix=DIAG --check-prefix=DIAG-ABORT %s +// RUN: %clang_cc1 -flto -triple x86_64-unknown-linux -fvisibility hidden -fsanitize=cfi-vcall -fsanitize-recover=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CFI --check-prefix=ITANIUM --check-prefix=DIAG --check-prefix=DIAG-RECOVER %s +// RUN: %clang_cc1 -flto -triple x86_64-pc-windows-msvc -fsanitize=cfi-vcall -fsanitize-trap=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CFI --check-prefix=MS --check-prefix=NDIAG %s // Tests for the whole-program-vtables feature: -// RUN: %clang_cc1 -triple x86_64-unknown-linux -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=VTABLE-OPT --check-prefix=ITANIUM %s -// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=VTABLE-OPT --check-prefix=MS %s +// RUN: %clang_cc1 -flto -triple x86_64-unknown-linux -fvisibility hidden -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=VTABLE-OPT --check-prefix=ITANIUM %s +// RUN: %clang_cc1 -flto -triple x86_64-pc-windows-msvc -fwhole-program-vtables -emit-llvm -o - %s | FileCheck --check-prefix=VTABLE-OPT --check-prefix=MS %s // MS: @[[VTA:[0-9]*]] {{.*}} comdat($"\01??_7A@@6B@") // MS: @[[VTB:[0-9]*]] {{.*}} comdat($"\01??_7B@@6B0@@") @@ -62,7 +62,7 @@ void D::h() { // DIAG: @[[TYPE:.*]] = private unnamed_addr constant { i16, i16, [4 x i8] } { i16 -1, i16 0, [4 x i8] c"'A'\00" } // DIAG: @[[BADTYPESTATIC:.*]] = private unnamed_addr global { i8, { [{{.*}} x i8]*, i32, i32 }, { i16, i16, [4 x i8] }* } { i8 0, { [{{.*}} x i8]*, i32, i32 } { [{{.*}} x i8]* @[[SRC]], i32 [[@LINE+24]], i32 3 }, { i16, i16, [4 x i8] }* @[[TYPE]] } -// ITANIUM: define void @_Z2afP1A +// ITANIUM: define hidden void @_Z2afP1A // MS: define void @"\01?af@@YAXPEAUA@@@Z" void af(A *a) { // ITANIUM: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* [[VT:%[^ ]*]], metadata !"_ZTS1A") @@ -155,7 +155,7 @@ struct D : C { void m_fn1(); }; -// ITANIUM: define void @_ZN5test21fEPNS_1DE +// ITANIUM: define hidden void @_ZN5test21fEPNS_1DE // MS: define void @"\01?f@test2@@YAXPEAUD@1@@Z" void f(D *d) { // ITANIUM: {{%[^ ]*}} = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTSN5test21DE") diff --git a/clang/test/CodeGenCXX/cfi-blacklist.cpp b/clang/test/CodeGenCXX/cfi-blacklist.cpp new file mode 100644 index 00000000000..6ec2d32fa32 --- /dev/null +++ b/clang/test/CodeGenCXX/cfi-blacklist.cpp @@ -0,0 +1,29 @@ +// RUN: %clang_cc1 -fvisibility hidden -fms-extensions -fsanitize=cfi-vcall -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOBL %s +// RUN: echo "type:std::*" > %t.txt +// RUN: %clang_cc1 -fvisibility hidden -fms-extensions -fsanitize=cfi-vcall -fsanitize-blacklist=%t.txt -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=NOSTD %s + +struct S1 { + virtual void f(); +}; + +namespace std { + +struct S2 { + virtual void f(); +}; + +} + +// CHECK: define{{.*}}s1f +// NOBL: llvm.bitset.test +// NOSTD: llvm.bitset.test +void s1f(S1 *s1) { + s1->f(); +} + +// CHECK: define{{.*}}s2f +// NOBL: llvm.bitset.test +// NOSTD-NOT: llvm.bitset.test +void s2f(std::S2 *s2) { + s2->f(); +} diff --git a/clang/test/CodeGenCXX/cfi-cast.cpp b/clang/test/CodeGenCXX/cfi-cast.cpp index 7935b7364c6..9fe87111b38 100644 --- a/clang/test/CodeGenCXX/cfi-cast.cpp +++ b/clang/test/CodeGenCXX/cfi-cast.cpp @@ -1,6 +1,6 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-linux -std=c++11 -fsanitize=cfi-derived-cast -fsanitize-trap=cfi-derived-cast -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-DCAST %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -std=c++11 -fsanitize=cfi-unrelated-cast -fsanitize-trap=cfi-unrelated-cast -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-UCAST %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -std=c++11 -fsanitize=cfi-unrelated-cast,cfi-cast-strict -fsanitize-trap=cfi-unrelated-cast,cfi-cast-strict -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-UCAST-STRICT %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fvisibility hidden -std=c++11 -fsanitize=cfi-derived-cast -fsanitize-trap=cfi-derived-cast -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-DCAST %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fvisibility hidden -std=c++11 -fsanitize=cfi-unrelated-cast -fsanitize-trap=cfi-unrelated-cast -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-UCAST %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fvisibility hidden -std=c++11 -fsanitize=cfi-unrelated-cast,cfi-cast-strict -fsanitize-trap=cfi-unrelated-cast,cfi-cast-strict -emit-llvm -o - %s | FileCheck -check-prefix=CHECK-UCAST-STRICT %s // In this test the main thing we are searching for is something like // 'metadata !"1B"' where "1B" is the mangled name of the class we are @@ -17,7 +17,7 @@ struct B : A { struct C : A {}; -// CHECK-DCAST-LABEL: define void @_Z3abpP1A +// CHECK-DCAST-LABEL: define hidden void @_Z3abpP1A void abp(A *a) { // CHECK-DCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1B") // CHECK-DCAST-NEXT: br i1 [[P]], label %[[CONTBB:[^ ]*]], label %[[TRAPBB:[^ ,]*]] @@ -31,7 +31,7 @@ void abp(A *a) { (void)static_cast<B*>(a); } -// CHECK-DCAST-LABEL: define void @_Z3abrR1A +// CHECK-DCAST-LABEL: define hidden void @_Z3abrR1A void abr(A &a) { // CHECK-DCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1B") // CHECK-DCAST-NEXT: br i1 [[P]], label %[[CONTBB:[^ ]*]], label %[[TRAPBB:[^ ,]*]] @@ -45,7 +45,7 @@ void abr(A &a) { (void)static_cast<B&>(a); } -// CHECK-DCAST-LABEL: define void @_Z4abrrO1A +// CHECK-DCAST-LABEL: define hidden void @_Z4abrrO1A void abrr(A &&a) { // CHECK-DCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1B") // CHECK-DCAST-NEXT: br i1 [[P]], label %[[CONTBB:[^ ]*]], label %[[TRAPBB:[^ ,]*]] @@ -59,7 +59,7 @@ void abrr(A &&a) { (void)static_cast<B&&>(a); } -// CHECK-UCAST-LABEL: define void @_Z3vbpPv +// CHECK-UCAST-LABEL: define hidden void @_Z3vbpPv void vbp(void *p) { // CHECK-UCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1B") // CHECK-UCAST-NEXT: br i1 [[P]], label %[[CONTBB:[^ ]*]], label %[[TRAPBB:[^ ,]*]] @@ -73,7 +73,7 @@ void vbp(void *p) { (void)static_cast<B*>(p); } -// CHECK-UCAST-LABEL: define void @_Z3vbrRc +// CHECK-UCAST-LABEL: define hidden void @_Z3vbrRc void vbr(char &r) { // CHECK-UCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1B") // CHECK-UCAST-NEXT: br i1 [[P]], label %[[CONTBB:[^ ]*]], label %[[TRAPBB:[^ ,]*]] @@ -87,7 +87,7 @@ void vbr(char &r) { (void)reinterpret_cast<B&>(r); } -// CHECK-UCAST-LABEL: define void @_Z4vbrrOc +// CHECK-UCAST-LABEL: define hidden void @_Z4vbrrOc void vbrr(char &&r) { // CHECK-UCAST: [[P:%[^ ]*]] = call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1B") // CHECK-UCAST-NEXT: br i1 [[P]], label %[[CONTBB:[^ ]*]], label %[[TRAPBB:[^ ,]*]] @@ -101,32 +101,32 @@ void vbrr(char &&r) { (void)reinterpret_cast<B&&>(r); } -// CHECK-UCAST-LABEL: define void @_Z3vcpPv -// CHECK-UCAST-STRICT-LABEL: define void @_Z3vcpPv +// CHECK-UCAST-LABEL: define hidden void @_Z3vcpPv +// CHECK-UCAST-STRICT-LABEL: define hidden void @_Z3vcpPv void vcp(void *p) { // CHECK-UCAST: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") // CHECK-UCAST-STRICT: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") (void)static_cast<C*>(p); } -// CHECK-UCAST-LABEL: define void @_Z3bcpP1B -// CHECK-UCAST-STRICT-LABEL: define void @_Z3bcpP1B +// CHECK-UCAST-LABEL: define hidden void @_Z3bcpP1B +// CHECK-UCAST-STRICT-LABEL: define hidden void @_Z3bcpP1B void bcp(B *p) { // CHECK-UCAST: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") // CHECK-UCAST-STRICT: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") (void)(C *)p; } -// CHECK-UCAST-LABEL: define void @_Z8bcp_callP1B -// CHECK-UCAST-STRICT-LABEL: define void @_Z8bcp_callP1B +// CHECK-UCAST-LABEL: define hidden void @_Z8bcp_callP1B +// CHECK-UCAST-STRICT-LABEL: define hidden void @_Z8bcp_callP1B void bcp_call(B *p) { // CHECK-UCAST: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1A") // CHECK-UCAST-STRICT: call i1 @llvm.bitset.test(i8* {{%[^ ]*}}, metadata !"_ZTS1C") ((C *)p)->f(); } -// CHECK-UCAST-LABEL: define i32 @_Z6a_callP1A -// CHECK-UCAST-STRICT-LABEL: define i32 @_Z6a_callP1A +// CHECK-UCAST-LABEL: define hidden i32 @_Z6a_callP1A +// CHECK-UCAST-STRICT-LABEL: define hidden i32 @_Z6a_callP1A int a_call(A *a) { // CHECK-UCAST-NOT: @llvm.bitset.test // CHECK-UCAST-STRICT-NOT: @llvm.bitset.test diff --git a/clang/test/CodeGenCXX/cfi-cross-dso.cpp b/clang/test/CodeGenCXX/cfi-cross-dso.cpp index edcbb783ccd..84a6879e55f 100644 --- a/clang/test/CodeGenCXX/cfi-cross-dso.cpp +++ b/clang/test/CodeGenCXX/cfi-cross-dso.cpp @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-vcall -fsanitize-cfi-cross-dso -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=ITANIUM %s -// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc -fsanitize=cfi-vcall -fsanitize-cfi-cross-dso -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=MS %s +// RUN: %clang_cc1 -flto -triple x86_64-unknown-linux -fsanitize=cfi-vcall -fsanitize-cfi-cross-dso -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=ITANIUM %s +// RUN: %clang_cc1 -flto -triple x86_64-pc-windows-msvc -fsanitize=cfi-vcall -fsanitize-cfi-cross-dso -emit-llvm -o - %s | FileCheck --check-prefix=CHECK --check-prefix=MS %s struct A { A(); diff --git a/clang/test/CodeGenCXX/cfi-ms-rtti.cpp b/clang/test/CodeGenCXX/cfi-ms-rtti.cpp index b6e9175c865..12c9868ceee 100644 --- a/clang/test/CodeGenCXX/cfi-ms-rtti.cpp +++ b/clang/test/CodeGenCXX/cfi-ms-rtti.cpp @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -emit-llvm -o - -triple=x86_64-pc-win32 %s -fsanitize=cfi-vcall | FileCheck --check-prefix=RTTI %s -// RUN: %clang_cc1 -emit-llvm -o - -triple=x86_64-pc-win32 %s -fsanitize=cfi-vcall -fno-rtti-data | FileCheck --check-prefix=NO-RTTI %s +// RUN: %clang_cc1 -flto -emit-llvm -o - -triple=x86_64-pc-win32 %s -fsanitize=cfi-vcall | FileCheck --check-prefix=RTTI %s +// RUN: %clang_cc1 -flto -emit-llvm -o - -triple=x86_64-pc-win32 %s -fsanitize=cfi-vcall -fno-rtti-data | FileCheck --check-prefix=NO-RTTI %s struct A { A(); diff --git a/clang/test/CodeGenCXX/cfi-nvcall.cpp b/clang/test/CodeGenCXX/cfi-nvcall.cpp index be4d8448a2e..ea18e216f07 100644 --- a/clang/test/CodeGenCXX/cfi-nvcall.cpp +++ b/clang/test/CodeGenCXX/cfi-nvcall.cpp @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-nvcall -emit-llvm -o - %s | FileCheck %s -// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-nvcall,cfi-cast-strict -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-STRICT %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fvisibility hidden -fsanitize=cfi-nvcall -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fvisibility hidden -fsanitize=cfi-nvcall,cfi-cast-strict -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-STRICT %s struct A { virtual void f(); diff --git a/clang/test/CodeGenCXX/cfi-stats.cpp b/clang/test/CodeGenCXX/cfi-stats.cpp index aac71634d0d..e6421321edd 100644 --- a/clang/test/CodeGenCXX/cfi-stats.cpp +++ b/clang/test/CodeGenCXX/cfi-stats.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple x86_64-unknown-linux -fsanitize=cfi-vcall,cfi-nvcall,cfi-derived-cast,cfi-unrelated-cast,cfi-icall -fsanitize-stats -emit-llvm -o - %s | FileCheck %s +// RUN: %clang_cc1 -triple x86_64-unknown-linux -fvisibility hidden -fsanitize=cfi-vcall,cfi-nvcall,cfi-derived-cast,cfi-unrelated-cast,cfi-icall -fsanitize-stats -emit-llvm -o - %s | FileCheck %s // CHECK: [[STATS:@[^ ]*]] = internal global { i8*, i32, [5 x [2 x i8*]] } { i8* null, i32 5, [5 x [2 x i8*]] // CHECK: {{\[\[}}2 x i8*] zeroinitializer, |