xref: /llvm-project/clang/test/InterfaceStubs/virtual.cpp (revision 8df7f1a218f216cc90d277baed3afc501df2a5bc)
1 // RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
2 // RUN: -interface-stub-version=experimental-tapi-elf-v1 %s | \
3 // RUN: FileCheck -check-prefix=CHECK-TAPI %s
4 // RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
5 // RUN: -interface-stub-version=experimental-tapi-elf-v1 %s | \
6 // RUN: FileCheck -check-prefix=CHECK-TAPI2 %s
7 // RUN: %clang -target x86_64-unknown-linux-gnu -o - -c %s | \
8 // RUN: llvm-readelf -s - 2>&1 | FileCheck -check-prefix=CHECK-SYMBOLS %s
9 
10 #define HIDDEN  __attribute__((__visibility__(("hidden"))))
11 #define DEFAULT __attribute__((__visibility__(("default"))))
12 
13 // CHECK-TAPI-NOT: _ZNK1Q5func1Ev
14 // CHECK-TAPI-NOT: _ZNK1Q5func2Ev
15 // CHECK-SYMBOLS-DAG: NOTYPE  GLOBAL HIDDEN   {{.*}} _ZNK1Q5func1Ev
16 // CHECK-SYMBOLS-DAG: NOTYPE  GLOBAL DEFAULT  {{.*}} _ZNK1Q5func2Ev
17 struct Q {
18   virtual HIDDEN  int func1() const;
19   virtual DEFAULT int func2() const;
20 } q;
21 
22 // CHECK-TAPI-NOT: _ZNK1S5func1Ev
23 // CHECK-TAPI2-DAG: _ZNK1S5func2Ev
24 // CHECK-SYMBOLS-DAG: FUNC    WEAK   HIDDEN   {{.*}} _ZNK1S5func1Ev
25 // CHECK-SYMBOLS-DAG: FUNC    WEAK   DEFAULT  {{.*}} _ZNK1S5func2Ev
26 struct S {
27   virtual HIDDEN  int func1() const { return 42; }
28   virtual DEFAULT int func2() const { return 42; }
29 } s;
30 
31 // CHECK-TAPI-NOT: _ZNK1R5func1Ev
32 // CHECK-TAPI-NOT: _ZNK1R5func2Ev
33 // CHECK-SYMBOLS-NOT: _ZNK1R5func1Ev
34 // CHECK-SYMBOLS-NOT: _ZNK1R5func2Ev
35 struct R {
36   virtual HIDDEN  int func1() const = 0;
37   virtual DEFAULT int func2() const = 0;
38 };
39 
40 int a = q.func1() + q.func2();
41 
42