OK.
On Mon, Sep 26, 2016 at 8:23 AM, Marek Polacek <pola...@redhat.com> wrote: > This patch updates __has_cpp_attribute for fallthrough, which is now > supported. > > The system.h hunk should aid people building trunk GCC with older GCC 7 not > supporting this attribute yet. > > Bootstrapped/regtested on x86_64-linux, ok for trunk? > > 2016-09-26 Marek Polacek <pola...@redhat.com> > > * c-lex.c (c_common_has_attribute): Handle attribute fallthrough. > > * system.h: Use __has_attribute to check whether the fallthrough > attribute is supported. > > * g++.dg/cpp1z/feat-cxx1z.C: Test attribute fallthrough. > > diff --git gcc/c-family/c-lex.c gcc/c-family/c-lex.c > index 829c18b..5c6496e 100644 > --- gcc/c-family/c-lex.c > +++ gcc/c-family/c-lex.c > @@ -350,7 +350,8 @@ c_common_has_attribute (cpp_reader *pfile) > else if (is_attribute_p ("deprecated", attr_name)) > result = 201309; > else if (is_attribute_p ("maybe_unused", attr_name) > - || is_attribute_p ("nodiscard", attr_name)) > + || is_attribute_p ("nodiscard", attr_name) > + || is_attribute_p ("fallthrough", attr_name)) > result = 201603; > if (result) > attr_name = NULL_TREE; > diff --git gcc/system.h gcc/system.h > index 8ca71cf..0952e4f 100644 > --- gcc/system.h > +++ gcc/system.h > @@ -746,8 +746,12 @@ extern void fancy_abort (const char *, int, const char > *) ATTRIBUTE_NORETURN; > #define gcc_unreachable() (fancy_abort (__FILE__, __LINE__, __FUNCTION__)) > #endif > > -#if GCC_VERSION >= 7000 > -# define gcc_fallthrough() __attribute__((fallthrough)) > +#if GCC_VERSION >= 7000 && defined(__has_attribute) > +# if __has_attribute(fallthrough) > +# define gcc_fallthrough() __attribute__((fallthrough)) > +# else > +# define gcc_fallthrough() > +# endif > #else > # define gcc_fallthrough() > #endif > diff --git gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C > gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C > index 982572e..71c8c7d 100644 > --- gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C > +++ gcc/testsuite/g++.dg/cpp1z/feat-cxx1z.C > @@ -370,6 +370,12 @@ > # error "__has_cpp_attribute(nodiscard) != 201603" > # endif > > +# if ! __has_cpp_attribute(fallthrough) > +# error "__has_cpp_attribute(fallthrough)" > +# elif __has_cpp_attribute(fallthrough) != 201603 > +# error "__has_cpp_attribute(fallthrough) != 201603" > +# endif > + > #else > # error "__has_cpp_attribute" > #endif > > Marek