]> git.sur5r.net Git - cc65/commitdiff
Fixed a bug: Function designators are converted to rvalues of type "pointer to
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 5 Oct 2009 17:49:45 +0000 (17:49 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 5 Oct 2009 17:49:45 +0000 (17:49 +0000)
function", so dereferencing a function is a legal operation. The result is
immediately converted back to "pointer to function" again. Note: Because of
performance considerations, cc65 does treat functions as "pointer to function"
internally, but nevertheless dereferencing a function must be possible.

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

src/cc65/expr.c

index ac7f72dc0c28d50bfdef45ec3b0c0801359c6336..9d8af55d548a10ef326cb0dcf621e41a84bac0f6 100644 (file)
@@ -1599,9 +1599,12 @@ void hie10 (ExprDesc* Expr)
                 ED_MakeRValExpr (Expr);
             }
             /* If the expression is already a pointer to function, the
-             * additional dereferencing operator must be ignored.
+             * additional dereferencing operator must be ignored. A function 
+             * itself is represented as "pointer to function", so any number
+             * of dereference operators is legal, since the result will 
+             * always be converted to "pointer to function".
              */
-            if (IsTypeFuncPtr (Expr->Type)) {
+            if (IsTypeFuncPtr (Expr->Type) || IsTypeFunc (Expr->Type)) {
                 /* Expression not storable */
                 ED_MakeRVal (Expr);
             } else {