1
0
mirror of https://github.com/cc65/cc65.git synced 2024-06-09 06:29:38 +00:00

Fixed an error: If an expression is loaded into the primary, a function must

be converted to pointer-to-function and an array to pointer-to-member resp.


git-svn-id: svn://svn.cc65.org/cc65/trunk@3977 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2009-07-28 18:56:16 +00:00
parent dff0e86458
commit 32348f5778
3 changed files with 12 additions and 8 deletions

View File

@ -548,14 +548,11 @@ Type* Indirect (Type* T)
Type* ArrayToPtr (const Type* T)
Type* ArrayToPtr (Type* T)
/* Convert an array to a pointer to it's first element */
{
/* Function must only be called for an array */
CHECK (IsTypeArray (T));
/* Return pointer to first element */
return PointerTo (T + 1);
return PointerTo (GetElementType (T));
}
@ -703,8 +700,10 @@ Type* PtrConversion (Type* T)
* return T.
*/
{
if (IsTypeFunc (T) || IsTypeArray (T)) {
if (IsTypeFunc (T)) {
return PointerTo (T);
} else if (IsTypeArray (T)) {
return ArrayToPtr (T);
} else {
return T;
}

View File

@ -288,7 +288,7 @@ Type* Indirect (Type* T);
* given type points to.
*/
Type* ArrayToPtr (const Type* T);
Type* ArrayToPtr (Type* T);
/* Convert an array to a pointer to it's first element */
#if defined(HAVE_INLINE)
@ -467,7 +467,7 @@ INLINE int IsClassStruct (const Type* T)
{
return (GetClass (T) == T_CLASS_STRUCT);
}
#else
#else
# define IsClassStruct(T) (GetClass (T) == T_CLASS_STRUCT)
#endif

View File

@ -171,6 +171,11 @@ void LoadExpr (unsigned Flags, struct ExprDesc* Expr)
ED_TestDone (Expr);
}
}
/* Do standard pointer conversions since the expression is now in the
* primary.
*/
Expr->Type = PtrConversion (Expr->Type);
}