diff options
Diffstat (limited to 'clang/test/InterfaceStubs/hidden-class-inheritance.cpp')
-rw-r--r-- | clang/test/InterfaceStubs/hidden-class-inheritance.cpp | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/clang/test/InterfaceStubs/hidden-class-inheritance.cpp b/clang/test/InterfaceStubs/hidden-class-inheritance.cpp new file mode 100644 index 00000000000..de4c2993c72 --- /dev/null +++ b/clang/test/InterfaceStubs/hidden-class-inheritance.cpp @@ -0,0 +1,153 @@ +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 \ +// RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY="" \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: FileCheck -check-prefix=CHECK-X %s +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \ +// RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY="" \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: llvm-readelf -s - 2>&1 | \ +// RUN: FileCheck -check-prefix=CHECK-X-RE %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 \ +// RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY="" \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: FileCheck -check-prefix=CHECK-HP %s +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 \ +// RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY="" \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: FileCheck -check-prefix=CHECK-HP2 %s +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \ +// RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY="" \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: llvm-readelf -s - 2>&1 | \ +// RUN: FileCheck -check-prefix=CHECK-HP-RE %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 \ +// RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY=HIDDEN \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: FileCheck -check-prefix=CHECK-HC %s +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 \ +// RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY=HIDDEN \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: FileCheck -check-prefix=CHECK-HC2 %s +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \ +// RUN: -DPARENT_CLASS_VISIBILITY="" -DCHILD_CLASS_VISIBILITY=HIDDEN \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: llvm-readelf -s - 2>&1 | \ +// RUN: FileCheck -check-prefix=CHECK-HC-RE %s + +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -emit-interface-stubs \ +// RUN: -interface-stub-version=experimental-tapi-elf-v1 \ +// RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY=HIDDEN \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: FileCheck -check-prefix=CHECK-HP-HC %s +// RUN: %clang -target x86_64-unknown-linux-gnu -o - -c \ +// RUN: -DPARENT_CLASS_VISIBILITY=HIDDEN -DCHILD_CLASS_VISIBILITY=HIDDEN \ +// RUN: -DPARENT_METHOD_VISIBILITY="" -DCHILD_METHOD_VISIBILITY="" %s | \ +// RUN: llvm-readelf -s - 2>&1 | \ +// RUN: FileCheck -check-prefix=CHECK-HP-HC-RE %s + +// CHECK-X-DAG: _ZN1CC2Ev +// CHECK-X-DAG: _ZN1CD0Ev +// CHECK-X-DAG: _ZN1CD2Ev +// CHECK-X-DAG: _ZN1SC2Ev +// CHECK-X-DAG: _ZN1SD0Ev +// CHECK-X-DAG: _ZN1SD2Ev +// CHECK-X-DAG: _ZN1C1mEv +// CHECK-X-DAG: _ZN1S1nEv + +// CHECK-X-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1C1mEv +// CHECK-X-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1CC2Ev +// CHECK-X-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1CD0Ev +// CHECK-X-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1CD2Ev +// CHECK-X-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1S1nEv +// CHECK-X-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1SC2Ev +// CHECK-X-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1SD0Ev +// CHECK-X-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1SD2Ev + +// CHECK-HP2-DAG: _ZN1CC2Ev +// CHECK-HP2-DAG: _ZN1CD0Ev +// CHECK-HP2-DAG: _ZN1CD2Ev +// CHECK-HP2-DAG: _ZN1C1mEv + +// CHECK-HP-NOT: _ZN1S1nEv +// CHECK-HP-NOT: _ZN1SC2Ev +// CHECK-HP-NOT: _ZN1SD0Ev +// CHECK-HP-NOT: _ZN1SD2Ev + +// CHECK-HP-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1C1mEv +// CHECK-HP-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1CC2Ev +// CHECK-HP-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1CD0Ev +// CHECK-HP-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1CD2Ev +// CHECK-HP-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1S1nEv +// CHECK-HP-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1SC2Ev +// CHECK-HP-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1SD0Ev +// CHECK-HP-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1SD2Ev + +// CHECK-HC2-DAG: _ZN1SC2Ev +// CHECK-HC2-DAG: _ZN1SD0Ev +// CHECK-HC2-DAG: _ZN1SD2Ev +// CHECK-HC2-DAG: _ZN1S1nEv + +// CHECK-HC-NOT: _ZN1C1mEv +// CHECK-HC-NOT: _ZN1CC2Ev +// CHECK-HC-NOT: _ZN1CD0Ev +// CHECK-HC-NOT: _ZN1CD2Ev + +// CHECK-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1C1mEv +// CHECK-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1CC2Ev +// CHECK-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1CD0Ev +// CHECK-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1CD2Ev +// CHECK-HC-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1S1nEv +// CHECK-HC-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1SC2Ev +// CHECK-HC-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1SD0Ev +// CHECK-HC-RE: FUNC WEAK DEFAULT {{[0-9]+}} _ZN1SD2Ev + +// CHECK-HP-HC-NOT: _ZN1CC2Ev +// CHECK-HP-HC-NOT: _ZN1CD0Ev +// CHECK-HP-HC-NOT: _ZN1CD2Ev +// CHECK-HP-HC-NOT: _ZN1SC2Ev +// CHECK-HP-HC-NOT: _ZN1SD0Ev +// CHECK-HP-HC-NOT: _ZN1SD2Ev +// CHECK-HP-HC-NOT: _ZN1C1mEv +// CHECK-HP-HC-NOT: _ZN1S1nEv + +// CHECK-HP-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1C1mEv +// CHECK-HP-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1CC2Ev +// CHECK-HP-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1CD0Ev +// CHECK-HP-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1CD2Ev +// CHECK-HP-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1S1nEv +// CHECK-HP-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1SC2Ev +// CHECK-HP-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1SD0Ev +// CHECK-HP-HC-RE: FUNC WEAK HIDDEN {{[0-9]+}} _ZN1SD2Ev + +// TODO: clang+llvm does not materialize complete ctors and dtors for the +// Itanium abi. Figure out why and add the check-not for these: +// _ZN1CC1Ev +// _ZN1CD1Ev +// _ZN1SC1Ev +// _ZN1SD1Ev + +#define HIDDEN __attribute__((__visibility__("hidden"))) +#define DEFAULT __attribute__((__visibility__("default"))) + +struct PARENT_CLASS_VISIBILITY S { + virtual ~S() {} + virtual PARENT_METHOD_VISIBILITY void n() {} +}; + +class CHILD_CLASS_VISIBILITY C : public S { +public: + virtual CHILD_METHOD_VISIBILITY void m() {} +}; + +void f() { + C c; + c.m(); + c.n(); +} |