forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			150 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
	
| // REQUIRES: x86-registered-target
 | |
| // RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
 | |
| // 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_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
 | |
| // 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_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
 | |
| // RUN: -interface-stub-version=experimental-ifs-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_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
 | |
| // 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_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
 | |
| // 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_cc1 -triple x86_64-unknown-linux-gnu -o - -emit-interface-stubs \
 | |
| // 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();
 | |
| }
 |