summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGRTTI.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-12-17 05:06:03 +0000
committerAnders Carlsson <andersca@mac.com>2009-12-17 05:06:03 +0000
commite5a94105ebd261654a7d33c08cb714c36080a9bb (patch)
treeb52925cc54a4f37f515d81800006197ea47f8c8d /clang/lib/CodeGen/CGRTTI.cpp
parentff43ab88ff5b0bda2b845caa37918fb672f17868 (diff)
downloadbcm5719-llvm-e5a94105ebd261654a7d33c08cb714c36080a9bb.tar.gz
bcm5719-llvm-e5a94105ebd261654a7d33c08cb714c36080a9bb.zip
Move the Info vector into the RTTIBuilder struct. No functionality change.
llvm-svn: 91583
Diffstat (limited to 'clang/lib/CodeGen/CGRTTI.cpp')
-rw-r--r--clang/lib/CodeGen/CGRTTI.cpp37
1 files changed, 19 insertions, 18 deletions
diff --git a/clang/lib/CodeGen/CGRTTI.cpp b/clang/lib/CodeGen/CGRTTI.cpp
index 4b7814bdb0e..d8c718c7c60 100644
--- a/clang/lib/CodeGen/CGRTTI.cpp
+++ b/clang/lib/CodeGen/CGRTTI.cpp
@@ -25,6 +25,8 @@ class RTTIBuilder {
llvm::SmallSet<const CXXRecordDecl *, 16> SeenVBase;
llvm::SmallSet<const CXXRecordDecl *, 32> SeenBase;
+ std::vector<llvm::Constant *> Info;
+
// Type info flags.
enum {
/// TI_Const - Type has const qualifier.
@@ -212,8 +214,7 @@ public:
llvm::Constant *
Buildclass_type_info(const CXXRecordDecl *RD,
llvm::GlobalVariable::LinkageTypes Linkage) {
- std::vector<llvm::Constant *> info;
- assert(info.empty() && "Info vector must be empty!");
+ assert(Info.empty() && "Info vector must be empty!");
llvm::Constant *C;
@@ -241,15 +242,15 @@ public:
C = BuildVtableRef("_ZTVN10__cxxabiv120__si_class_type_infoE");
} else
C = BuildVtableRef("_ZTVN10__cxxabiv121__vmi_class_type_infoE");
- info.push_back(C);
- info.push_back(BuildName(CGM.getContext().getTagDeclType(RD), Hidden,
+ Info.push_back(C);
+ Info.push_back(BuildName(CGM.getContext().getTagDeclType(RD), Hidden,
Linkage));
// If we have no bases, there are no more fields.
if (RD->getNumBases()) {
if (!simple) {
- info.push_back(BuildFlags(CalculateFlags(RD)));
- info.push_back(BuildBaseCount(RD->getNumBases()));
+ Info.push_back(BuildFlags(CalculateFlags(RD)));
+ Info.push_back(BuildBaseCount(RD->getNumBases()));
}
const ASTRecordLayout &Layout = CGM.getContext().getASTRecordLayout(RD);
@@ -257,7 +258,7 @@ public:
e = RD->bases_end(); i != e; ++i) {
const CXXRecordDecl *Base =
cast<CXXRecordDecl>(i->getType()->getAs<RecordType>()->getDecl());
- info.push_back(CGM.GetAddrOfRTTI(Base));
+ Info.push_back(CGM.GetAddrOfRTTI(Base));
if (simple)
break;
int64_t offset;
@@ -272,11 +273,11 @@ public:
const llvm::Type *LongTy =
CGM.getTypes().ConvertType(CGM.getContext().LongTy);
C = llvm::ConstantInt::get(LongTy, offset);
- info.push_back(C);
+ Info.push_back(C);
}
}
- return finish(&info[0], info.size(), GV, Name, Hidden, Linkage);
+ return finish(&Info[0], Info.size(), GV, Name, Hidden, Linkage);
}
/// - BuildFlags - Build a __flags value for __pbase_type_info.
@@ -311,8 +312,7 @@ public:
}
llvm::Constant *BuildPointerType(QualType Ty) {
- std::vector<llvm::Constant *> info;
- assert(info.empty() && "Info vector must be empty!");
+ assert(Info.empty() && "Info vector must be empty!");
llvm::Constant *C;
@@ -341,8 +341,8 @@ public:
else
C = BuildVtableRef("_ZTVN10__cxxabiv119__pointer_type_infoE");
- info.push_back(C);
- info.push_back(BuildName(Ty, Hidden, Extern));
+ Info.push_back(C);
+ Info.push_back(BuildName(Ty, Hidden, Extern));
Qualifiers Q = PointeeTy.getQualifiers();
PointeeTy =
@@ -362,15 +362,16 @@ public:
if (PtrMemTy && PtrMemTy->getClass()->isIncompleteType())
Flags |= TI_ContainingClassIncomplete;
- info.push_back(BuildInt(Flags));
- info.push_back(BuildInt(0));
- info.push_back(BuildType(PointeeTy));
+ Info.push_back(BuildInt(Flags));
+ Info.push_back(BuildInt(0));
+ Info.push_back(RTTIBuilder(CGM).BuildType(PointeeTy));
if (PtrMemTy)
- info.push_back(BuildType(QualType(PtrMemTy->getClass(), 0)));
+ Info.push_back(RTTIBuilder(CGM).BuildType(
+ QualType(PtrMemTy->getClass(), 0)));
// We always generate these as hidden, only the name isn't hidden.
- return finish(&info[0], info.size(), GV, Name, /*Hidden=*/true,
+ return finish(&Info[0], Info.size(), GV, Name, /*Hidden=*/true,
GetLinkageFromExternFlag(Extern));
}
OpenPOWER on IntegriCloud