mirror of
https://github.com/cc65/cc65.git
synced 2025-03-13 15:32:09 +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) {
|
if (!IsTypeVoid (T) || IS_Get (&Standard) != STD_CC65) {
|
||||||
Error ("Array of 0-size element type '%s'", GetFullTypeName (T));
|
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 {
|
} else {
|
||||||
++T;
|
++T;
|
||||||
@ -1193,6 +1200,9 @@ static SymEntry* ParseStructSpec (const char* Name, unsigned* DSFlags)
|
|||||||
if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) {
|
if (TagEntry && SymHasFlexibleArrayMember (TagEntry)) {
|
||||||
Field->Flags |= SC_HAVEFAM;
|
Field->Flags |= SC_HAVEFAM;
|
||||||
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…
x
Reference in New Issue
Block a user