diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index 90631494a50b1fedf569ceb0308aa7a0b8bb0fea..9ab40ce6f7502b58bcc034286e736ae27705ed43 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -1603,9 +1603,16 @@ bool Parser::parseClassSpecifier(SpecifierListAST *&node) unsigned start_declaration = cursor(); DeclarationAST *declaration = 0; if (parseMemberSpecification(declaration)) { - *declaration_ptr = new (_pool) DeclarationListAST; - (*declaration_ptr)->value = declaration; - declaration_ptr = &(*declaration_ptr)->next; + if (declaration) { // paranoia check + *declaration_ptr = new (_pool) DeclarationListAST; + (*declaration_ptr)->value = declaration; + declaration_ptr = &(*declaration_ptr)->next; + } + + if (cursor() == start_declaration) { // more paranoia + rewind(start_declaration + 1); + skipUntilDeclaration(); + } } else { _translationUnit->error(start_declaration, "expected a declaration"); rewind(start_declaration + 1);