blob: 2875e19ae3110602c6b1f684f7c82d612fd7010e [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
Anders Carlsson625c1ae2009-12-21 00:41:42 +00009// CHECK: _ZTS1C = internal constant
10// CHECK: _ZTI1C = internal constant
Anders Carlsson8d145152009-12-20 22:30:54 +000011// CHECK: _ZTIP1C = internal constant
12// CHECK: _ZTSPP1C = internal constant
13// CHECK: _ZTIPP1C = internal constant
Anders Carlsson17fa6f92009-12-20 23:37:55 +000014// CHECK: _ZTSM1Ci = internal constant
15// CHECK: _ZTIM1Ci = internal constant
16// CHECK: _ZTSPM1Ci = internal constant
17// CHECK: _ZTIPM1Ci = internal constant
18// CHECK: _ZTSM1CS_ = internal constant
19// CHECK: _ZTIM1CS_ = internal constant
20// CHECK: _ZTSM1CPS_ = internal constant
21// CHECK: _ZTIM1CPS_ = internal constant
22// CHECK: _ZTSM1A1C = internal constant
23// CHECK: _ZTIM1A1C = internal constant
24// CHECK: _ZTSM1AP1C = internal constant
25// CHECK: _ZTIM1AP1C = internal constant
26
Anders Carlsson4e713562009-12-11 16:37:06 +000027// A has no key function, so its RTTI data should be weak_odr.
28struct A { };
29
30// B has a key function defined in the translation unit, so the RTTI data should
31// be emitted in this translation unit and have external linkage.
32struct B : A {
33 virtual void f();
34};
35void B::f() { }
Anders Carlsson8d145152009-12-20 22:30:54 +000036
37// C is an incomplete class type, so any direct or indirect pointer types should have
38// internal linkage, as should the type info for C itself (FIXME).
39struct C;
40
41void f() {
42 (void)typeid(C*);
43 (void)typeid(C**);
Anders Carlsson17fa6f92009-12-20 23:37:55 +000044 (void)typeid(int C::*);
45 (void)typeid(int C::**);
46 (void)typeid(C C::*);
47 (void)typeid(C *C::*);
48 (void)typeid(C A::*);
49 (void)typeid(C* A::*);
Anders Carlsson8d145152009-12-20 22:30:54 +000050
51}
52