+2015-09-11 Mark Wielaard <mjw@redhat.com>
+
+ PR c/28901
+ * toplev.c (check_global_declaration): Check and use
+ warn_unused_const_variable.
+ * doc/invoke.texi (Warning Options): Add -Wunused-const-variable.
+ (-Wunused-variable): Remove non-constant. For C implies
+ -Wunused-const-variable.
+ (-Wunused-const-variable): New.
+
2015-09-14 Richard Biener <rguenther@suse.de>
* doc/match-and-simplify.texi: Update for changed syntax
+2015-09-11 Mark Wielaard <mjw@redhat.com>
+
+ PR c/28901
+ * c.opt (Wunused-variable): Option from common.opt.
+ (Wunused-const-variable): New option.
+
2015-09-09 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53184
C ObjC C++ ObjC++ Var(warn_unused_result) Init(1) Warning
Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value
+Wunused-variable
+C ObjC C++ ObjC++ LangEnabledBy(C ObjC C++ ObjC++,Wunused)
+; documented in common.opt
+
+Wunused-const-variable
+C ObjC C++ ObjC++ Var(warn_unused_const_variable) Warning LangEnabledBy(C ObjC,Wunused-variable)
+Warn when a const variable is unused
+
Wvariadic-macros
C ObjC C++ ObjC++ CPP(warn_variadic_macros) CppReason(CPP_W_VARIADIC_MACROS) Var(cpp_warn_variadic_macros) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic || Wtraditional)
Warn about using variadic macros
+2015-09-11 Mark Wielaard <mjw@redhat.com>
+
+ PR c/28901
+ * cp-objcp-common.c (cxx_warn_unused_global_decl): Remove hard-coded
+ VAR_P TREE_READONLY override.
+
2015-09-10 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/67318
if (DECL_IN_SYSTEM_HEADER (decl))
return false;
- /* Const variables take the place of #defines in C++. */
- if (VAR_P (decl) && TREE_READONLY (decl))
- return false;
-
return true;
}
-Wunsuffixed-float-constants -Wunused -Wunused-function @gol
-Wunused-label -Wunused-local-typedefs -Wunused-parameter @gol
-Wno-unused-result -Wunused-value @gol -Wunused-variable @gol
+-Wunused-const-variable @gol
-Wunused-but-set-parameter -Wunused-but-set-variable @gol
-Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol
-Wvla -Wvolatile-register-var -Wwrite-strings @gol
@item -Wunused-variable
@opindex Wunused-variable
@opindex Wno-unused-variable
-Warn whenever a local variable or non-constant static variable is unused
-aside from its declaration.
-This warning is enabled by @option{-Wall}.
+Warn whenever a local or static variable is unused aside from its
+declaration. This option implies @option{-Wunused-const-variable} for C,
+but not for C++. This warning is enabled by @option{-Wall}.
+
+To suppress this warning use the @code{unused} attribute
+(@pxref{Variable Attributes}).
+
+@item -Wunused-const-variable
+@opindex Wunused-const-variable
+@opindex Wno-unused-const-variable
+Warn whenever a constant static variable is unused aside from its declaration.
+This warning is enabled by @option{-Wunused-variable} for C, but not for C++.
+In C++ this is normally not an error since const variables take the place of
+@code{#define}s in C++.
To suppress this warning use the @code{unused} attribute
(@pxref{Variable Attributes}).
+2015-09-11 Mark Wielaard <mjw@redhat.com>
+
+ PR c/28901
+ * g++.dg/warn/unused-variable-1.C: New test.
+ * g++.dg/warn/unused-variable-2.C: Likewise.
+ * gcc.dg/unused-4.c: Adjust warning for static const.
+ * gcc.dg/unused-variable-1.c: New test.
+ * gcc.dg/unused-variable-2.c: Likewise.
+
2015-09-13 David Edelsohn <dje.gcc@gmail.com>
* gfortran.dg/private_type_3.f90: Require visibility.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Wunused-variable" } */
+
+static int a = 0; /* { dg-warning "defined but not used" } */
+static const int b = 0; /* Unlike C, this doesn't cause a warning in C++. */
+static int c __attribute__ ((unused)) = 0;
+static const char rcsid[] = "version-string"; /* Likewise. */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Wunused-variable -Wunused-const-variable" } */
+
+static int a = 0; /* { dg-warning "defined but not used" } */
+static const int b = 0; /* { dg-warning "defined but not used" } */
+static int c __attribute__ ((unused)) = 0;
+static const char rcsid[] __attribute__ ((unused)) = "version-string";
/* { dg-do compile } */
/* { dg-options "-Wunused -O3" } */
-static const int i = 0;
+static const int i = 0; /* { dg-warning "defined but not used" } */
static void f() { } /* { dg-warning "defined but not used" } */
static inline void g() { }
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Wunused-variable" } */
+
+static int a = 0; /* { dg-warning "defined but not used" } */
+static const int b = 0; /* { dg-warning "defined but not used" } */
+static int c __attribute__ ((unused)) = 0;
+static const char rcsid[] __attribute__ ((unused)) = "version-string";
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-Wunused-variable -Wno-unused-const-variable" } */
+
+static int a = 0; /* { dg-warning "defined but not used" } */
+static const int b = 0;
+static int c __attribute__ ((unused)) = 0;
+static const char rcsid[] = "version-string";
/* Warn about static fns or vars defined but not used. */
if (((warn_unused_function && TREE_CODE (decl) == FUNCTION_DECL)
- /* We don't warn about "static const" variables because the
- "rcs_id" idiom uses that construction. */
- || (warn_unused_variable
- && TREE_CODE (decl) == VAR_DECL && ! TREE_READONLY (decl)))
+ || (((warn_unused_variable && ! TREE_READONLY (decl))
+ || (warn_unused_const_variable && TREE_READONLY (decl)))
+ && TREE_CODE (decl) == VAR_DECL))
&& ! DECL_IN_SYSTEM_HEADER (decl)
&& ! snode->referred_to_p (/*include_self=*/false)
/* This TREE_USED check is needed in addition to referred_to_p
warning_at (DECL_SOURCE_LOCATION (decl),
(TREE_CODE (decl) == FUNCTION_DECL)
? OPT_Wunused_function
- : OPT_Wunused_variable,
+ : (TREE_READONLY (decl)
+ ? OPT_Wunused_const_variable
+ : OPT_Wunused_variable),
"%qD defined but not used", decl);
}