From 2710dbd206777743afc990bf74ed892bbaabbd29 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sat, 21 Mar 2015 01:38:43 -0400 Subject: [PATCH] Bug 462348 - Follow-up to handle nested classes properly Change-Id: Ia9103237a55ded5e0cacc1a31798da737fe0c8cc Signed-off-by: Nathan Ridge --- .../parser/tests/ast2/AST2TemplateTests.java | 16 +++++++++++++++- .../dom/parser/cpp/CPPASTAmbiguityResolver.java | 6 ++++-- 2 files changed, 19 insertions(+), 3 deletions(-) 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 09d327becd9..a5208a0d990 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 @@ -8771,7 +8771,21 @@ public class AST2TemplateTests extends AST2TestBase { // // using type = TypeTemplate>; // }; - public void testAmbiguityResolutionOrder_462348() throws Exception { + public void testAmbiguityResolutionOrder_462348a() throws Exception { + parseAndCheckBindings(); + } + + // template struct TypeTemplate {}; + // template struct Size_tTemplate {}; + // + // template struct Test { + // static constexpr int packSize() { return sizeof...(ParameterPack); } + // + // struct nested { + // using type = TypeTemplate>; + // }; + // }; + public void testAmbiguityResolutionOrder_462348b() throws Exception { parseAndCheckBindings(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguityResolver.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguityResolver.java index de6041762a2..85433c9bde6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguityResolver.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTAmbiguityResolver.java @@ -14,6 +14,7 @@ package org.eclipse.cdt.internal.core.dom.parser.cpp; import java.util.ArrayDeque; import java.util.Deque; import java.util.HashSet; +import java.util.Iterator; import org.eclipse.cdt.core.dom.ast.ASTNodeProperty; import org.eclipse.cdt.core.dom.ast.ASTVisitor; @@ -223,8 +224,9 @@ final class CPPASTAmbiguityResolver extends ASTVisitor { * If 'node' has been deferred for later processing, process it now. */ public void resolvePendingAmbiguities(IASTNode node) { - if (!fDeferredNodes.isEmpty()) { - Deque deferred = fDeferredNodes.getLast(); + Iterator> iterator = fDeferredNodes.descendingIterator(); + while (iterator.hasNext()) { + Deque deferred = iterator.next(); for (IASTNode deferredNode : deferred) { if (deferredNode == node) { int deferFunctions = fDeferFunctions;