brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.2 KiB · 0344803 Raw
111 lines · cpp
1// RUN: %clang_cc1 %s -std=c++11 -triple=x86_64-apple-darwin10 -fvisibility=hidden -ftype-visibility=default -emit-llvm -o %t2// RUN: FileCheck %s < %t3// RUN: FileCheck -check-prefix=CHECK-GLOBAL %s < %t4 5// The two visibility options above are how we translate6// -fvisibility-ms-compat in the driver.7 8#define HIDDEN __attribute__((visibility("hidden")))9#define PROTECTED __attribute__((visibility("protected")))10#define DEFAULT __attribute__((visibility("default")))11 12namespace std {13  class type_info;14};15 16namespace test0 {17  struct A {18    static void foo();19    static void bar();20  };21 22  void A::foo() { bar(); }23  // CHECK-LABEL: define hidden void @_ZN5test01A3fooEv()24  // CHECK: declare void @_ZN5test01A3barEv()25 26  const std::type_info &ti = typeid(A);27  // CHECK-GLOBAL: @_ZTIN5test01AE = linkonce_odr constant28  // CHECK-GLOBAL: @_ZTSN5test01AE = linkonce_odr constant29  // CHECK-GLOBAL: @_ZN5test02tiE = hidden constant30}31 32namespace test1 {33  struct HIDDEN A {34    static void foo();35    static void bar();36  };37 38  void A::foo() { bar(); }39  // CHECK-LABEL: define hidden void @_ZN5test11A3fooEv()40  // CHECK: declare hidden void @_ZN5test11A3barEv()41 42  const std::type_info &ti = typeid(A);43  // CHECK-GLOBAL: @_ZTIN5test11AE = linkonce_odr hidden constant44  // CHECK-GLOBAL: @_ZTSN5test11AE = linkonce_odr hidden constant45  // CHECK-GLOBAL: @_ZN5test12tiE = hidden constant46}47 48namespace test2 {49  struct DEFAULT A {50    static void foo();51    static void bar();52  };53 54  void A::foo() { bar(); }55  // CHECK-LABEL: define{{.*}} void @_ZN5test21A3fooEv()56  // CHECK: declare void @_ZN5test21A3barEv()57 58  const std::type_info &ti = typeid(A);59  // CHECK-GLOBAL: @_ZTIN5test21AE = linkonce_odr constant60  // CHECK-GLOBAL: @_ZTSN5test21AE = linkonce_odr constant61  // CHECK-GLOBAL: @_ZN5test22tiE = hidden constant62}63 64namespace test3 {65  struct A { int x; };66  template <class T> struct B {67    static void foo() { bar(); }68    static void bar();69  };70 71  template void B<A>::foo();72  // CHECK-LABEL: define weak_odr hidden void @_ZN5test31BINS_1AEE3fooEv()73  // CHECK: declare void @_ZN5test31BINS_1AEE3barEv()74 75  const std::type_info &ti = typeid(B<A>);76  // CHECK-GLOBAL: @_ZTIN5test31BINS_1AEEE = linkonce_odr constant77  // CHECK-GLOBAL: @_ZTSN5test31BINS_1AEEE = linkonce_odr constant78}79 80namespace test4 {81  struct A { int x; };82  template <class T> struct DEFAULT B {83    static void foo() { bar(); }84    static void bar();85  };86 87  template void B<A>::foo();88  // CHECK-LABEL: define weak_odr void @_ZN5test41BINS_1AEE3fooEv()89  // CHECK: declare void @_ZN5test41BINS_1AEE3barEv()90 91  const std::type_info &ti = typeid(B<A>);92  // CHECK-GLOBAL: @_ZTIN5test41BINS_1AEEE = linkonce_odr constant93  // CHECK-GLOBAL: @_ZTSN5test41BINS_1AEEE = linkonce_odr constant94}95 96namespace test5 {97  struct A { int x; };98  template <class T> struct HIDDEN B {99    static void foo() { bar(); }100    static void bar();101  };102 103  template void B<A>::foo();104  // CHECK-LABEL: define weak_odr hidden void @_ZN5test51BINS_1AEE3fooEv()105  // CHECK: declare hidden void @_ZN5test51BINS_1AEE3barEv()106 107  const std::type_info &ti = typeid(B<A>);108  // CHECK-GLOBAL: @_ZTIN5test51BINS_1AEEE = linkonce_odr hidden constant109  // CHECK-GLOBAL: @_ZTSN5test51BINS_1AEEE = linkonce_odr hidden constant110}111