diff options
| author | Fariborz Jahanian <fjahanian@apple.com> | 2011-04-27 17:14:21 +0000 |
|---|---|---|
| committer | Fariborz Jahanian <fjahanian@apple.com> | 2011-04-27 17:14:21 +0000 |
| commit | 595ec5d43c099ea16937c811e4eceab4be8e4d9a (patch) | |
| tree | bf462c3be14335c5bd6c4b4fc987f19590ac1b7d /clang/lib | |
| parent | 5fc8c9eafb06e716130d38cf6212f4b438d4c280 (diff) | |
| download | bcm5719-llvm-595ec5d43c099ea16937c811e4eceab4be8e4d9a.tar.gz bcm5719-llvm-595ec5d43c099ea16937c811e4eceab4be8e4d9a.zip | |
Some refactoring of my ms_struct patch.
// rdar://8823265 related.
llvm-svn: 130311
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/ASTContext.cpp | 7 | ||||
| -rw-r--r-- | clang/lib/AST/RecordLayoutBuilder.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/CodeGen/CGRecordLayoutBuilder.cpp | 9 |
3 files changed, 10 insertions, 10 deletions
diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index e49bde3487e..c571c559bc6 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -536,6 +536,13 @@ void ASTContext::setInstantiatedFromUnnamedFieldDecl(FieldDecl *Inst, InstantiatedFromUnnamedFieldDecl[Inst] = Tmpl; } +bool ASTContext::ZeroBitfieldFollowsNonBitfield(const FieldDecl *FD, + const FieldDecl *LastFD) const { + return (FD->isBitField() && LastFD && !LastFD->isBitField() && + FD->getBitWidth()-> EvaluateAsInt(*this).getZExtValue() == 0); + +} + ASTContext::overridden_cxx_method_iterator ASTContext::overridden_methods_begin(const CXXMethodDecl *Method) const { llvm::DenseMap<const CXXMethodDecl *, CXXMethodVector>::const_iterator Pos diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp index c4a156fbccf..407655770df 100644 --- a/clang/lib/AST/RecordLayoutBuilder.cpp +++ b/clang/lib/AST/RecordLayoutBuilder.cpp @@ -1261,10 +1261,8 @@ void RecordLayoutBuilder::LayoutFields(const RecordDecl *D) { // Zero-length bitfields following non-bitfield members are // ignored: const FieldDecl *FD = (*Field); - if (FD->isBitField() && LastFD && !LastFD->isBitField() && - FD->getBitWidth()->EvaluateAsInt(Context).getZExtValue() == 0) { + if (Context.ZeroBitfieldFollowsNonBitfield(FD, LastFD)) continue; - } LastFD = FD; } LayoutField(*Field); diff --git a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp index d202b6e825e..3d9fd88613b 100644 --- a/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp +++ b/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp @@ -753,10 +753,7 @@ bool CGRecordLayoutBuilder::LayoutFields(const RecordDecl *D) { // Zero-length bitfields following non-bitfield members are // ignored: const FieldDecl *FD = (*Field); - // FIXME. Refactor into common code as it is used in several places. - if (FD->isBitField() && LastFD && !LastFD->isBitField() && - FD->getBitWidth()-> - EvaluateAsInt(Types.getContext()).getZExtValue() == 0) { + if (Types.getContext().ZeroBitfieldFollowsNonBitfield(FD, LastFD)) { --FieldNo; continue; } @@ -999,9 +996,7 @@ CGRecordLayout *CodeGenTypes::ComputeRecordLayout(const RecordDecl *D) { if (IsMsStruct) { // Zero-length bitfields following non-bitfield members are // ignored: - if (FD->isBitField() && LastFD && !LastFD->isBitField() && - FD->getBitWidth()-> - EvaluateAsInt(getContext()).getZExtValue() == 0) { + if (getContext().ZeroBitfieldFollowsNonBitfield(FD, LastFD)) { --i; continue; } |

