1678e19d8SPuyan Lotfi // REQUIRES: x86-registered-target
2e782192dSPuyan Lotfi // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
368f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY="" \
468f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
568f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-X %s
668f29dacSPuyan Lotfi // RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \
768f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY="" \
868f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
968f29dacSPuyan Lotfi // RUN: llvm-readelf -s - 2>&1 | \
1068f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-X-RE %s
1168f29dacSPuyan Lotfi
12e782192dSPuyan Lotfi // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
1368f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY="" \
1468f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
1568f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-HP %s
16e782192dSPuyan Lotfi // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
17*61fa9afeSHaowei Wu // RUN: -interface-stub-version=ifs-v1 \
1868f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY="" \
1968f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
2068f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-HP2 %s
2168f29dacSPuyan Lotfi // RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \
2268f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY="" \
2368f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
2468f29dacSPuyan Lotfi // RUN: llvm-readelf -s - 2>&1 | \
2568f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-HP-RE %s
2668f29dacSPuyan Lotfi
27e782192dSPuyan Lotfi // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
2868f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY=HIDDEN \
2968f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
3068f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-HC %s
31e782192dSPuyan Lotfi // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
3268f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY=HIDDEN \
3368f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
3468f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-HC2 %s
3568f29dacSPuyan Lotfi // RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \
3668f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY=HIDDEN \
3768f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
3868f29dacSPuyan Lotfi // RUN: llvm-readelf -s - 2>&1 | \
3968f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-HC-RE %s
4068f29dacSPuyan Lotfi
41e782192dSPuyan Lotfi // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
4268f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY=HIDDEN \
4368f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
4468f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-HP-HC %s
4568f29dacSPuyan Lotfi // RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \
4668f29dacSPuyan Lotfi // RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY=HIDDEN \
4768f29dacSPuyan Lotfi // RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \
4868f29dacSPuyan Lotfi // RUN: llvm-readelf -s - 2>&1 | \
4968f29dacSPuyan Lotfi // RUN: FileCheck -check-prefix=CHECK-HP-HC-RE %s
5068f29dacSPuyan Lotfi
5168f29dacSPuyan Lotfi // CHECK-X-DAG: _ZN1CC2Ev
5268f29dacSPuyan Lotfi // CHECK-X-DAG: _ZN1CD0Ev
5368f29dacSPuyan Lotfi // CHECK-X-DAG: _ZN1CD2Ev
5468f29dacSPuyan Lotfi // CHECK-X-DAG: _ZN1SC2Ev
5568f29dacSPuyan Lotfi // CHECK-X-DAG: _ZN1SD0Ev
5668f29dacSPuyan Lotfi // CHECK-X-DAG: _ZN1SD2Ev
5768f29dacSPuyan Lotfi // CHECK-X-DAG: _ZN1C1mEv
5868f29dacSPuyan Lotfi // CHECK-X-DAG: _ZN1S1nEv
5968f29dacSPuyan Lotfi
6039db16e7SFangrui Song // CHECK-X-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1C1mEv
6139db16e7SFangrui Song // CHECK-X-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1CC2Ev
6239db16e7SFangrui Song // CHECK-X-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1CD0Ev
6339db16e7SFangrui Song // CHECK-X-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1CD2Ev
6439db16e7SFangrui Song // CHECK-X-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1S1nEv
6539db16e7SFangrui Song // CHECK-X-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1SC2Ev
6639db16e7SFangrui Song // CHECK-X-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1SD0Ev
6739db16e7SFangrui Song // CHECK-X-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1SD2Ev
6868f29dacSPuyan Lotfi
6968f29dacSPuyan Lotfi // CHECK-HP2-DAG: _ZN1CC2Ev
7068f29dacSPuyan Lotfi // CHECK-HP2-DAG: _ZN1CD0Ev
7168f29dacSPuyan Lotfi // CHECK-HP2-DAG: _ZN1CD2Ev
7268f29dacSPuyan Lotfi // CHECK-HP2-DAG: _ZN1C1mEv
7368f29dacSPuyan Lotfi
7468f29dacSPuyan Lotfi // CHECK-HP-NOT: _ZN1S1nEv
7568f29dacSPuyan Lotfi // CHECK-HP-NOT: _ZN1SC2Ev
7668f29dacSPuyan Lotfi // CHECK-HP-NOT: _ZN1SD0Ev
7768f29dacSPuyan Lotfi // CHECK-HP-NOT: _ZN1SD2Ev
7868f29dacSPuyan Lotfi
7939db16e7SFangrui Song // CHECK-HP-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1C1mEv
8039db16e7SFangrui Song // CHECK-HP-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1CC2Ev
8139db16e7SFangrui Song // CHECK-HP-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1CD0Ev
8239db16e7SFangrui Song // CHECK-HP-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1CD2Ev
8339db16e7SFangrui Song // CHECK-HP-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1S1nEv
8439db16e7SFangrui Song // CHECK-HP-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1SC2Ev
8539db16e7SFangrui Song // CHECK-HP-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1SD0Ev
8639db16e7SFangrui Song // CHECK-HP-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1SD2Ev
8768f29dacSPuyan Lotfi
8868f29dacSPuyan Lotfi // CHECK-HC2-DAG: _ZN1SC2Ev
8968f29dacSPuyan Lotfi // CHECK-HC2-DAG: _ZN1SD0Ev
9068f29dacSPuyan Lotfi // CHECK-HC2-DAG: _ZN1SD2Ev
9168f29dacSPuyan Lotfi // CHECK-HC2-DAG: _ZN1S1nEv
9268f29dacSPuyan Lotfi
9368f29dacSPuyan Lotfi // CHECK-HC-NOT: _ZN1C1mEv
9468f29dacSPuyan Lotfi // CHECK-HC-NOT: _ZN1CC2Ev
9568f29dacSPuyan Lotfi // CHECK-HC-NOT: _ZN1CD0Ev
9668f29dacSPuyan Lotfi // CHECK-HC-NOT: _ZN1CD2Ev
9768f29dacSPuyan Lotfi
9839db16e7SFangrui Song // CHECK-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1C1mEv
9939db16e7SFangrui Song // CHECK-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1CC2Ev
10039db16e7SFangrui Song // CHECK-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1CD0Ev
10139db16e7SFangrui Song // CHECK-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1CD2Ev
10239db16e7SFangrui Song // CHECK-HC-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1S1nEv
10339db16e7SFangrui Song // CHECK-HC-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1SC2Ev
10439db16e7SFangrui Song // CHECK-HC-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1SD0Ev
10539db16e7SFangrui Song // CHECK-HC-RE-DAG: FUNC WEAK DEFAULT [[#]] _ZN1SD2Ev
10668f29dacSPuyan Lotfi
10768f29dacSPuyan Lotfi // CHECK-HP-HC-NOT: _ZN1CC2Ev
10868f29dacSPuyan Lotfi // CHECK-HP-HC-NOT: _ZN1CD0Ev
10968f29dacSPuyan Lotfi // CHECK-HP-HC-NOT: _ZN1CD2Ev
11068f29dacSPuyan Lotfi // CHECK-HP-HC-NOT: _ZN1SC2Ev
11168f29dacSPuyan Lotfi // CHECK-HP-HC-NOT: _ZN1SD0Ev
11268f29dacSPuyan Lotfi // CHECK-HP-HC-NOT: _ZN1SD2Ev
11368f29dacSPuyan Lotfi // CHECK-HP-HC-NOT: _ZN1C1mEv
11468f29dacSPuyan Lotfi // CHECK-HP-HC-NOT: _ZN1S1nEv
11568f29dacSPuyan Lotfi
11639db16e7SFangrui Song // CHECK-HP-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1C1mEv
11739db16e7SFangrui Song // CHECK-HP-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1CC2Ev
11839db16e7SFangrui Song // CHECK-HP-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1CD0Ev
11939db16e7SFangrui Song // CHECK-HP-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1CD2Ev
12039db16e7SFangrui Song // CHECK-HP-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1S1nEv
12139db16e7SFangrui Song // CHECK-HP-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1SC2Ev
12239db16e7SFangrui Song // CHECK-HP-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1SD0Ev
12339db16e7SFangrui Song // CHECK-HP-HC-RE-DAG: FUNC WEAK HIDDEN [[#]] _ZN1SD2Ev
12468f29dacSPuyan Lotfi
12568f29dacSPuyan Lotfi // TODO: clang+llvm does not materialize complete ctors and dtors for the
12668f29dacSPuyan Lotfi // Itanium abi. Figure out why and add the check-not for these:
12768f29dacSPuyan Lotfi // _ZN1CC1Ev
12868f29dacSPuyan Lotfi // _ZN1CD1Ev
12968f29dacSPuyan Lotfi // _ZN1SC1Ev
13068f29dacSPuyan Lotfi // _ZN1SD1Ev
13168f29dacSPuyan Lotfi
13268f29dacSPuyan Lotfi #define HIDDEN __attribute__((__visibility__("hidden")))
13368f29dacSPuyan Lotfi #define DEFAULT __attribute__((__visibility__("default")))
13468f29dacSPuyan Lotfi
13568f29dacSPuyan Lotfi struct PARENT_CLASS_VISIBILITY S {
~SS13668f29dacSPuyan Lotfi virtual ~S() {}
nS13768f29dacSPuyan Lotfi virtual PARENT_METHOD_VISIBILITY void n() {}
13868f29dacSPuyan Lotfi };
13968f29dacSPuyan Lotfi
14068f29dacSPuyan Lotfi class CHILD_CLASS_VISIBILITY C : public S {
14168f29dacSPuyan Lotfi public:
m()14268f29dacSPuyan Lotfi virtual CHILD_METHOD_VISIBILITY void m() {}
14368f29dacSPuyan Lotfi };
14468f29dacSPuyan Lotfi
f()14568f29dacSPuyan Lotfi void f() {
14668f29dacSPuyan Lotfi C c;
14768f29dacSPuyan Lotfi c.m();
14868f29dacSPuyan Lotfi c.n();
14968f29dacSPuyan Lotfi }
150