Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Ridge2017-10-19 01:27:15 +0000
committerNathan Ridge2017-10-25 17:14:31 +0000
commite96d2f92c88742e5cb2c670accbb441429f0dc46 (patch)
treeb99cda50f8403c22383c3bd2ad28e239ea5d73c3
parentc96d126b86382356caec9b8ee961e37b84313f6b (diff)
downloadorg.eclipse.cdt-e96d2f92c88742e5cb2c670accbb441429f0dc46.tar.gz
org.eclipse.cdt-e96d2f92c88742e5cb2c670accbb441429f0dc46.tar.xz
org.eclipse.cdt-e96d2f92c88742e5cb2c670accbb441429f0dc46.zip
Bug 526134 - Recover from failure to parse a base-clause in a class-specifier
-rw-r--r--core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java6
-rw-r--r--core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java9
2 files changed, 14 insertions, 1 deletions
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
index 5813e8f400a..7edbc1e87a6 100644
--- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
+++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java
@@ -12410,4 +12410,10 @@ public class AST2CPPTests extends AST2CPPTestBase {
BindingAssertionHelper helper = getAssertionHelper();
helper.assertVariableValue("waldo", 1);
}
+
+ // struct A {};
+ // struct A* b = (1 == 1) ? new struct A : new struct A;
+ public void test_ElabTypeSpecInNewExprInConditional_526134() throws Exception {
+ parseAndCheckBindings();
+ }
}
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
index d4e6f8a9a1b..a2b01fec885 100644
--- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
+++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java
@@ -4768,7 +4768,14 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser {
// base clause
if (LT(1) == IToken.tCOLON) {
- baseClause(astClassSpecifier);
+ try {
+ baseClause(astClassSpecifier);
+ } catch (BacktrackException e) {
+ // Couldn't parse a base-clause.
+ // Backtrack and try an elaborated-type-specifier instead.
+ backup(mark);
+ throw e;
+ }
// content assist within the base-clause
if (LT(1) == IToken.tEOC) {
return astClassSpecifier;

Back to the top