// RUN: %clang_cc1 -no-opaque-pointers -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST1
// RUN: %clang_cc1 -no-opaque-pointers -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST2 -emit-llvm -o - | FileCheck %s
// RUN: %clang_cc1 -no-opaque-pointers -triple %itanium_abi_triple -emit-llvm-only %s -verify -DTEST3
// RUN: %clang_cc1 -no-opaque-pointers -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

