summaryrefslogtreecommitdiffstats
path: root/test/CodeGenCXX/cfi-speculative-vtable.cpp
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2016-01-23 01:20:18 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2016-01-23 01:20:18 +0000
commit69bb2de9d80b5a3c577b46e6036449c4d7a05391 (patch)
tree4237cf7efc3626c433506b3458ae8b7e103f68dd /test/CodeGenCXX/cfi-speculative-vtable.cpp
parent1d03689e5357d66172c35b2ff550a0fa5d2a36d1 (diff)
[cfi] Do not emit bit set entry for available_externally vtables.
In the Itanium ABI, vtable may be emitted speculatively as an available_externally global. Such vtable may not be present at the link time and should not have a corresponding CFI bit set entry. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@258596 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/cfi-speculative-vtable.cpp')
-rw-r--r--test/CodeGenCXX/cfi-speculative-vtable.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/test/CodeGenCXX/cfi-speculative-vtable.cpp b/test/CodeGenCXX/cfi-speculative-vtable.cpp
new file mode 100644
index 0000000000..490190c4af
--- /dev/null
+++ b/test/CodeGenCXX/cfi-speculative-vtable.cpp
@@ -0,0 +1,14 @@
+// Test that we don't emit a bit set entry for a speculative (available_externally) vtable.
+// This does not happen in the Microsoft ABI.
+// RUN: %clang_cc1 -triple x86_64-unknown-linux -O1 -fsanitize=cfi-vcall -fsanitize-trap=cfi-vcall -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -triple x86_64-unknown-linux -O1 -fsanitize=cfi-vcall -fsanitize-trap=cfi-vcall -fsanitize-cfi-cross-dso -emit-llvm -o - %s | FileCheck %s
+
+class A {
+ public:
+ virtual ~A();
+};
+
+A a;
+
+// CHECK: @_ZTV1A ={{.*}} available_externally
+// CHECK-NOT: !{{.*}} = !{!{{.*}}, [4 x i8*]* @_ZTV1A, i64 16}