From 2d4d6b3e1cbd857563e748b5acd7b643e35ef448 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Fri, 15 Jul 2016 11:17:07 -0700 Subject: [PATCH] Bug 497931 - Added a failing test and a TODO in the problematic code Change-Id: I9562d0452a3ba08b940d948e040580e858abaa39 --- .../cdt/core/parser/tests/ast2/AST2TemplateTests.java | 8 ++++++++ .../internal/core/dom/parser/cpp/TemplateIdStrategy.java | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index b3c094d144f..15aa882b93a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -9463,6 +9463,14 @@ public class AST2TemplateTests extends AST2TestBase { parseAndCheckBindings(); } + // template + // constexpr int waldo(T v) { + // return v < I ? 1 : 1 + waldo(v / I); + // } + public void _testAmbiguityResolution_497931() throws Exception { + parseAndCheckBindings(); + } + // template struct S {}; // struct U {}; // diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java index 28eaeb970c5..2fdf91f996d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java @@ -118,8 +118,9 @@ final class TemplateIdStrategy implements ITemplateIdStrategy { // Optimization (bug 363609): if during the previous alternative, a name was parsed as a // template-id with multiple template arguments, it's not going to be parsed differently in // a subsequent alternative, so keep it as a template-id. - // Of course, this optimization is only sound if the previous alternative was parsed + // Of course, this optimization is only possible if the previous alternative was parsed // successfully (bug 445177). + // TODO: This optimization is invalid since it triggers bug 497931. if (previousAlternativeFailedToParse || nameLen == 0 || !hasMultipleArgs(names[--nameLen])) { fSimpleIDs.clear(bp+1, Integer.MAX_VALUE); fSimpleIDs.set(bp);