diff options
| author | Anders Carlsson <andersca@mac.com> | 2010-01-28 18:22:03 +0000 | 
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2010-01-28 18:22:03 +0000 | 
| commit | b1ef991097c1276fae00d19367da78d0b58ddf9a (patch) | |
| tree | 0196215beae554b45d04ce043d8868a4ad61857a /clang/lib | |
| parent | 0d61eebd819b4bd511f1a36370e9539d0a33d857 (diff) | |
| download | bcm5719-llvm-b1ef991097c1276fae00d19367da78d0b58ddf9a.tar.gz bcm5719-llvm-b1ef991097c1276fae00d19367da78d0b58ddf9a.zip | |
Fix an incorrect union layout assert. Fixes PR6164.
llvm-svn: 94754
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGRecordLayoutBuilder.cpp | 7 | 
1 files changed, 6 insertions, 1 deletions
| diff --git a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp index 9f90ec5ff6e..cc474033c11 100644 --- a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -162,6 +162,8 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) {    uint64_t Size = 0;    unsigned Align = 0; +  bool HasOnlyZeroSizedBitFields = true; +      unsigned FieldNo = 0;    for (RecordDecl::field_iterator Field = D->field_begin(),         FieldEnd = D->field_end(); Field != FieldEnd; ++Field, ++FieldNo) { @@ -181,6 +183,8 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) {      } else        Types.addFieldInfo(*Field, 0); +    HasOnlyZeroSizedBitFields = false; +          const llvm::Type *FieldTy =        Types.ConvertTypeForMemRecursive(Field->getType());      unsigned FieldAlign = Types.getTargetData().getABITypeAlignment(FieldTy); @@ -207,7 +211,8 @@ void CGRecordLayoutBuilder::LayoutUnion(const RecordDecl *D) {      }    }    if (!Align) { -    assert((D->field_begin() == D->field_end()) && "LayoutUnion - Align 0"); +    assert(HasOnlyZeroSizedBitFields && +           "0-align record did not have all zero-sized bit-fields!");      Align = 1;    } | 

