blob: 22e859d69c9661ae2bda79a77a5900a9a0d06948 [file] [log] [blame]
Anders Carlsson8d145152009-12-20 22:30:54 +00001// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
2#include <typeinfo>
Anders Carlsson4e713562009-12-11 16:37:06 +00003
4// CHECK: _ZTS1B = constant
5// CHECK: _ZTS1A = weak_odr constant
6// CHECK: _ZTI1A = weak_odr constant
7// CHECK: _ZTI1B = constant
Anders Carlsson8d145152009-12-20 22:30:54 +00008// CHECK: _ZTSP1C = internal constant
9// CHECK: _ZTIP1C = internal constant
10// CHECK: _ZTSPP1C = internal constant
11// CHECK: _ZTIPP1C = internal constant
Anders Carlsson4e713562009-12-11 16:37:06 +000012// A has no key function, so its RTTI data should be weak_odr.
13struct A { };
14
15// B has a key function defined in the translation unit, so the RTTI data should
16// be emitted in this translation unit and have external linkage.
17struct B : A {
18 virtual void f();
19};
20void B::f() { }
Anders Carlsson8d145152009-12-20 22:30:54 +000021
22// C is an incomplete class type, so any direct or indirect pointer types should have
23// internal linkage, as should the type info for C itself (FIXME).
24struct C;
25
26void f() {
27 (void)typeid(C*);
28 (void)typeid(C**);
29
30}
31