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