1 // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST1 2 // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST2 -emit-llvm -o - | FileCheck %s 3 // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST3 4 // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST4 5 6 #ifdef TEST1 7 8 // rdar://15522601 9 class MyClass { 10 static void meth(); 11 }; 12 void MyClass::meth() { } // expected-note {{previous}} 13 extern "C" { 14 void _ZN7MyClass4methEv() { } // expected-error {{definition with same mangled name as another definition}} 15 } 16 17 #elif TEST2 18 19 // expected-no-diagnostics 20 21 // We expect no warnings here, as there is only declaration of _ZN1TD1Ev 22 // function, no definitions. 23 extern "C" void _ZN1TD1Ev(); 24 struct T { 25 ~T() {} 26 }; 27 28 // We expect no warnings here, as there is only declaration of _ZN2nm3abcE 29 // global, no definitions. 30 extern "C" { 31 int _ZN2nm3abcE; 32 } 33 34 namespace nm { 35 float abc = 2; 36 } 37 // CHECK: @_ZN2nm3abcE = global float 38 39 float foo() { 40 _ZN1TD1Ev(); 41 // CHECK: call void bitcast ({{.*}} (%struct.T*)* @_ZN1TD1Ev to void ()*)() 42 T t; 43 // CHECK: call {{.*}} @_ZN1TD1Ev(%struct.T* %t) 44 return _ZN2nm3abcE + nm::abc; 45 } 46 47 #elif TEST3 48 49 extern "C" void _ZN2T2D2Ev() {}; // expected-note {{previous definition is here}} 50 51 struct T2 { 52 ~T2() {} // expected-error {{definition with same mangled name as another definition}} 53 }; 54 55 void foo() { 56 _ZN2T2D2Ev(); 57 T2 t; 58 } 59 60 #elif TEST4 61 62 extern "C" { 63 int _ZN2nm3abcE = 1; // expected-note {{previous definition is here}} 64 } 65 66 namespace nm { 67 float abc = 2; // expected-error {{definition with same mangled name as another definition}} 68 } 69 70 float foo() { 71 return _ZN2nm3abcE + nm::abc; 72 } 73 74 #else 75 76 #error Unknwon test 77 78 #endif 79 80