On Thu, May 19, 2022 at 2:33 PM David Malcolm via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> As of GCC 11 onwards we have required a C++11 compiler, such as GCC 4.8
> or later.  On the assumption that any such compiler correctly implements
> "final" and "override", this patch removes the FINAL and OVERRIDE macros
> from ansidecl.h.  It adds them back to gcc-plugins.h in case any plugins
> make use of them.

I don't think we need to care for that case so please do not add them to
gcc-plugins.h.

But ansidecl.h is shared between gcc and binutils/gdb (and libiberty
in general),
can you get an ack from their side as well please?

Thanks,
Richard.

> Followup patches within this kit replace all uses of the macros in the
> tree with the lower-case versions; I've split them up for ease of
> review, but would apply them as one combined commit if approved.
>
> gcc/ChangeLog:
>         * gcc-plugin.h: Add macros OVERRIDE and FINAL.
>
> include/ChangeLog:
>         * ansidecl.h: Drop macros OVERRIDE and FINAL.
>
> Signed-off-by: David Malcolm <dmalc...@redhat.com>
> ---
>  gcc/gcc-plugin.h   |  7 +++++++
>  include/ansidecl.h | 41 -----------------------------------------
>  2 files changed, 7 insertions(+), 41 deletions(-)
>
> diff --git a/gcc/gcc-plugin.h b/gcc/gcc-plugin.h
> index ee9aa865114..f0f3049d0ce 100644
> --- a/gcc/gcc-plugin.h
> +++ b/gcc/gcc-plugin.h
> @@ -44,4 +44,11 @@ along with GCC; see the file COPYING3.  If not see
>  #include "tree-check.h"
>  #include "plugin.h"
>
> +/* Versions of GCC prior to GCC 13 defined these macros in ansidecl.h
> +   for C++98 compatibility.  Given that we require C++11 from GCC 11 onwards,
> +   keep definitions here in case plugins made use of them.  */
> +
> +#define OVERRIDE override
> +#define FINAL    final
> +
>  #endif /* GCC_PLUGIN_H */
> diff --git a/include/ansidecl.h b/include/ansidecl.h
> index efee5b6904b..119748deb68 100644
> --- a/include/ansidecl.h
> +++ b/include/ansidecl.h
> @@ -345,47 +345,6 @@ So instead we use the macro below and test it against 
> specific values.  */
>  #define CONSTEXPR
>  #endif
>
> -/* C++11 adds the ability to add "override" after an implementation of a
> -   virtual function in a subclass, to:
> -     (A) document that this is an override of a virtual function
> -     (B) allow the compiler to issue a warning if it isn't (e.g. a mismatch
> -         of the type signature).
> -
> -   Similarly, it allows us to add a "final" to indicate that no subclass
> -   may subsequently override the vfunc.
> -
> -   Provide OVERRIDE and FINAL as macros, allowing us to get these benefits
> -   when compiling with C++11 support, but without requiring C++11.
> -
> -   For gcc, use "-std=c++11" to enable C++11 support; gcc 6 onwards enables
> -   this by default (actually GNU++14).  */
> -
> -#if defined __cplusplus
> -# if __cplusplus >= 201103
> -   /* C++11 claims to be available: use it.  Final/override were only
> -      implemented in 4.7, though.  */
> -#  if GCC_VERSION < 4007
> -#   define OVERRIDE
> -#   define FINAL
> -#  else
> -#   define OVERRIDE override
> -#   define FINAL final
> -#  endif
> -# elif GCC_VERSION >= 4007
> -   /* G++ 4.7 supports __final in C++98.  */
> -#  define OVERRIDE
> -#  define FINAL __final
> -# else
> -   /* No C++11 support; leave the macros empty.  */
> -#  define OVERRIDE
> -#  define FINAL
> -# endif
> -#else
> -  /* No C++11 support; leave the macros empty.  */
> -# define OVERRIDE
> -# define FINAL
> -#endif
> -
>  /* A macro to disable the copy constructor and assignment operator.
>     When building with C++11 and above, the methods are explicitly
>     deleted, causing a compile-time error if something tries to copy.
> --
> 2.26.3
>

Reply via email to