blob: 5edd27b8b279316aebb7c7bf1b0adf2e33cde57d [file] [log] [blame]
Anders Carlsson39de84d2010-02-07 01:44:36 +00001// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
2
3#define HIDDEN __attribute__((visibility("hidden")))
4#define PROTECTED __attribute__((visibility("protected")))
5#define DEFAULT __attribute__((visibility("default")))
6
7// CHECK: @_ZN5Test425VariableInHiddenNamespaceE = hidden global i32 10
8
9namespace Test1 {
10 // CHECK: define hidden void @_ZN5Test11fEv
11 void HIDDEN f() { }
12
13}
14
15namespace Test2 {
16 struct HIDDEN A {
17 void f();
18 };
19
20 // A::f is a member function of a hidden class.
21 // CHECK: define hidden void @_ZN5Test21A1fEv
22 void A::f() { }
23}
24
25namespace Test3 {
26 struct HIDDEN A {
27 struct B {
28 void f();
29 };
30 };
31
32 // B is a nested class where its parent class is hidden.
33 // CHECK: define hidden void @_ZN5Test31A1B1fEv
34 void A::B::f() { }
35}
36
37namespace Test4 HIDDEN {
38 int VariableInHiddenNamespace = 10;
39
40 // Test4::g is in a hidden namespace.
41 // CHECK: define hidden void @_ZN5Test41gEv
42 void g() { }
43
44 struct DEFAULT A {
45 void f();
46 };
47
48 // A has default visibility.
49 // CHECK: define void @_ZN5Test41A1fEv
50 void A::f() { }
51}
52
53namespace Test5 {
54
55 namespace NS HIDDEN {
56 // f is in NS which is hidden.
57 // CHECK: define hidden void @_ZN5Test52NS1fEv()
58 void f() { }
59 }
60
61 namespace NS {
62 // g is in NS, but this NS decl is not hidden.
63 // CHECK: define void @_ZN5Test52NS1gEv
64 void g() { }
65 }
66}