From 45da20e770fbdd36f5cf313afc6f7e0102ba6d86 Mon Sep 17 00:00:00 2001 From: acqn Date: Wed, 12 Oct 2022 13:13:37 +0800 Subject: [PATCH 1/3] Fixed CheckedSizeOf() for unknown-size types (no such use case yet though). --- src/cc65/datatype.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 37fe54023..2cfb964cc 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -315,7 +315,7 @@ unsigned CheckedSizeOf (const Type* T) { unsigned Size = SizeOf (T); if (Size == 0) { - if (HasUnknownSize (T + 1)) { + if (HasUnknownSize (T)) { Error ("Size of type '%s' is unknown", GetFullTypeName (T)); } else { Error ("Size of type '%s' is 0", GetFullTypeName (T)); From e57c409894ef877bb2d9e5c8cdb04a8f606dacc6 Mon Sep 17 00:00:00 2001 From: acqn Date: Wed, 12 Oct 2022 13:13:15 +0800 Subject: [PATCH 2/3] Fixed TypeHasAttrData(), GetSignedType() and GetUnsignedType(), none in use yet though. --- src/cc65/datatype.c | 16 +++++++++++++--- src/cc65/datatype.h | 2 ++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/cc65/datatype.c b/src/cc65/datatype.c index 2cfb964cc..3bcca53a9 100644 --- a/src/cc65/datatype.c +++ b/src/cc65/datatype.c @@ -63,6 +63,8 @@ const Type type_char[] = { TYPE(T_CHAR), TYPE(T_END) }; const Type type_schar[] = { TYPE(T_SCHAR), TYPE(T_END) }; const Type type_uchar[] = { TYPE(T_UCHAR), TYPE(T_END) }; +const Type type_short[] = { TYPE(T_SHORT), TYPE(T_END) }; +const Type type_ushort[] = { TYPE(T_USHORT), TYPE(T_END) }; const Type type_int[] = { TYPE(T_INT), TYPE(T_END) }; const Type type_uint[] = { TYPE(T_UINT), TYPE(T_END) }; const Type type_long[] = { TYPE(T_LONG), TYPE(T_END) }; @@ -727,8 +729,10 @@ const Type* GetSignedType (const Type* T) case T_RANK_CHAR: return type_schar; - case T_RANK_INT: case T_RANK_SHORT: + return type_short; + + case T_RANK_INT: return type_int; case T_RANK_LONG: @@ -749,8 +753,10 @@ const Type* GetUnsignedType (const Type* T) case T_RANK_CHAR: return type_uchar; - case T_RANK_INT: case T_RANK_SHORT: + return type_ushort; + + case T_RANK_INT: return type_uint; case T_RANK_LONG: @@ -979,7 +985,11 @@ int HasUnknownSize (const Type* T) int TypeHasAttrData (const Type* T) /* Return true if the given type has attribute data */ { - return IsClassStruct (T) || IsTypeArray (T) || IsClassFunc (T); + return IsClassStruct (T) || + IsTypeArray (T) || + IsClassFunc (T) || + IsTypeVoid (T) || + IsTypeBitField (T); } diff --git a/src/cc65/datatype.h b/src/cc65/datatype.h index eebd3abd8..9d7b5d49d 100644 --- a/src/cc65/datatype.h +++ b/src/cc65/datatype.h @@ -215,6 +215,8 @@ struct Type { extern const Type type_char[]; extern const Type type_schar[]; extern const Type type_uchar[]; +extern const Type type_short[]; +extern const Type type_ushort[]; extern const Type type_int[]; extern const Type type_uint[]; extern const Type type_long[]; From 878264d948e6eafec068f13616b3c9b3b7454d1f Mon Sep 17 00:00:00 2001 From: acqn Date: Wed, 13 Sep 2023 22:26:41 +0800 Subject: [PATCH 3/3] Minor consistency improvement for AddEnumSym() usage. No impact. --- src/cc65/declare.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc65/declare.c b/src/cc65/declare.c index cd174c92d..644291869 100644 --- a/src/cc65/declare.c +++ b/src/cc65/declare.c @@ -756,7 +756,7 @@ static SymEntry* ParseEnumSpec (const char* Name, unsigned* DSFlags) Flags |= SC_FICTITIOUS; } - return AddEnumSym (Name, Flags, MemberType, FieldTab, DSFlags); + return AddEnumSym (Name, SC_DEF | Flags, MemberType, FieldTab, DSFlags); }