This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On 06/11/2018 12:08 PM, Richard Sandiford wrote:
Martin Sebor <msebor@gmail.com> writes:@@ -1553,12 +1553,28 @@ struct line *thisline = (struct line *) thisline->length = this_length; @end smallexample -In ISO C90, you would have to give @code{contents} a length of 1, which -means either you waste space or complicate the argument to @code{malloc}. +Although the size of a zero-length array is zero, an array member of +this kind may increase the size the enclosing type as a result of tail +padding. The offset of a zero-length array member from the beginning +of the enclosing structure is the same as the offset of an array with +one or more elements of the same type. The alignment of a zero-length +array is the same as the alignment of its elements. -In ISO C99, you would use a @dfn{flexible array member}, which is -slightly different in syntax and semantics: +Declaring zero-length arrays in other contexts, including as interior +members of structure objects or as non-member objects is discouraged. +Accessing elements of zero-length arrays declared in such contexts is +undefined and may be diagnosed. +In the absence of the zero-length array extension, in ISO C90 the +@code{contents} array in the example above would typically be declared +to have a single element. Although this technique is discouraged, GCC +handles trailing one-element array members similarly to zero-length +arrays.This last sentence seems a bit vague. E.g. GCC should never diagnose an access to element 0 of a 1-element trailing array, whereas (like you say above) it might for zero-length trailing arrays.
GCC doesn't diagnose past-the-end accesses to trailing member arrays regardless of their size. I don't think it should start diagnosing them for zero-length arrays, and probably not even for one-element arrays (at least not in C90 mode). I think in the future it would be worthwhile to consider diagnosing past- the-end accesses to trailing member arrays of two or more elements, but this patch isn't meant to suggest it's done yet. At the same time, I do want to leave the door open to diagnosing such accesses eventually, so I don't want to go into too much detail describing exactly what is and what isn't diagnosed today. That said, I'm all for improving the text so if something isn't clear enough that should be clearer or if there are improvements you suggest please do let me know. Thanks Martin
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |