1806f9a3d08c08acd79fe92a335ae24cbc271e626Anders Carlsson// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -o %t 2806f9a3d08c08acd79fe92a335ae24cbc271e626Anders Carlsson// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -fhidden-weak-vtables -emit-llvm -o %t.hidden 33361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson// RUN: FileCheck --check-prefix=CHECK-TEST1 %s < %t 43361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson// RUN: FileCheck --check-prefix=CHECK-TEST2 %s < %t 53361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson// RUN: FileCheck --check-prefix=CHECK-TEST2-HIDDEN %s < %t.hidden 63361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson 73361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson#include <typeinfo> 83361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson 93361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlssonnamespace Test1 { 103361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // A is explicitly marked hidden, so all RTTI data should also be marked hidden. 113361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // CHECK-TEST1: @_ZTSN5Test11AE = linkonce_odr hidden constant 123361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // CHECK-TEST1: @_ZTIN5Test11AE = linkonce_odr hidden unnamed_addr constant 13907c828b080332854826a87451e838930f4be788Anders Carlsson // CHECK-TEST1: @_ZTSPN5Test11AE = linkonce_odr hidden constant 143361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // CHECK-TEST1: @_ZTIPN5Test11AE = linkonce_odr hidden unnamed_addr constant 153361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson struct __attribute__((visibility("hidden"))) A { }; 163361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson 173361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson void f() { 183361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson (void)typeid(A); 193361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson (void)typeid(A *); 203361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson } 213361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson} 223361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson 233361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlssonnamespace Test2 { 243361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // A is weak, so its linkage should be linkoce_odr, but not marked hidden. 253361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // CHECK-TEST2: @_ZTSN5Test21AE = linkonce_odr constant 263361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // CHECK-TEST2: @_ZTIN5Test21AE = linkonce_odr unnamed_addr constant 273361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson struct A { }; 283361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson 293361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // With -fhidden-weak-vtables, the typeinfo for A is marked hidden, but not its name. 303361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // CHECK-TEST2-HIDDEN: _ZTSN5Test21AE = linkonce_odr constant 313361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson // CHECK-TEST2-HIDDEN: @_ZTIN5Test21AE = linkonce_odr hidden unnamed_addr constant 323361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson void f() { 333361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson (void)typeid(A); 343361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson } 353361cff6021195dc29aa9082ff8a0e5628de5f31Anders Carlsson} 36