diff options
author | Chris Lattner <sabre@nondot.org> | 2008-02-05 06:55:31 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-02-05 06:55:31 +0000 |
commit | af31913e48c96fddb45a0fd33f25617546502cbb (patch) | |
tree | fec6fbce36a560ee4c3ed214985e2473eb18a26d /CodeGen/CodeGenTypes.cpp | |
parent | c4b23a530b04ee77b56772a70191d32119eadc3e (diff) |
Change the key of CGRecordLayouts from being an llvm type* to being a decl*. LLVM
Type*'s can change as types are refined, so we can't use them as a stable key in
the map. Decls don't change, so use them instead.
This patch was written by Anders, but he's too shy to commit it himself :)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46743 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CodeGen/CodeGenTypes.cpp')
-rw-r--r-- | CodeGen/CodeGenTypes.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/CodeGen/CodeGenTypes.cpp b/CodeGen/CodeGenTypes.cpp index 06ec4679bc..97fc61d4ac 100644 --- a/CodeGen/CodeGenTypes.cpp +++ b/CodeGen/CodeGenTypes.cpp @@ -84,7 +84,7 @@ CodeGenTypes::CodeGenTypes(ASTContext &Ctx, llvm::Module& M, } CodeGenTypes::~CodeGenTypes() { - for(llvm::DenseMap<const llvm::Type *, CGRecordLayout *>::iterator + for(llvm::DenseMap<const TagDecl *, CGRecordLayout *>::iterator I = CGRecordLayouts.begin(), E = CGRecordLayouts.end(); I != E; ++I) delete I->second; @@ -332,7 +332,7 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) { CGRecordLayout *RLI = new CGRecordLayout(RO.getLLVMType(), RO.getPaddingFields()); ResultType = TagDeclTypes[TD] = RLI->getLLVMType(); - CGRecordLayouts[ResultType] = RLI; + CGRecordLayouts[TD] = RLI; // Refine any OpaqueType associated with this RecordDecl. OpaqueTy->refineAbstractTypeTo(ResultType); @@ -356,7 +356,7 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) { CGRecordLayout *RLI = new CGRecordLayout(RO.getLLVMType(), RO.getPaddingFields()); ResultType = TagDeclTypes[TD] = RLI->getLLVMType(); - CGRecordLayouts[ResultType] = RLI; + CGRecordLayouts[TD] = RLI; } else { std::vector<const llvm::Type*> Fields; ResultType = TagDeclTypes[TD] = llvm::StructType::get(Fields); @@ -436,9 +436,9 @@ void CodeGenTypes::addBitFieldInfo(const FieldDecl *FD, unsigned Begin, /// getCGRecordLayout - Return record layout info for the given llvm::Type. const CGRecordLayout * -CodeGenTypes::getCGRecordLayout(const llvm::Type* Ty) const { - llvm::DenseMap<const llvm::Type*, CGRecordLayout *>::iterator I - = CGRecordLayouts.find(Ty); +CodeGenTypes::getCGRecordLayout(const TagDecl *TD) const { + llvm::DenseMap<const TagDecl*, CGRecordLayout *>::iterator I + = CGRecordLayouts.find(TD); assert (I != CGRecordLayouts.end() && "Unable to find record layout information for type"); return I->second; |