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 1a974893524..d0599875427 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 @@ -9133,7 +9133,6 @@ public class AST2TemplateTests extends AST2TestBase { // C::c; // problems on C, T and ::c // } public void testRegression_485388a() throws Exception { - CPPASTNameBase.sAllowRecursionBindings = true; // bug 486144 parseAndCheckBindings(getAboveComment(), CPP, true); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java index b5250fe9a0c..3a83e34d432 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java @@ -308,6 +308,13 @@ public class EvalID extends CPPDependentEvaluation { } if (parent instanceof ICPPASTFunctionDefinition) { ICPPASTFunctionDefinition fdef= (ICPPASTFunctionDefinition) parent; + // Resolution of the method name triggers name resolution inside the + // decl-specifier of the method definition. If we are currently + // resolving something inside the decl-specifier, this can lead to + // recursion. + if (ASTQueries.isAncestorOf(fdef.getDeclSpecifier(), expr)) { + return null; + } final IBinding methodBinding = fdef.getDeclarator().getName().resolvePreBinding(); if (methodBinding instanceof ICPPMethod && !((ICPPMethod) methodBinding).isStatic()) { IScope scope = CPPVisitor.getContainingScope(expr);