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
diff --git a/clang/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp b/clang/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp
index f6f2a49..08a9490 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 @@
     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();
+  }
+}