From 70431722fe650b3d335564aaeccd1ae4cb967a96 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Thu, 30 Oct 2008 09:30:54 +0000 Subject: [PATCH] Call Hierarchy for reference in initializer of variable with function-type, related to bug 252488. --- .../cdt/core/parser/tests/ast2/AST2Tests.java | 15 +++++++++++++++ .../core/pdom/indexer/IndexerASTVisitor.java | 2 ++ 2 files changed, 17 insertions(+) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java index cef0bece206..7779472e4e1 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2Tests.java @@ -5475,4 +5475,19 @@ public class AST2Tests extends AST2BaseTest { assertNotNull(numericalValue); assertEquals(i, numericalValue.intValue()); } + + // void myfunc(char *arg){} + // void (*funcVar2)(char *) = myfunc; + // void caller() { + // myfunc(""); + // } + public void testReferencesInInitializer_Bug251514() throws Exception { + final String code = getAboveComment(); + for (ParserLanguage lang : ParserLanguage.values()) { + IASTTranslationUnit tu= parseAndCheckBindings(code, lang, true); + IASTFunctionDefinition fdef= getDeclaration(tu, 0); + IASTName name= fdef.getDeclarator().getName(); + assertEquals(2, tu.getReferences(name.resolveBinding()).length); + } + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/IndexerASTVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/IndexerASTVisitor.java index 8bd7a24730e..2a6a099519f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/IndexerASTVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/IndexerASTVisitor.java @@ -28,6 +28,7 @@ import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.c.ICASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; +import org.eclipse.cdt.internal.core.dom.parser.c.CVisitor; abstract public class IndexerASTVisitor extends ASTVisitor { private static class Definition { @@ -172,6 +173,7 @@ abstract public class IndexerASTVisitor extends ASTVisitor { if (!(fDefinitionNode instanceof IASTFunctionDefinition)) { IASTNode cand= initializer.getParent(); if (cand instanceof IASTDeclarator) { + cand= CVisitor.findInnermostDeclarator((IASTDeclarator) cand); push(((IASTDeclarator) cand).getName(), initializer); } }