1806f9a3d08c08acd79fe92a335ae24cbc271e626Anders Carlsson// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -o %t
23361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson// RUN: FileCheck --check-prefix=CHECK-TEST1 %s < %t
33361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson// RUN: FileCheck --check-prefix=CHECK-TEST2 %s < %t
43361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson
53361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson#include <typeinfo>
63361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson
73361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlssonnamespace Test1 {
83361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  // A is explicitly marked hidden, so all RTTI data should also be marked hidden.
93361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  // CHECK-TEST1: @_ZTSN5Test11AE = linkonce_odr hidden constant
10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-TEST1: @_ZTIN5Test11AE = linkonce_odr hidden constant
11907c828b080332854826a87451e838930f4be788Anders Carlsson  // CHECK-TEST1: @_ZTSPN5Test11AE = linkonce_odr hidden constant
12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-TEST1: @_ZTIPN5Test11AE = linkonce_odr hidden constant
133361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  struct __attribute__((visibility("hidden"))) A { };
143361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson
153361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  void f() {
163361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson    (void)typeid(A);
173361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson    (void)typeid(A *);
183361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  }
193361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson}
203361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson
213361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlssonnamespace Test2 {
223361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  // A is weak, so its linkage should be linkoce_odr, but not marked hidden.
233361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  // CHECK-TEST2: @_ZTSN5Test21AE = linkonce_odr constant
24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  // CHECK-TEST2: @_ZTIN5Test21AE = linkonce_odr constant
253361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  struct A { };
263361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  void f() {
273361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson    (void)typeid(A);
283361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson  }
293361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson}
30