Use GetAddrOfRTTI when getting the RTTI pointer for a base class.

llvm-svn: 91127
This commit is contained in:
Anders Carlsson 2009-12-11 16:37:06 +00:00
parent 83c49b56fe
commit a0b98f083a
2 changed files with 17 additions and 4 deletions

View File

@ -257,10 +257,7 @@ public:
e = RD->bases_end(); i != e; ++i) {
const CXXRecordDecl *Base =
cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
if (Base->isPolymorphic())
info.push_back(CGM.GenerateRTTIRef(Base));
else
info.push_back(CGM.GenerateRTTI(Base));
info.push_back(CGM.GetAddrOfRTTI(Base));
if (simple)
break;
int64_t offset;

View File

@ -0,0 +1,16 @@
// RUN: clang-cc %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s
// CHECK: _ZTS1B = constant
// CHECK: _ZTS1A = weak_odr constant
// CHECK: _ZTI1A = weak_odr constant
// CHECK: _ZTI1B = constant
// A has no key function, so its RTTI data should be weak_odr.
struct A { };
// B has a key function defined in the translation unit, so the RTTI data should
// be emitted in this translation unit and have external linkage.
struct B : A {
virtual void f();
};
void B::f() { }