diff --git a/clang/include/clang/Parse/DeclSpec.h b/clang/include/clang/Parse/DeclSpec.h index 118d6a246e8e..4c1bbdf6d76b 100644 --- a/clang/include/clang/Parse/DeclSpec.h +++ b/clang/include/clang/Parse/DeclSpec.h @@ -248,6 +248,12 @@ public: /// unsigned getParsedSpecifiers() const; + /// isEmpty - Return true if this declaration specifier is completely empty: + /// no tokens were parsed in the production of it. + bool isEmpty() const { + return getParsedSpecifiers() == DeclSpec::PQ_None; + } + void SetRangeStart(SourceLocation Loc) { Range.setBegin(Loc); } void SetRangeEnd(SourceLocation Loc) { Range.setEnd(Loc); } diff --git a/clang/lib/Parse/DeclSpec.cpp b/clang/lib/Parse/DeclSpec.cpp index 28c81496390b..a498182df71a 100644 --- a/clang/lib/Parse/DeclSpec.cpp +++ b/clang/lib/Parse/DeclSpec.cpp @@ -65,6 +65,7 @@ DeclaratorChunk DeclaratorChunk::getFunction(bool hasProto, bool isVariadic, } /// getParsedSpecifiers - Return a bitmask of which flavors of specifiers this +/// declaration specifier includes. /// unsigned DeclSpec::getParsedSpecifiers() const { unsigned Res = 0; diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index 4398ef8ea9c9..30db5e67590c 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -549,7 +549,7 @@ Parser::DeclTy *Parser::ParseFunctionDefinition(Declarator &D) { // If this is C90 and the declspecs were completely missing, fudge in an // implicit int. We do this here because this is the only place where // declaration-specifiers are completely optional in the grammar. - if (getLang().ImplicitInt && D.getDeclSpec().getParsedSpecifiers() == 0) { + if (getLang().ImplicitInt && D.getDeclSpec().isEmpty()) { const char *PrevSpec; D.getMutableDeclSpec().SetTypeSpecType(DeclSpec::TST_int, D.getIdentifierLoc(),