1 // This test checks if internal linkage symbols get unique names with
2 // -funique-internal-linkage-names option.
3 // RUN: %clang_cc1 -triple x86_64 -x c++ -S -emit-llvm -o - < %s | FileCheck %s --check-prefix=PLAIN
4 // RUN: %clang_cc1 -triple x86_64 -x c++  -S -emit-llvm -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUE
5 
6 static int glob;
7 static int foo() {
8   return 0;
9 }
10 
11 int (*bar())() {
12   return foo;
13 }
14 
15 int getGlob() {
16   return glob;
17 }
18 
19 // Function local static variable and anonymous namespace namespace variable.
20 namespace {
21 int anon_m;
22 int getM() {
23   return anon_m;
24 }
25 } // namespace
26 
27 int retAnonM() {
28   static int fGlob;
29   return getM() + fGlob;
30 }
31 
32 // Multiversioning symbols
33 __attribute__((target("default"))) static int mver() {
34   return 0;
35 }
36 
37 __attribute__((target("sse4.2"))) static int mver() {
38   return 1;
39 }
40 
41 int mver_call() {
42   return mver();
43 }
44 
45 // PLAIN: @_ZL4glob = internal global
46 // PLAIN: @_ZZ8retAnonMvE5fGlob = internal global
47 // PLAIN: @_ZN12_GLOBAL__N_16anon_mE = internal global
48 // PLAIN: define internal i32 @_ZL3foov()
49 // PLAIN: define internal i32 @_ZN12_GLOBAL__N_14getMEv
50 // PLAIN: define weak_odr i32 ()* @_ZL4mverv.resolver()
51 // PLAIN: define internal i32 @_ZL4mverv()
52 // PLAIN: define internal i32 @_ZL4mverv.sse4.2()
53 // PLAIN-NOT: "sample-profile-suffix-elision-policy"
54 // UNIQUE: @_ZL4glob = internal global
55 // UNIQUE: @_ZZ8retAnonMvE5fGlob = internal global
56 // UNIQUE: @_ZN12_GLOBAL__N_16anon_mE = internal global
57 // UNIQUE: define internal i32 @_ZL3foov.[[MODHASH:__uniq.[0-9]+]]() #[[#ATTR:]] {
58 // UNIQUE: define internal i32 @_ZN12_GLOBAL__N_14getMEv.[[MODHASH]]
59 // UNIQUE: define weak_odr i32 ()* @_ZL4mverv.[[MODHASH]].resolver()
60 // UNIQUE: define internal i32 @_ZL4mverv.[[MODHASH]]()
61 // UNIQUE: define internal i32 @_ZL4mverv.[[MODHASH]].sse4.2
62 // UNIQUE: attributes #[[#ATTR]] = { {{.*}}"sample-profile-suffix-elision-policy"{{.*}} }
63