When calling a virtual member function on a base class and the most derived class is marked 'final', we can devirtualize the call.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124524 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp b/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
index f6f2a49..08a9490 100644
--- a/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
+++ b/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
@@ -23,3 +23,17 @@
     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();
+  }
+}