devirtualize-virtual-function-calls-final.cpp revision 1679f5a84ae1e578b0de347c89eaf31e0465f33c
1// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s 2 3namespace Test1 { 4 struct A { 5 virtual int f() final; 6 }; 7 8 // CHECK: define i32 @_ZN5Test11fEPNS_1AE 9 int f(A *a) { 10 // CHECK: call i32 @_ZN5Test11A1fEv 11 return a->f(); 12 } 13} 14 15namespace Test2 { 16 struct A final { 17 virtual int f(); 18 }; 19 20 // CHECK: define i32 @_ZN5Test21fEPNS_1AE 21 int f(A *a) { 22 // CHECK: call i32 @_ZN5Test21A1fEv 23 return a->f(); 24 } 25} 26 27namespace Test3 { 28 struct A { 29 virtual int f(); 30 }; 31 32 struct B final : A { }; 33 34 // CHECK: define i32 @_ZN5Test31fEPNS_1BE 35 int f(B *b) { 36 // CHECK: call i32 @_ZN5Test31A1fEv 37 return b->f(); 38 } 39} 40