mirror of
https://github.com/cc65/cc65.git
synced 2024-12-22 12:30:41 +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:
commit
12193790e5
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
11
test/err/bug2016-fam-member.c
Normal file
11
test/err/bug2016-fam-member.c
Normal 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;
|
||||
};
|
9
test/err/bug2017-fam-element.c
Normal file
9
test/err/bug2017-fam-element.c
Normal 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 */
|
Loading…
Reference in New Issue
Block a user