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