relax rule for flexible array members in 6.x (78039 - fails to compile glibc tests)

Martin Sebor msebor@gmail.com
Sun Oct 30 22:49:00 GMT 2016


Thanks Jeff.  I'll take care of the nits before I commit the patch
and update the Web page this week.

Jason, assuming you agree that the checking should be relaxed for
6.0, can you please let me know if it's good to commit?

Martin

On 10/24/2016 09:13 AM, Jeff Law wrote:
> On 10/21/2016 05:47 PM, Martin Sebor wrote:
>> Bug 78039 complains that the fix for c++/71912 recently backported
>> to the GCC 6 branch causes GCC 6 to reject Glibc tests that expect
>> to be able to define structs with multiple flexible array members,
>> despite it violating the C standard(*).
>>
>> The rejected code is unsafe and was intended to be rejected in 6.1
>> to begin with (i.e., it was a bug I had missed that the code wasn't
>> rejected in 6.1), and an alternate solution exists, so the backport
>> seemed appropriate to me.
>>
>> However, it was pointed out to me that apparently there is a policy
>> or convention of not backporting to release branches bug fixes that
>> cause GCC to reject code that was previously accepted, even if the
>> code is invalid.
>>
>> To comply with this policy the attached patch adjusts the backported
>> code to accept the invalid flexible array member with just a pedantic
>> warning (same as in C mode).  The patch also adds the tests that were
>> part of the fix for bug 71912 but that were accidentally left out of
>> the original backport.
>>
>> Martin
>>
>> [*] Bug 77650 discusses the background on this.
>>
>> PS I checked the GCC Development Plan but couldn't find a mention
>> of this policy.  Since this seems like an important guarantee for
>> users to know about and for contributors to maintain I suggest to
>> update the document to reflect it.  If there is are no objections
>> I'll propose a separate change to mention it.
>>
>>   https://gcc.gnu.org/develop.html
>>
>> gcc-78039.diff
>>
>>
>> PR c++/78039 - fails to compile glibc tests
>>
>> gcc/cp/ChangeLog:
>> 2016-10-21  Martin Sebor  <msebor@redhat.com>
>>
>>     PR c++/78039
>>     * class.c (diagnose_flexarrays): Avoid rejecting an invalid flexible
>>     array member with a hard error when it is followed by anbother member
> s/anbother/another/
>
>>     in a different struct, and instead issue just a pedantic warning.
>>
>> gcc/testsuite/ChangeLog:
>> 2016-10-21  Martin Sebor  <msebor@redhat.com>
>>
>>     PR c++/78039
>>     * g++.dg/ext/flexary18.C: New test.
>>     * g++.dg/ext/flexary19.C: New test.
>>
>> Index: gcc/cp/class.c
>> ===================================================================
>> --- gcc/cp/class.c    (revision 241433)
>> +++ gcc/cp/class.c    (working copy)
>> @@ -6960,7 +6960,20 @@ diagnose_flexarrays (tree t, const flexmems_t *fme
>>        location_t loc = DECL_SOURCE_LOCATION (fmem->array);
>>        diagd = true;
>>
>> -      error_at (loc, msg, fmem->array, t);
>> +      /* For compatibility with GCC 6.2 and 6.1 reject with an error
>> +         a flexible array member of a plain struct that's followed
>> +         by another member only if they are both members of the same
>> +         struct.  Otherwise, issue just a pedantic warning.  See bug
>> +         71375 for details.  */
> 71375?  That bug looks totally unrelated.  Did you mean 71912?
>
>
>
> Jason should have final call on the C++ bits.  But figured I'd point out
> the nits.
>
> As far as updating the web page to mention the caveat about this aspect
> of the backporting policy, please do.
>
> Jeff



More information about the Gcc-patches mailing list