From e62982abd7e6fa21d18957e0279aa0273cf27fb0 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Mon, 16 May 2005 21:39:46 +0000 Subject: [PATCH] fix bug 95461 (array to pointer conversion) --- .../cdt/core/parser/tests/ast2/AST2CPPTests.java | 16 ++++++++++++++++ .../core/dom/parser/cpp/CPPSemantics.java | 5 +++++ 2 files changed, 21 insertions(+) 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 b09c4d9036f..a2b57cbe19e 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 @@ -4068,4 +4068,20 @@ public class AST2CPPTests extends AST2BaseTest { assertEquals( ctors.length, 2 ); assertSame( ctor, ctors[0] ); } + + public void testBug95461() throws Exception { + StringBuffer buffer = new StringBuffer(); + buffer.append("void f( char * ); \n"); //$NON-NLS-1$ + buffer.append("void g(){ \n"); //$NON-NLS-1$ + buffer.append(" char x[100]; \n"); //$NON-NLS-1$ + buffer.append(" f( x ); \n"); //$NON-NLS-1$ + buffer.append("} \n"); //$NON-NLS-1$ + + IASTTranslationUnit tu = parse( buffer.toString(), ParserLanguage.CPP ); + CPPNameCollector col = new CPPNameCollector(); + tu.accept(col); + + ICPPFunction f1 = (ICPPFunction) col.getName(0).resolveBinding(); + assertSame( f1, col.getName(4).resolveBinding() ); + } } 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 3fd1b25e320..78b2fa4f386 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 @@ -45,6 +45,7 @@ import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.IASTTypeId; import org.eclipse.cdt.core.dom.ast.IASTUnaryExpression; +import org.eclipse.cdt.core.dom.ast.IArrayType; import org.eclipse.cdt.core.dom.ast.IBasicType; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IEnumeration; @@ -2525,6 +2526,10 @@ public class CPPSemantics { { source = new CPPPointerType( source ); } + //4.2 Array-To-Pointer conversion + else if( target instanceof IPointerType && source instanceof IArrayType ){ + source = new CPPPointerType( ((IArrayType)source).getType() ); + } cost.source = source; cost.target = target;