From c4215f72c5e647cb0a27b45a93bdc910120eaf56 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Tue, 4 Aug 2009 15:38:40 +0000 Subject: [PATCH] Typedef recursion, bug 285457. --- .../eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java | 6 ++++++ .../internal/core/dom/parser/cpp/semantics/CPPVisitor.java | 6 ++++-- 2 files changed, 10 insertions(+), 2 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 613c3be658d..079df976f6a 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 @@ -7330,4 +7330,10 @@ public class AST2CPPTests extends AST2BaseTest { assertEquals(IBasicType.t_int, ((ICPPBasicType) t3).getType()); assertEquals(ICPPBasicType.IS_LONG, ((ICPPBasicType) t3).getQualifierBits()); } + + // typedef enum enum_name enum_name; + public void testTypedefRecursion_285457() throws Exception { + BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), true); + ba.assertProblem("enum_name", 9); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index cbe265a0044..b4b9415eb78 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -366,9 +366,11 @@ public class CPPVisitor extends ASTQueries { // 7.1.5.3-2 ... If name lookup does not find a declaration for the name, the elaborated-type-specifier is ill-formed // unless it is of the simple form class-key identifier - if (mustBeSimple && elabType.getName() instanceof ICPPASTQualifiedName) + if (mustBeSimple && + (elabType.getName() instanceof ICPPASTQualifiedName || elabType.getKind() == IASTElaboratedTypeSpecifier.k_enum)) { return binding; - + } + try { boolean template = false; ICPPScope scope = (ICPPScope) getContainingScope(name);