From a703a67384585f1c99362ad56ef8f90b700c7a49 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 5 Feb 2008 02:39:50 +0000 Subject: Cleanup InitListExpr code generation code. Handle padding fields while initializing struct (fix PR 1962) llvm-svn: 46736 --- clang/CodeGen/CodeGenTypes.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'clang/CodeGen/CodeGenTypes.cpp') diff --git a/clang/CodeGen/CodeGenTypes.cpp b/clang/CodeGen/CodeGenTypes.cpp index f3510d45951..678733e6faa 100644 --- a/clang/CodeGen/CodeGenTypes.cpp +++ b/clang/CodeGen/CodeGenTypes.cpp @@ -66,7 +66,7 @@ namespace { /// placeBitField - Find a place for FD, which is a bit-field. void placeBitField(const FieldDecl *FD); - llvm::SmallVector &getPaddingFields() { + llvm::SmallSet &getPaddingFields() { return PaddingFields; } @@ -79,7 +79,7 @@ namespace { llvm::SmallVector FieldDecls; std::vector LLVMFields; llvm::SmallVector Offsets; - llvm::SmallVector PaddingFields; + llvm::SmallSet PaddingFields; }; } @@ -334,7 +334,8 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) { RO.layoutStructFields(RL); // Get llvm::StructType. - CGRecordLayout *RLI = new CGRecordLayout(RO.getLLVMType()); + CGRecordLayout *RLI = new CGRecordLayout(RO.getLLVMType(), + RO.getPaddingFields()); ResultType = TagDeclTypes[TD] = RLI->getLLVMType(); CGRecordLayouts[ResultType] = RLI; @@ -357,7 +358,8 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) { RO.layoutUnionFields(); // Get llvm::StructType. - CGRecordLayout *RLI = new CGRecordLayout(RO.getLLVMType()); + CGRecordLayout *RLI = new CGRecordLayout(RO.getLLVMType(), + RO.getPaddingFields()); ResultType = TagDeclTypes[TD] = RLI->getLLVMType(); CGRecordLayouts[ResultType] = RLI; } else { @@ -520,7 +522,7 @@ void RecordOrganizer::addLLVMField(const llvm::Type *Ty, bool isPaddingField) { Offsets.push_back(llvmSize); llvmSize += TySize; if (isPaddingField) - PaddingFields.push_back(llvmFieldNo); + PaddingFields.insert(llvmFieldNo); LLVMFields.push_back(Ty); ++llvmFieldNo; } -- cgit v1.2.3