summaryrefslogtreecommitdiffstats
path: root/clang/CodeGen/CodeGenTypes.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2008-02-05 02:39:50 +0000
committerDevang Patel <dpatel@apple.com>2008-02-05 02:39:50 +0000
commita703a67384585f1c99362ad56ef8f90b700c7a49 (patch)
tree11644c49815844ddbb9798aec993e9f85a03a384 /clang/CodeGen/CodeGenTypes.cpp
parent26a6dd087753612d05e17c132e78daf71fb7d45a (diff)
downloadbcm5719-llvm-a703a67384585f1c99362ad56ef8f90b700c7a49.tar.gz
bcm5719-llvm-a703a67384585f1c99362ad56ef8f90b700c7a49.zip
Cleanup InitListExpr code generation code.
Handle padding fields while initializing struct (fix PR 1962) llvm-svn: 46736
Diffstat (limited to 'clang/CodeGen/CodeGenTypes.cpp')
-rw-r--r--clang/CodeGen/CodeGenTypes.cpp12
1 files changed, 7 insertions, 5 deletions
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<unsigned, 8> &getPaddingFields() {
+ llvm::SmallSet<unsigned, 8> &getPaddingFields() {
return PaddingFields;
}
@@ -79,7 +79,7 @@ namespace {
llvm::SmallVector<const FieldDecl *, 8> FieldDecls;
std::vector<const llvm::Type*> LLVMFields;
llvm::SmallVector<uint64_t, 8> Offsets;
- llvm::SmallVector<unsigned, 8> PaddingFields;
+ llvm::SmallSet<unsigned, 8> 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;
}
OpenPOWER on IntegriCloud