summaryrefslogtreecommitdiffstats
path: root/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2012-08-15 20:02:54 +0000
committerdim <dim@FreeBSD.org>2012-08-15 20:02:54 +0000
commit554bcb69c2d785a011a30e7db87a36a87fe7db10 (patch)
tree9abb1a658a297776086f4e0dfa6ca533de02104e /test/CodeGenCXX/devirtualize-virtual-function-calls.cpp
parentbb67ca86b31f67faee50bd10c3b036d65751745a (diff)
downloadFreeBSD-src-554bcb69c2d785a011a30e7db87a36a87fe7db10.zip
FreeBSD-src-554bcb69c2d785a011a30e7db87a36a87fe7db10.tar.gz
Vendor import of clang trunk r161861:
http://llvm.org/svn/llvm-project/cfe/trunk@161861
Diffstat (limited to 'test/CodeGenCXX/devirtualize-virtual-function-calls.cpp')
-rw-r--r--test/CodeGenCXX/devirtualize-virtual-function-calls.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp b/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp
index 5eede66..c5a4094 100644
--- a/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp
+++ b/test/CodeGenCXX/devirtualize-virtual-function-calls.cpp
@@ -53,3 +53,33 @@ void f() {
B().h().f();
}
+namespace test2 {
+ struct foo {
+ virtual void f();
+ virtual ~foo();
+ };
+
+ struct bar : public foo {
+ virtual void f();
+ virtual ~bar();
+ };
+
+ void f(bar *b) {
+ // CHECK: call void @_ZN5test23foo1fEv
+ // CHECK: call void @_ZN5test23fooD1Ev
+ b->foo::f();
+ b->foo::~foo();
+ }
+}
+
+namespace test3 {
+ // Test that we don't crash in this case.
+ struct B {
+ };
+ struct D : public B {
+ };
+ void f(D d) {
+ // CHECK: define void @_ZN5test31fENS_1DE
+ d.B::~B();
+ }
+}
OpenPOWER on IntegriCloud