From a89231ece7d28887ad4e7782ea7d5e4b64ce6399 Mon Sep 17 00:00:00 2001 From: uz Date: Sat, 10 Jul 2010 20:48:05 +0000 Subject: [PATCH] Fixed an error: A function wasn't converted to a void pointer automatically by the compiler. git-svn-id: svn://svn.cc65.org/cc65/trunk@4741 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/cc65/typeconv.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/cc65/typeconv.c b/src/cc65/typeconv.c index e9f72ee11..d26ba32b2 100644 --- a/src/cc65/typeconv.c +++ b/src/cc65/typeconv.c @@ -186,6 +186,11 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) Error ("Illegal type"); } + /* If Expr is a function, convert it to pointer to function */ + if (IsTypeFunc(Expr->Type)) { + Expr->Type = PointerTo (Expr->Type); + } + /* If both types are equal, no conversion is needed */ if (TypeCmp (Expr->Type, NewType) >= TC_EQUAL) { /* We're already done */ @@ -229,7 +234,7 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) */ if (!IsTypeVoid (Indirect (NewType)) && !IsTypeVoid (Indirect (Expr->Type))) { /* Compare the types */ - switch (TypeCmp (NewType, Expr->Type)) { + switch (TypeCmp (NewType, Expr->Type)) { case TC_INCOMPATIBLE: Error ("Incompatible pointer types"); @@ -250,16 +255,6 @@ void TypeConversion (ExprDesc* Expr, Type* NewType) if (!ED_IsConstAbsInt (Expr) || Expr->IVal != 0) { Warning ("Converting integer to pointer without a cast"); } - } else if (IsTypeFuncPtr (NewType) && IsTypeFunc(Expr->Type)) { - /* Function -> Function pointer. First convert rhs to pointer */ - Expr->Type = PointerTo (Expr->Type); - - /* Assignment of function to function pointer is allowed, provided - * that both functions have the same parameter list. - */ - if (TypeCmp (NewType, Expr->Type) < TC_COMPATIBLE) { - Error ("Incompatible types"); - } } else { Error ("Incompatible types"); }