rtti-linkage.cpp revision 17fa6f971c1912c77aa10bdac4b7991b5e1646e2
18d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson// RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
28d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson#include <typeinfo>
34e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson
44e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson// CHECK: _ZTS1B = constant
54e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson// CHECK: _ZTS1A = weak_odr constant
64e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson// CHECK: _ZTI1A = weak_odr constant
74e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson// CHECK: _ZTI1B = constant
88d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson// CHECK: _ZTSP1C = internal constant
98d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson// CHECK: _ZTIP1C = internal constant
108d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson// CHECK: _ZTSPP1C = internal constant
118d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson// CHECK: _ZTIPP1C = internal constant
1217fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTSM1Ci = internal constant
1317fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTIM1Ci = internal constant
1417fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTSPM1Ci = internal constant
1517fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTIPM1Ci = internal constant
1617fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTSM1CS_ = internal constant
1717fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTIM1CS_ = internal constant
1817fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTSM1CPS_ = internal constant
1917fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTIM1CPS_ = internal constant
2017fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTSM1A1C = internal constant
2117fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTIM1A1C = internal constant
2217fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTSM1AP1C = internal constant
2317fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson// CHECK: _ZTIM1AP1C = internal constant
2417fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson
254e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson// A has no key function, so its RTTI data should be weak_odr.
264e7135613a558020f003972b2a5ae5f8d5306508Anders Carlssonstruct A { };
274e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson
284e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson// B has a key function defined in the translation unit, so the RTTI data should
294e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson// be emitted in this translation unit and have external linkage.
304e7135613a558020f003972b2a5ae5f8d5306508Anders Carlssonstruct B : A {
314e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson  virtual void f();
324e7135613a558020f003972b2a5ae5f8d5306508Anders Carlsson};
334e7135613a558020f003972b2a5ae5f8d5306508Anders Carlssonvoid B::f() { }
348d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson
358d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson// C is an incomplete class type, so any direct or indirect pointer types should have
368d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson// internal linkage, as should the type info for C itself (FIXME).
378d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlssonstruct C;
388d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson
398d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlssonvoid f() {
408d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson  (void)typeid(C*);
418d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson  (void)typeid(C**);
4217fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson  (void)typeid(int C::*);
4317fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson  (void)typeid(int C::**);
4417fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson  (void)typeid(C C::*);
4517fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson  (void)typeid(C *C::*);
4617fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson  (void)typeid(C A::*);
4717fa6f971c1912c77aa10bdac4b7991b5e1646e2Anders Carlsson  (void)typeid(C* A::*);
488d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson
498d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson}
508d1451535524cb21a6f8347bad9fed371b9d9ecbAnders Carlsson
51