Fixed a bug: Function designators are converted to rvalues of type "pointer to

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
This commit is contained in:
uz 2009-10-05 17:49:45 +00:00
parent 43c89d5fd0
commit c69e2d9f0f

View 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 {