xref: /llvm-project/clang/test/CodeGenCXX/devirtualize-virtual-function-calls-final.cpp (revision 1ae64c5a9d1de20e0f321649f17708e95b3fda1a)
1 // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s
2 
3 namespace 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 
15 namespace 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 
27 namespace 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