91 lines · cpp
1// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck %s2namespace foo {3 4// CHECK-NOT: @a = global5extern "C" int a;6 7// CHECK-NOT: @_ZN3foo1bE = global8extern int b;9 10// CHECK: @_ZN3foo1cE = {{(dso_local )?}}global11int c = 5;12 13// CHECK-NOT: @_ZN3foo1dE14extern "C" struct d;15 16// CHECK-NOT: should_not_appear17extern "C++" int should_not_appear;18 19// CHECK: @_ZN3foo10extern_cxxE = {{(dso_local )?}}global20extern "C++" int extern_cxx = 0;21 22}23 24// CHECK-NOT: @global_a = {{(dso_local )?}}global25extern "C" int global_a;26 27// CHECK: @global_b = {{(dso_local )?}}global28extern "C" int global_b = 0;29 30// CHECK-NOT: should_not_appear31extern "C++" int should_not_appear;32 33// CHECK: @extern_cxx = {{(dso_local )?}}global34extern "C++" int extern_cxx = 0;35 36namespace test1 {37 namespace {38 struct X {};39 }40 extern "C" {41 // CHECK: @test1_b = {{(dso_local )?}}global42 X test1_b = X();43 }44 void *use = &test1_b;45 // CHECK: @_ZN5test13useE = {{(dso_local )?}}global46}47 48namespace test2 {49 namespace {50 struct X {};51 }52 53 // CHECK: @test2_b = {{(dso_local )?}}global54 extern "C" X test2_b;55 X test2_b;56}57 58extern "C" {59 static int unused_var;60 static int unused_fn() { return 0; }61 62 __attribute__((used)) static int internal_var;63 __attribute__((used)) static int internal_fn() { return 0; }64 65 __attribute__((used)) static int duplicate_internal_var;66 __attribute__((used)) static int duplicate_internal_fn() { return 0; }67 68 namespace N {69 __attribute__((used)) static int duplicate_internal_var;70 __attribute__((used)) static int duplicate_internal_fn() { return 0; }71 }72 73 // CHECK: @llvm.compiler.used = appending global {{.*}} @internal_var, {{.*}} @internal_fn74 75 // CHECK-NOT: @unused76 // CHECK-NOT: @duplicate_internal77 // CHECK: @internal_var = internal alias i32, ptr @_ZL12internal_var78 // CHECK-NOT: @unused79 // CHECK-NOT: @duplicate_internal80 // CHECK: @internal_fn = internal alias i32 (), ptr @_ZL11internal_fnv81 // CHECK-NOT: @unused82 // CHECK-NOT: @duplicate_internal83}84 85namespace PR19411 {86 struct A { void f(); };87 extern "C" void A::f() { void g(); g(); }88 // CHECK-LABEL: @_ZN7PR194111A1fEv(89 // CHECK: call {{.*}}void @g()90}91