diff --git a/lrparser/org.eclipse.cdt.core.lrparser/grammar/cpp/CPPGrammar.g b/lrparser/org.eclipse.cdt.core.lrparser/grammar/cpp/CPPGrammar.g index 3264a9fcfc4..d78bcb23616 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/grammar/cpp/CPPGrammar.g +++ b/lrparser/org.eclipse.cdt.core.lrparser/grammar/cpp/CPPGrammar.g @@ -1798,6 +1798,7 @@ exception_declaration exception_specification ::= 'throw' '(' type_id_list ')' | 'throw' '(' ')' + /. $Build consumePlaceHolder(); $EndBuild ./ exception_specification_opt diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java index 732858ec573..aa6d5387091 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/core/dom/lrparser/action/cpp/CPPBuildASTParserAction.java @@ -1675,8 +1675,14 @@ public class CPPBuildASTParserAction extends BuildASTParserAction { IASTName name = nodeFactory.newName(); ICPPASTFunctionDeclarator declarator = nodeFactory.newFunctionDeclarator(name); - for(Object typeId : astStack.closeScope()) { - declarator.addExceptionSpecificationTypeId((IASTTypeId) typeId); + List typeIds = astStack.closeScope(); + if(typeIds.size() == 1 && typeIds.get(0) == PLACE_HOLDER) { // fix for bug 86943 + declarator.setEmptyExceptionSpecification(); + } + else { + for(Object typeId : typeIds) { + declarator.addExceptionSpecificationTypeId((IASTTypeId) typeId); + } } for(Object token : astStack.closeScope()) { diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPExpressionParser.java index 65e046ec116..7514100c8e1 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPExpressionParser.java @@ -2270,6 +2270,13 @@ public CPPExpressionParser(String[] mapFrom) { // constructor consumeDeclarationSimple(false); break; } + // + // Rule 530: exception_specification ::= throw ( ) + // + case 530: { action.builder. + consumePlaceHolder(); break; + } + // // Rule 536: expression_parser_start ::= ERROR_TOKEN // diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java index e97f1711d64..c860ba331b4 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoCastExpressionParser.java @@ -2263,6 +2263,13 @@ public CPPNoCastExpressionParser(String[] mapFrom) { // constructor consumeDeclarationSimple(false); break; } + // + // Rule 529: exception_specification ::= throw ( ) + // + case 529: { action.builder. + consumePlaceHolder(); break; + } + // // Rule 535: no_cast_start ::= ERROR_TOKEN // diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoFunctionDeclaratorParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoFunctionDeclaratorParser.java index 417afe54624..ae1727875b7 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoFunctionDeclaratorParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPNoFunctionDeclaratorParser.java @@ -2263,6 +2263,13 @@ public CPPNoFunctionDeclaratorParser(String[] mapFrom) { // constructor consumeDeclarationSimple(false); break; } + // + // Rule 528: exception_specification ::= throw ( ) + // + case 528: { action.builder. + consumePlaceHolder(); break; + } + // // Rule 534: no_function_declarator_start ::= ERROR_TOKEN // diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPParser.java index 14271e6d16f..c1225a9b329 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPParser.java @@ -2269,6 +2269,13 @@ public CPPParser(String[] mapFrom) { // constructor case 528: { action.builder. consumeDeclarationSimple(false); break; } + + // + // Rule 530: exception_specification ::= throw ( ) + // + case 530: { action.builder. + consumePlaceHolder(); break; + } default: diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPSizeofExpressionParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPSizeofExpressionParser.java index 08b19ee7e05..b841a9ab889 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPSizeofExpressionParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPSizeofExpressionParser.java @@ -2256,6 +2256,13 @@ public CPPSizeofExpressionParser(String[] mapFrom) { // constructor consumeDeclarationSimple(false); break; } + // + // Rule 528: exception_specification ::= throw ( ) + // + case 528: { action.builder. + consumePlaceHolder(); break; + } + // // Rule 534: no_sizeof_type_name_start ::= ERROR_TOKEN // diff --git a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPTemplateTypeParameterParser.java b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPTemplateTypeParameterParser.java index 96b8688b055..b73993f2181 100644 --- a/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPTemplateTypeParameterParser.java +++ b/lrparser/org.eclipse.cdt.core.lrparser/src/org/eclipse/cdt/internal/core/dom/lrparser/cpp/CPPTemplateTypeParameterParser.java @@ -2270,6 +2270,13 @@ public CPPTemplateTypeParameterParser(String[] mapFrom) { // constructor consumeDeclarationSimple(false); break; } + // + // Rule 530: exception_specification ::= throw ( ) + // + case 530: { action.builder. + consumePlaceHolder(); break; + } + // // Rule 536: type_parameter_start ::= ERROR_TOKEN //