1064ccbefSAnders Carlsson // RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -o %t
2caea35dcSAnders Carlsson // RUN: FileCheck --check-prefix=CHECK-TEST1 %s < %t
3caea35dcSAnders Carlsson // RUN: FileCheck --check-prefix=CHECK-TEST2 %s < %t
4caea35dcSAnders Carlsson 
5caea35dcSAnders Carlsson #include <typeinfo>
6caea35dcSAnders Carlsson 
7caea35dcSAnders Carlsson namespace Test1 {
8caea35dcSAnders Carlsson   // A is explicitly marked hidden, so all RTTI data should also be marked hidden.
9caea35dcSAnders Carlsson   // CHECK-TEST1: @_ZTSN5Test11AE = linkonce_odr hidden constant
10*57420b32SJohn McCall   // CHECK-TEST1: @_ZTIN5Test11AE = linkonce_odr hidden constant
1149f17537SAnders Carlsson   // CHECK-TEST1: @_ZTSPN5Test11AE = linkonce_odr hidden constant
12*57420b32SJohn McCall   // CHECK-TEST1: @_ZTIPN5Test11AE = linkonce_odr hidden constant
13caea35dcSAnders Carlsson   struct __attribute__((visibility("hidden"))) A { };
14caea35dcSAnders Carlsson 
f()15caea35dcSAnders Carlsson   void f() {
16caea35dcSAnders Carlsson     (void)typeid(A);
17caea35dcSAnders Carlsson     (void)typeid(A *);
18caea35dcSAnders Carlsson   }
19caea35dcSAnders Carlsson }
20caea35dcSAnders Carlsson 
21caea35dcSAnders Carlsson namespace Test2 {
22caea35dcSAnders Carlsson   // A is weak, so its linkage should be linkoce_odr, but not marked hidden.
23caea35dcSAnders Carlsson   // CHECK-TEST2: @_ZTSN5Test21AE = linkonce_odr constant
24*57420b32SJohn McCall   // CHECK-TEST2: @_ZTIN5Test21AE = linkonce_odr constant
25caea35dcSAnders Carlsson   struct A { };
f()26caea35dcSAnders Carlsson   void f() {
27caea35dcSAnders Carlsson     (void)typeid(A);
28caea35dcSAnders Carlsson   }
29caea35dcSAnders Carlsson }
30