forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST1
 | |
| // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST2 -emit-llvm -o - | FileCheck %s
 | |
| // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST3
 | |
| // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST4
 | |
| 
 | |
| #ifdef TEST1
 | |
| 
 | |
| // rdar://15522601
 | |
| class MyClass {
 | |
|  static void meth();
 | |
| };
 | |
| void MyClass::meth() { } // expected-note {{previous}}
 | |
| extern "C" {
 | |
|   void _ZN7MyClass4methEv() { } // expected-error {{definition with same mangled name '_ZN7MyClass4methEv' as another definition}}
 | |
| }
 | |
| 
 | |
| #elif TEST2
 | |
| 
 | |
| // expected-no-diagnostics
 | |
| 
 | |
| // We expect no warnings here, as there is only declaration of _ZN1TD1Ev
 | |
| // function, no definitions.
 | |
| extern "C" void _ZN1TD1Ev();
 | |
| struct T {
 | |
|   ~T() {}
 | |
| };
 | |
| 
 | |
| // We expect no warnings here, as there is only declaration of _ZN2nm3abcE
 | |
| // global, no definitions.
 | |
| extern "C" {
 | |
|   int _ZN2nm3abcE;
 | |
| }
 | |
| 
 | |
| namespace nm {
 | |
|   float abc = 2;
 | |
| }
 | |
| // CHECK: @_ZN2nm3abcE = {{(dso_local )?}}global float
 | |
| 
 | |
| float foo() {
 | |
|   _ZN1TD1Ev();
 | |
| // CHECK: call void bitcast ({{.*}} (%struct.T*)* @_ZN1TD1Ev to void ()*)()
 | |
|   T t;
 | |
| // CHECK: call {{.*}} @_ZN1TD1Ev(%struct.T* %t)
 | |
|   return _ZN2nm3abcE + nm::abc;
 | |
| }
 | |
| 
 | |
| #elif TEST3
 | |
| 
 | |
| extern "C" void _ZN2T2D2Ev() {}; // expected-note {{previous definition is here}}
 | |
| 
 | |
| struct T2 {
 | |
|   ~T2() {} // expected-error {{definition with same mangled name '_ZN2T2D2Ev' as another definition}}
 | |
| };
 | |
| 
 | |
| void foo() {
 | |
|   _ZN2T2D2Ev();
 | |
|   T2 t;
 | |
| }
 | |
| 
 | |
| #elif TEST4
 | |
| 
 | |
| extern "C" {
 | |
|   int _ZN2nm3abcE = 1; // expected-note {{previous definition is here}}
 | |
| }
 | |
| 
 | |
| namespace nm {
 | |
|   float abc = 2; // expected-error {{definition with same mangled name '_ZN2nm3abcE' as another definition}}
 | |
| }
 | |
| 
 | |
| float foo() {
 | |
|   return _ZN2nm3abcE + nm::abc;
 | |
| }
 | |
| 
 | |
| #else
 | |
| 
 | |
| #error Unknown test
 | |
| 
 | |
| #endif
 | |
| 
 |