From 335151f5f36737bfb1b19e06533db7f2f35a042e Mon Sep 17 00:00:00 2001 From: Andrew Ferguson Date: Tue, 10 Apr 2007 10:45:45 +0000 Subject: [PATCH] 181735: fix case of failing function resolution --- .../cdt/core/parser/tests/ast2/AST2Tests.java | 21 ++++++++++++++++--- .../core/dom/parser/cpp/CPPSemantics.java | 2 +- 2 files changed, 19 insertions(+), 4 deletions(-) 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 4f069619f26..df8a28a4359 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 @@ -8,6 +8,7 @@ * Contributors: * IBM - Initial API and implementation * Markus Schorn (Wind River Systems) + * Andrew Ferguson (Symbian) *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.ast2; @@ -151,15 +152,18 @@ public class AST2Tests extends AST2BaseTest { assertNoProblemBindings( col ); } - protected IASTTranslationUnit parseAndCheckBindings( String code ) throws Exception - { - IASTTranslationUnit tu = parse( code, ParserLanguage.C ); + protected IASTTranslationUnit parseAndCheckBindings( String code, ParserLanguage lang ) throws Exception { + IASTTranslationUnit tu = parse( code, lang ); CNameCollector col = new CNameCollector(); tu.accept(col); assertNoProblemBindings( col ); return tu; } + protected IASTTranslationUnit parseAndCheckBindings( String code ) throws Exception { + return parseAndCheckBindings(code, ParserLanguage.C); + } + public void testBasicFunction() throws Exception { StringBuffer buff = new StringBuffer(); buff.append("int x;\n"); //$NON-NLS-1$ @@ -3623,4 +3627,15 @@ public class AST2Tests extends AST2BaseTest { assertFalse(lang.toString(), binding instanceof IProblemBinding); } } + + public void testBug181735() throws Exception { + String code= + "int (*f)(int);\n" + + "int g(int n) {return n;}\n" + + "int g(int n, int m) {return n;}\n" + + "void foo() { f=g; }"; + + for (int i = 0; i < LANGUAGES.length; i++) + parseAndCheckBindings(code, LANGUAGES[i]); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java index 6e3e41359a6..1e252f659b0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPSemantics.java @@ -2572,7 +2572,7 @@ public class CPPSemantics { return null; IASTIdExpression idExp = (IASTIdExpression) name.getParent(); - IASTNode node = idExp.getParent(); + IASTNode node = idExp; ASTNodeProperty prop = null; while( node != null ){ prop = node.getPropertyInParent();