From 480af1ddb10a8b07466809f6ffb175180011a15c Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Tue, 26 Feb 2019 13:24:28 +0100 Subject: [PATCH] Bug 544818: Unparenthesized conditional expressions in trailing return type causes parse error Change-Id: I55131a2f1b6c6eec674f4f298b320d31a78d2829 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=544818 Signed-off-by: Felix Morgner --- .../cdt/core/parser/tests/ast2/ASTCPPSpecDefectTests.java | 7 +++++++ .../internal/core/dom/parser/cpp/GNUCPPSourceParser.java | 2 ++ 2 files changed, 9 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ASTCPPSpecDefectTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ASTCPPSpecDefectTests.java index fbaae3ff4d5..6a4f3723775 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ASTCPPSpecDefectTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/ASTCPPSpecDefectTests.java @@ -76,4 +76,11 @@ public class ASTCPPSpecDefectTests extends AST2TestBase { parseAndCheckBindings(); } + // auto f(int x, int y) -> decltype(x < y ? x : y) { + // return x < y ? x : y; + // } + public void testUnparenthesizedConditionalExpressionInTrailingReturnType_544818() 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 b58abf0c406..cf8815ba4fd 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 @@ -621,6 +621,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { } } return AMBIGUOUS_TEMPLATE_ID; + } catch (EndOfFileException ignored) { + return NO_TEMPLATE_ID; } finally { backup(mark); }