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]

Re: [C++ Patch] PR 54501


Hi,

On 10/18/2012 03:17 AM, Jason Merrill wrote:
Hmm, I thought I fixed a very similar bug recently.

I'm concerned that this change will cause problems with brace-elision situations. But then again, can we have a zero-length array followed by anything else?
If I understand correctly your hesitations, I don't think there are exceptions to the general rule that if the size of the array is zero there can be no initializers. This morning I investigated in some detail this special case (from a testcase I recently added, pr43765.C):

struct SomeType
{
  const char *values[];
};

it's in fact related because we parse it as:

struct SomeType
{
  const char *values[0];
};

(per grokdeclarator around line 10246). Given the way we parse it (not completely uncontroversial, IMHO, but that would be a separate issue), we do the right thing, we accept:

SomeType s = { };

and we reject:

SomeType s = { 1 };

Only the wording of the error changes (from "too many initializers" to "initializers provided") (*)

In any case, I can't imagine a different, safer, way to handle the issue we are facing. Do you have anything specific to suggest?

Thanks,
Paolo.

(*) Moreover we likewise accept:

SomeType s = { { } };

and likewise reject:

SomeType s = { { { } } };


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]