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  <mse...@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  <mse...@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

Reply via email to