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

Merge pull request #2199 from acqn/FAMFix

[cc65] Forbidden struct itself with flexible array member as struct member or array element
This commit is contained in:
Bob Andrews 2023-10-05 03:21:31 +02:00 committed by GitHub
commit 12193790e5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 0 deletions

View File

@ -515,6 +515,13 @@ static void CheckArrayElementType (Type* DataType)
if (!IsTypeVoid (T) || IS_Get (&Standard) != STD_CC65) {
Error ("Array of 0-size element type '%s'", GetFullTypeName (T));
}
} else {
if (IsTypeStruct (T)) {
SymEntry* TagEntry = GetESUTagSym (T);
if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) {
Error ("Invalid use of struct with flexible array member");
}
}
}
} else {
++T;
@ -1193,6 +1200,9 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags)
if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) {
Field->Flags |= SC_HAVEFAM;
Flags |= SC_HAVEFAM;
if (IsTypeStruct (Decl.Type)) {
Error ("Invalid use of struct with flexible array member");
}
}
}

View File

@ -0,0 +1,11 @@
/* Bug #2016 - cc65 erroneously allows struct fields that are structs with flexible array members */
typedef struct x {
int a;
int b[]; /* Ok: Flexible array member can be last */
} x;
struct y {
x x; /* Not ok: Contains flexible array member */
int a;
};

View File

@ -0,0 +1,9 @@
/* Bug #2017 - cc65 erroneously allows arrays of structs with flexible array members */
struct z {
int a;
int c;
int b[];
};
struct z y[3]; /* Should be an error */