On 6/16/23 07:58, Alex Coplan wrote:
Hi,

This is a v3 patch addressing feedback for:
https://gcc.gnu.org/pipermail/gcc-patches/2023-June/621714.html

The only change since the previous version is that the new option is
documented in invoke.texi (and the description in c.opt was shortened as
requested).

------

macOS SDK headers using the CF_ENUM macro can expand to invalid C++ code
of the form:

typedef enum T : BaseType T;

i.e. an elaborated-type-specifier with an additional enum-base.
Upstream LLVM can be made to accept the above construct with
-Wno-error=elaborated-enum-base.

This patch adds the -Welaborated-enum-base warning to GCC and adjusts
the C++ parser to emit this warning instead of rejecting this code
outright.

The macro expansion in the macOS headers occurs in the case that the
compiler declares support for enums with underlying type using
__has_feature, see
https://gcc.gnu.org/pipermail/gcc-patches/2023-May/618450.html

GCC rejecting this construct outright means that GCC fails to bootstrap
on Darwin in the case that it (correctly) implements __has_feature and
declares support for C++ enums with underlying type.

With this patch, GCC can bootstrap on Darwin in combination with the
(WIP) __has_feature patch posted at:
https://gcc.gnu.org/pipermail/gcc-patches/2023-May/617878.html

Bootstrapped/regtested on aarch64-linux-gnu and x86_64-apple-darwin.
OK for trunk?

OK, thanks.

Thanks,
Alex

gcc/c-family/ChangeLog:

        * c.opt (Welaborated-enum-base): New.

gcc/ChangeLog:

        * doc/invoke.texi: Document -Welaborated-enum-base.

gcc/cp/ChangeLog:

        * parser.cc (cp_parser_enum_specifier): Don't reject
        elaborated-type-specifier with enum-base, instead emit new
        Welaborated-enum-base warning.

gcc/testsuite/ChangeLog:

        * g++.dg/cpp0x/enum40.C: Adjust expected diagnostics.
        * g++.dg/cpp0x/forw_enum6.C: Likewise.
        * g++.dg/cpp0x/elab-enum-base.C: New test.

Reply via email to