This reverts commit d618f1c3b12effd0c2bdb7d02108d3551f389d3d. This commit wasn't reviewed ahead of time and significant concerns were raised immediately after it landed. According to our developer policy this warrants immediate revert of the commit. https://llvm.org/docs/DeveloperPolicy.html#patch-reversion-policy Differential Revision: https://reviews.llvm.org/D155509
80 lines
1.7 KiB
C++
80 lines
1.7 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 @_ZN1TD1Ev()
|
|
T t;
|
|
// CHECK: call {{.*}} @_ZN1TD1Ev(ptr {{[^,]*}} %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
|
|
|