Clang Project

clang_source_code/test/CodeGenOpenCL/visibility.cl
1// RUN: %clang_cc1 -std=cl2.0 -fapply-global-visibility-to-externs -fvisibility default -triple amdgcn-unknown-unknown -S -emit-llvm -o - %s | FileCheck --check-prefix=FVIS-DEFAULT %s
2// RUN: %clang_cc1 -std=cl2.0 -fapply-global-visibility-to-externs -fvisibility protected -triple amdgcn-unknown-unknown -S -emit-llvm -o - %s | FileCheck --check-prefix=FVIS-PROTECTED %s
3// RUN: %clang_cc1 -std=cl2.0 -fapply-global-visibility-to-externs -fvisibility hidden -triple amdgcn-unknown-unknown -S -emit-llvm -o - %s | FileCheck --check-prefix=FVIS-HIDDEN %s
4
5// REQUIRES: amdgpu-registered-target
6
7// FVIS-DEFAULT:  @glob = local_unnamed_addr
8// FVIS-PROTECTED: @glob = protected local_unnamed_addr
9// FVIS-HIDDEN: @glob = hidden local_unnamed_addr
10int glob = 0;
11// FVIS-DEFAULT:  @glob_hidden = hidden local_unnamed_addr
12// FVIS-PROTECTED: @glob_hidden = hidden local_unnamed_addr
13// FVIS-HIDDEN: @glob_hidden = hidden local_unnamed_addr
14__attribute__((visibility("hidden"))) int glob_hidden = 0;
15// FVIS-DEFAULT:  @glob_protected = protected local_unnamed_addr
16// FVIS-PROTECTED: @glob_protected = protected local_unnamed_addr
17// FVIS-HIDDEN: @glob_protected = protected local_unnamed_addr
18__attribute__((visibility("protected"))) int glob_protected = 0;
19// FVIS-DEFAULT:  @glob_default = local_unnamed_addr
20// FVIS-PROTECTED: @glob_default = local_unnamed_addr
21// FVIS-HIDDEN: @glob_default = local_unnamed_addr
22__attribute__((visibility("default"))) int glob_default = 0;
23
24// FVIS-DEFAULT:  @ext = external local_unnamed_addr
25// FVIS-PROTECTED: @ext = external protected local_unnamed_addr
26// FVIS-HIDDEN: @ext = external hidden local_unnamed_addr
27extern int ext;
28// FVIS-DEFAULT:  @ext_hidden = external hidden local_unnamed_addr
29// FVIS-PROTECTED: @ext_hidden = external hidden local_unnamed_addr
30// FVIS-HIDDEN: @ext_hidden = external hidden local_unnamed_addr
31__attribute__((visibility("hidden"))) extern int ext_hidden;
32// FVIS-DEFAULT:  @ext_protected = external protected local_unnamed_addr
33// FVIS-PROTECTED: @ext_protected = external protected local_unnamed_addr
34// FVIS-HIDDEN: @ext_protected = external protected local_unnamed_addr
35__attribute__((visibility("protected"))) extern int ext_protected;
36// FVIS-DEFAULT:  @ext_default = external local_unnamed_addr
37// FVIS-PROTECTED: @ext_default = external local_unnamed_addr
38// FVIS-HIDDEN: @ext_default = external local_unnamed_addr
39__attribute__((visibility("default"))) extern int ext_default;
40
41// FVIS-DEFAULT: define amdgpu_kernel void @kern()
42// FVIS-PROTECTED: define protected amdgpu_kernel void @kern()
43// FVIS-HIDDEN: define protected amdgpu_kernel void @kern()
44kernel void kern() {}
45// FVIS-DEFAULT: define protected amdgpu_kernel void @kern_hidden()
46// FVIS-PROTECTED: define protected amdgpu_kernel void @kern_hidden()
47// FVIS-HIDDEN: define protected amdgpu_kernel void @kern_hidden()
48__attribute__((visibility("hidden"))) kernel void kern_hidden() {}
49// FVIS-DEFAULT: define protected amdgpu_kernel void @kern_protected()
50// FVIS-PROTECTED: define protected amdgpu_kernel void @kern_protected()
51// FVIS-HIDDEN: define protected amdgpu_kernel void @kern_protected()
52__attribute__((visibility("protected"))) kernel void kern_protected() {}
53// FVIS-DEFAULT: define amdgpu_kernel void @kern_default()
54// FVIS-PROTECTED: define amdgpu_kernel void @kern_default()
55// FVIS-HIDDEN: define amdgpu_kernel void @kern_default()
56__attribute__((visibility("default"))) kernel void kern_default() {}
57
58// FVIS-DEFAULT: define void @func()
59// FVIS-PROTECTED: define protected void @func()
60// FVIS-HIDDEN: define hidden void @func()
61void func() {}
62// FVIS-DEFAULT: define hidden void @func_hidden()
63// FVIS-PROTECTED: define hidden void @func_hidden()
64// FVIS-HIDDEN: define hidden void @func_hidden()
65__attribute__((visibility("hidden"))) void func_hidden() {}
66// FVIS-DEFAULT: define protected void @func_protected()
67// FVIS-PROTECTED: define protected void @func_protected()
68// FVIS-HIDDEN: define protected void @func_protected()
69__attribute__((visibility("protected"))) void func_protected() {}
70// FVIS-DEFAULT: define void @func_default()
71// FVIS-PROTECTED: define void @func_default()
72// FVIS-HIDDEN: define void @func_default()
73__attribute__((visibility("default"))) void func_default() {}
74
75void use() {
76    glob = ext + ext_hidden + ext_protected + ext_default;
77}
78