aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Sema/SemaDeclCXX.cpp13
1 files changed, 6 insertions, 7 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp
index 178853e5cc..e2a8bb4347 100644
--- a/lib/Sema/SemaDeclCXX.cpp
+++ b/lib/Sema/SemaDeclCXX.cpp
@@ -546,13 +546,14 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
Decl *Member;
if (isInstField) {
- FieldDecl *FD =
- HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth);
- // Refresh our notion of bitwidth.
- BitWidth = FD->getBitWidth();
- Member = FD;
+ Member = HandleField(S, cast<CXXRecordDecl>(CurContext), Loc, D, BitWidth);
+ assert(Member && "HandleField never returns null");
} else {
Member = static_cast<Decl*>(ActOnDeclarator(S, D, LastInGroup));
+ if (!Member) {
+ if (BitWidth) DeleteExpr(BitWidth);
+ return LastInGroup;
+ }
// Non-instance-fields can't have a bitfield.
if (BitWidth) {
@@ -580,8 +581,6 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
}
}
- if (!Member) return LastInGroup;
-
assert((Name || isInstField) && "No identifier for non-field ?");
// set/getAccess is not part of Decl's interface to avoid bloating it with C++