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:
parent
43c89d5fd0
commit
c69e2d9f0f
1 changed files with 5 additions and 2 deletions
|
@ -1599,9 +1599,12 @@ void hie10 (ExprDesc* Expr)
|
||||||
ED_MakeRValExpr (Expr);
|
ED_MakeRValExpr (Expr);
|
||||||
}
|
}
|
||||||
/* If the expression is already a pointer to function, the
|
/* 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 */
|
/* Expression not storable */
|
||||||
ED_MakeRVal (Expr);
|
ED_MakeRVal (Expr);
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Reference in a new issue