79 lines · cpp
1// This test checks if internal linkage symbols get unique names with2// -funique-internal-linkage-names option.3// RUN: %clang_cc1 -triple x86_64-linux-gnu -x c++ -emit-llvm -o - < %s | FileCheck %s --check-prefix=PLAIN4// RUN: %clang_cc1 -triple x86_64-linux-gnu -x c++ -emit-llvm -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUE5 6static int glob;7static int foo() {8 return 0;9}10 11int (*bar())() {12 return foo;13}14 15int getGlob() {16 return glob;17}18 19// Function local static variable and anonymous namespace namespace variable.20namespace {21int anon_m;22int getM() {23 return anon_m;24}25} // namespace26 27int retAnonM() {28 static int fGlob;29 return getM() + fGlob;30}31 32// Multiversioning symbols33__attribute__((target("default"))) static int mver() {34 return 0;35}36 37__attribute__((target("sse4.2"))) static int mver() {38 return 1;39}40 41int mver_call() {42 return mver();43}44 45namespace {46class A {47public:48 A() {}49 ~A() {}50};51}52 53void test() {54 A a;55}56 57// PLAIN: @_ZL4glob = internal global58// PLAIN: @_ZZ8retAnonMvE5fGlob = internal global59// PLAIN: @_ZN12_GLOBAL__N_16anon_mE = internal global60// PLAIN: define internal noundef i32 @_ZL3foov()61// PLAIN: define internal noundef i32 @_ZN12_GLOBAL__N_14getMEv62// PLAIN: define internal ptr @_ZL4mverv.resolver()63// PLAIN: define internal void @_ZN12_GLOBAL__N_11AC1Ev64// PLAIN: define internal void @_ZN12_GLOBAL__N_11AD1Ev65// PLAIN: define internal noundef i32 @_ZL4mverv()66// PLAIN: define internal noundef i32 @_ZL4mverv.sse4.2()67// PLAIN-NOT: "sample-profile-suffix-elision-policy"68// UNIQUE: @_ZL4glob = internal global69// UNIQUE: @_ZZ8retAnonMvE5fGlob = internal global70// UNIQUE: @_ZN12_GLOBAL__N_16anon_mE = internal global71// UNIQUE: define internal noundef i32 @_ZL3foov.[[MODHASH:__uniq.[0-9]+]]() #[[#ATTR:]] {72// UNIQUE: define internal noundef i32 @_ZN12_GLOBAL__N_14getMEv.[[MODHASH]]73// UNIQUE: define internal ptr @_ZL4mverv.[[MODHASH]].resolver()74// UNIQUE: define internal void @_ZN12_GLOBAL__N_11AC1Ev.__uniq.6835850961007071788988413074729629367175// UNIQUE: define internal void @_ZN12_GLOBAL__N_11AD1Ev.__uniq.6835850961007071788988413074729629367176// UNIQUE: define internal noundef i32 @_ZL4mverv.[[MODHASH]]()77// UNIQUE: define internal noundef i32 @_ZL4mverv.[[MODHASH]].sse4.278// UNIQUE: attributes #[[#ATTR]] = { {{.*}}"sample-profile-suffix-elision-policy"{{.*}} }79