ping
On Tue, Jul 23, 2019 at 10:27 AM Matthew Beliveau <mbeli...@redhat.com> wrote: > > ping > > On Tue, Jul 16, 2019 at 8:40 AM Marek Polacek <pola...@redhat.com> wrote: > > > > On Mon, Jul 15, 2019 at 09:47:26AM -0400, Matthew Beliveau wrote: > > > Okay I kept the TYPE_MAIN_VARIANT and dropped the accidental new line! > > > Hopefully this should be fine! > > > > CCing Joseph as this is c-family/ stuff. > > > > > Bootstrapped/regtested on x86_64-linux, ok for trunk? > > > > > > 2019-07-12 Matthew Beliveau <mbeli...@redhat.com> > > > > > > PR c++/90590 > > > * c-warn.c (c_do_switch_warnings): Suppress warning for enumerators > > > with reserved names that are in a system header. > > > > > > * c-c++-common/pr90590-1.c: New test. > > > * c-c++-common/pr90590-1.h: New test. > > > * c-c++-common/pr90590-2.c: New test. > > > * c-c++-common/pr90590-2.h: New test. > > > > > > diff --git gcc/c-family/c-warn.c gcc/c-family/c-warn.c > > > index b5d09e761d7..51c54a283e5 100644 > > > --- gcc/c-family/c-warn.c > > > +++ gcc/c-family/c-warn.c > > > @@ -34,6 +34,7 @@ along with GCC; see the file COPYING3. If not see > > > #include "gcc-rich-location.h" > > > #include "gimplify.h" > > > #include "c-family/c-indentation.h" > > > +#include "c-family/c-spellcheck.h" > > > #include "calls.h" > > > #include "stor-layout.h" > > > > > > @@ -1628,6 +1629,15 @@ c_do_switch_warnings (splay_tree cases, location_t > > > switch_location, > > > if (cond && tree_int_cst_compare (cond, value)) > > > continue; > > > > > > + /* If the enumerator is defined in a system header and uses a > > > reserved > > > + name, then we continue to avoid throwing a warning. */ > > > + location_t loc = DECL_SOURCE_LOCATION > > > + (TYPE_STUB_DECL (TYPE_MAIN_VARIANT (type))); > > > + if (in_system_header_at (loc) > > > + && name_reserved_for_implementation_p > > > + (IDENTIFIER_POINTER (TREE_PURPOSE (chain)))) > > > + continue; > > > + > > > /* If there is a default_node, the only relevant option is > > > Wswitch-enum. Otherwise, if both are enabled then we prefer > > > to warn using -Wswitch because -Wswitch is enabled by -Wall > > > diff --git gcc/testsuite/c-c++-common/pr90590-1.c > > > gcc/testsuite/c-c++-common/pr90590-1.c > > > new file mode 100644 > > > index 00000000000..4e11debb7fa > > > --- /dev/null > > > +++ gcc/testsuite/c-c++-common/pr90590-1.c > > > @@ -0,0 +1,15 @@ > > > +// PR c++/90590 > > > +// { dg-options -Wswitch } > > > +#include "pr90590-1.h" > > > + > > > +void > > > +g () > > > +{ > > > + enum E e = _A; > > > + switch (e) // { dg-bogus "enumeration value '_C' not handled in > > > switch" } > > > + { > > > + case _A: > > > + case _B: > > > + break; > > > + } > > > +} > > > diff --git gcc/testsuite/c-c++-common/pr90590-1.h > > > gcc/testsuite/c-c++-common/pr90590-1.h > > > new file mode 100644 > > > index 00000000000..22f1a7d5d52 > > > --- /dev/null > > > +++ gcc/testsuite/c-c++-common/pr90590-1.h > > > @@ -0,0 +1,2 @@ > > > +#pragma GCC system_header > > > +enum E { _A, _B, _C }; > > > diff --git gcc/testsuite/c-c++-common/pr90590-2.c > > > gcc/testsuite/c-c++-common/pr90590-2.c > > > new file mode 100644 > > > index 00000000000..23da97f9d74 > > > --- /dev/null > > > +++ gcc/testsuite/c-c++-common/pr90590-2.c > > > @@ -0,0 +1,11 @@ > > > +// PR c++/90590 > > > +// { dg-options -Wswitch } > > > + > > > +#include "pr90590-2.h" > > > + > > > +void > > > +fn () > > > +{ > > > + switch (c.b) // { dg-bogus "enumeration value" } > > > + ; > > > +} > > > diff --git gcc/testsuite/c-c++-common/pr90590-2.h > > > gcc/testsuite/c-c++-common/pr90590-2.h > > > new file mode 100644 > > > index 00000000000..e4f8635576f > > > --- /dev/null > > > +++ gcc/testsuite/c-c++-common/pr90590-2.h > > > @@ -0,0 +1,4 @@ > > > +#pragma GCC system_header > > > +struct { > > > + enum { _A } b; > > > +} c; > > > > > > Marek