aboutsummaryrefslogtreecommitdiff
path: root/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2011-01-29 05:04:11 +0000
committerAnders Carlsson <andersca@mac.com>2011-01-29 05:04:11 +0000
commit268ab8c6b92dc40c678d8458a335698fa34915c9 (patch)
tree0c8fc26f8ab9044d2d4b416853966ea1f1b46514 /test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
parent1679f5a84ae1e578b0de347c89eaf31e0465f33c (diff)
When trying to get the most derived class, don't assume that we can ignore all casts. We can only ignore derived-to-base and no-op casts. Fixes selfhost.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124528 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp')
-rw-r--r--test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp b/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
index 08a94903d5..3de75ed3db 100644
--- a/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
+++ b/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
@@ -36,4 +36,16 @@ namespace Test3 {
// CHECK: call i32 @_ZN5Test31A1fEv
return b->f();
}
+
+ // CHECK: define i32 @_ZN5Test31fERNS_1BE
+ int f(B &b) {
+ // CHECK: call i32 @_ZN5Test31A1fEv
+ return b.f();
+ }
+
+ // CHECK: define i32 @_ZN5Test31fEPv
+ int f(void *v) {
+ // CHECK: call i32 @_ZN5Test31A1fEv
+ return static_cast<B*>(v)->f();
+ }
}