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