On Wed, Sep 24, 2014 at 12:59:17PM -0700, Josh Gao wrote:
> Hi all,
>
> This patch adds a diagnostic that warns when virtual methods that override
> are not tagged 'override'.
>
> commit c33643ab4f12148ed6cdc5a8a5b0be282c7b0451
> Author: Josh Gao <[email protected]>
> Date: Wed Sep 24 12:29:39 2014 -0700
>
> Add diagnostic to require virtual methods to be tagged override.
>
> * c-family/c.opt: Add -Wmissing-virtual-override.
> * cp/class.c: Implement -Wmissing-virtual-override.
> * testsuite/g++.dg/cpp0x/override5.C: New test.
Please drop the c-family/, cp/ and testsuite/ prefixes; these should
go into ChangeLogs in appropriate subdirectories.
> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
> index 72ac2ed..db350d7 100644
> --- a/gcc/c-family/c.opt
> +++ b/gcc/c-family/c.opt
> @@ -558,6 +558,10 @@ Wmissing-field-initializers
> C ObjC C++ ObjC++ Var(warn_missing_field_initializers) Warning
> EnabledBy(Wextra)
> Warn about missing fields in struct initializers
>
> +Wmissing-virtual-override
> +C++ ObjC++ Var(warn_missing_virtual_override) Warning
> +Warn about missing \"override\" specifier in virtual methods that override.
No dot at the end here.
> Wsizeof-pointer-memaccess
> C ObjC C++ ObjC++ Var(warn_sizeof_pointer_memaccess) Warning LangEnabledBy(C
> ObjC C++ ObjC++,Wall)
> Warn about suspicious length parameters to certain string functions if the
> argument uses sizeof
> diff --git a/gcc/cp/class.c b/gcc/cp/class.c
> index 010ed25..f44cb82 100644
> --- a/gcc/cp/class.c
> +++ b/gcc/cp/class.c
> @@ -2773,6 +2773,8 @@ check_for_override (tree decl, tree ctype)
> error ("%q+#D marked %<final%>, but is not virtual", decl);
> if (DECL_OVERRIDE_P (decl) && !overrides_found)
> error ("%q+#D marked %<override%>, but does not override", decl);
> + if (!DECL_OVERRIDE_P (decl) && overrides_found && !DECL_DESTRUCTOR_P(decl))
> + warning (OPT_Wmissing_virtual_override, "%q+#D overrides, but is not
> marked %<override%>", decl);
These lines are too long, please wrap them. Also add a space before
(.
Please describe the new option in doc/invoke.texi.
Marek