summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2011-01-29 03:52:01 +0000
committerAnders Carlsson <andersca@mac.com>2011-01-29 03:52:01 +0000
commit1ae64c5a9d1de20e0f321649f17708e95b3fda1a (patch)
tree2e16c40a601246c0d4db80d8093a7748deea033d /clang/test/CodeGenCXX
parenta376b536951f892bcc31928a7a9cc205d5d9bc1b (diff)
downloadbcm5719-llvm-1ae64c5a9d1de20e0f321649f17708e95b3fda1a.tar.gz
bcm5719-llvm-1ae64c5a9d1de20e0f321649f17708e95b3fda1a.zip
When calling a virtual member function on a base class and the most derived class is marked 'final', we can devirtualize the call.
llvm-svn: 124524
Diffstat (limited to 'clang/test/CodeGenCXX')
-rw-r--r--clang/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp b/clang/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
index f6f2a491339..08a94903d52 100644
--- a/clang/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
+++ b/clang/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
@@ -23,3 +23,17 @@ namespace Test2 {
return a->f();
}
}
+
+namespace Test3 {
+ struct A {
+ virtual int f();
+ };
+
+ struct B final : A { };
+
+ // CHECK: define i32 @_ZN5Test31fEPNS_1BE
+ int f(B *b) {
+ // CHECK: call i32 @_ZN5Test31A1fEv
+ return b->f();
+ }
+}
OpenPOWER on IntegriCloud