// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck %s
namespace foo {

// CHECK-NOT: @a = global
extern "C" int a;

// CHECK-NOT: @_ZN3foo1bE = global
extern int b;

// CHECK: @_ZN3foo1cE = {{(dso_local )?}}global
int c = 5;

// CHECK-NOT: @_ZN3foo1dE
extern "C" struct d;

// CHECK-NOT: should_not_appear
extern "C++" int should_not_appear;

// CHECK: @_ZN3foo10extern_cxxE = {{(dso_local )?}}global
extern "C++" int extern_cxx = 0;

}

// CHECK-NOT: @global_a = {{(dso_local )?}}global
extern "C" int global_a;

// CHECK: @global_b = {{(dso_local )?}}global
extern "C" int global_b = 0;

// CHECK-NOT: should_not_appear
extern "C++" int should_not_appear;

// CHECK: @extern_cxx = {{(dso_local )?}}global
extern "C++" int extern_cxx = 0;

namespace test1 {
  namespace {
    struct X {};
  }
  extern "C" {
    // CHECK: @test1_b = {{(dso_local )?}}global
    X test1_b = X();
  }
  void *use = &test1_b;
  // CHECK: @_ZN5test13useE = {{(dso_local )?}}global
}

namespace test2 {
  namespace {
    struct X {};
  }

  // CHECK: @test2_b = {{(dso_local )?}}global
  extern "C" X test2_b;
  X test2_b;
}

extern "C" {
  static int unused_var;
  static int unused_fn() { return 0; }

  __attribute__((used)) static int internal_var;
  __attribute__((used)) static int internal_fn() { return 0; }

  __attribute__((used)) static int duplicate_internal_var;
  __attribute__((used)) static int duplicate_internal_fn() { return 0; }

  namespace N {
    __attribute__((used)) static int duplicate_internal_var;
    __attribute__((used)) static int duplicate_internal_fn() { return 0; }
  }

  // CHECK: @llvm.used = appending global {{.*}} @internal_var {{.*}} @internal_fn 

  // CHECK-NOT: @unused
  // CHECK-NOT: @duplicate_internal
  // CHECK: @internal_var = internal alias i32, i32* @_ZL12internal_var
  // CHECK-NOT: @unused
  // CHECK-NOT: @duplicate_internal
  // CHECK: @internal_fn = internal alias i32 (), i32 ()* @_ZL11internal_fnv
  // CHECK-NOT: @unused
  // CHECK-NOT: @duplicate_internal
}

namespace PR19411 {
  struct A { void f(); };
  extern "C" void A::f() { void g(); g(); }
  // CHECK-LABEL: @_ZN7PR194111A1fEv(
  // CHECK: call {{.*}}void @g()
}
