Jason Merrill <ja...@redhat.com> writes:

> I think -Wunused and -Wall should imply -Wunused-local-typedefs unless
> the user specifies -Wno-unused-local-typedefs.

Dodji Seketeli <do...@redhat.com> writes:

> I actually first tried this (actually adding it to -Wall -extra and
> -Wunused) and found out the following issue.
> 
> A typedef can be defined in a macro in a system header, be expanded in
> a function and not be used by the function.  In this case we shouldn't
> warn, but PR preprocessor/7263 makes us warn nonetheless.  There are
> many spots of that kind in the libstdc++ test suite.
> 

Jason Merrill <ja...@redhat.com> writes:

> Does your set of linemap patches fix the issue?  In that case, we can
> add it when those go in.  Speaking of which, sorry I haven't found the
> time to review them yet.

So, in prevision of when the patch for PR preprocessor/7263 goes in, I
am proposing this patchlet that turns on -Wunused-local-typedefs
whenever -Wunused (and so -Wall) is turned on.

I have tested it on a synthetic tree made of my current patch series for
PR preprocessor/7263, and trunk that contains -Wunused-local-typedefs
support.

Is this be OK for trunk when PR preprocessor/7263 gets in, assuming it
passes bootstrap and tests on trunk at that moment?

Thanks.


    Enable -Wunused-local-typedefs when -Wall or -Wunused
    
    gcc/
    
        * opts.c (finish_options): Activate -Wunused-local-typedefs if
        -Wunused is activated.
        * doc/invoke.texi: Update blurb of -Wunused-local-typedefs.

diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 3aa9611..5f4afe3 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -3505,6 +3505,7 @@ To suppress this warning use the @samp{unused} attribute
 @item -Wunused-local-typedefs @r{(C, Objective-C, C++ and Objective-C++ only)}
 @opindex Wunused-local-typedefs
 Warn when a typedef locally defined in a function is not used.
+This warning is enabled by @option{-Wall}.
 
 @item -Wunused-parameter
 @opindex Wunused-parameter
diff --git a/gcc/opts.c b/gcc/opts.c
index 5d5bcb9..ebb99d0 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -830,6 +830,10 @@ finish_options (struct gcc_options *opts, struct 
gcc_options *opts_set,
   if (opts->x_warn_unused_value == -1)
     opts->x_warn_unused_value = opts->x_warn_unused;
 
+  /* Wunused-local-typedefs is enabled by -Wunused or -Wall.  */
+  if (opts->x_warn_unused_local_typedefs == -1)
+    opts->x_warn_unused_local_typedefs = opts->x_warn_unused;
+
   /* This replaces set_Wextra.  */
   if (opts->x_warn_uninitialized == -1)
     opts->x_warn_uninitialized = opts->x_extra_warnings;
-- 
                Dodji

Reply via email to