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