]> git.sur5r.net Git - cc65/commitdiff
Fixed an error: A function wasn't converted to a void pointer automatically by
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 10 Jul 2010 20:48:05 +0000 (20:48 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 10 Jul 2010 20:48:05 +0000 (20:48 +0000)
the compiler.

git-svn-id: svn://svn.cc65.org/cc65/trunk@4741 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/typeconv.c

index e9f72ee11347737e9141c4d5f485fa64027eb54d..d26ba32b2e27079733bc273451a4be4dbf5840e3 100644 (file)
@@ -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");
        }