re PR c++/10416 ('unused variable' warning ignores ctor/dtor side-effects)

/cp
2012-08-20  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/10416
	* decl.c (poplevel): Check TYPE_HAS_NONTRIVIAL_DESTRUCTOR for
	Wunused_variable too.

/testsuite
2012-08-20  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/10416
	* g++.dg/warn/Wunused-var-17.C: New.

From-SVN: r190538
This commit is contained in:
Paolo Carlini 2012-08-20 17:38:53 +00:00 committed by Paolo Carlini
parent d88513eaf7
commit d952d7ad31
4 changed files with 20 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2012-08-20 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/10416
* decl.c (poplevel): Check TYPE_HAS_NONTRIVIAL_DESTRUCTOR for
Wunused_variable too.
2012-08-20 Diego Novillo <dnovillo@google.com>
* decl.c (poplevel): Start TV_NAME_LOOKUP conditionally.

View File

@ -621,16 +621,16 @@ poplevel (int keep, int reverse, int functionbody)
if (TREE_CODE (decl) == VAR_DECL
&& (! TREE_USED (decl) || !DECL_READ_P (decl))
&& ! DECL_IN_SYSTEM_HEADER (decl)
&& DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl))
&& DECL_NAME (decl) && ! DECL_ARTIFICIAL (decl)
&& TREE_TYPE (decl) != error_mark_node
&& (!CLASS_TYPE_P (TREE_TYPE (decl))
|| !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
{
if (! TREE_USED (decl))
warning (OPT_Wunused_variable, "unused variable %q+D", decl);
else if (DECL_CONTEXT (decl) == current_function_decl
&& TREE_TYPE (decl) != error_mark_node
&& TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
&& errorcount == unused_but_set_errorcount
&& (!CLASS_TYPE_P (TREE_TYPE (decl))
|| !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
&& errorcount == unused_but_set_errorcount)
{
warning (OPT_Wunused_but_set_variable,
"variable %q+D set but not used", decl);

View File

@ -1,3 +1,8 @@
2012-08-20 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/10416
* g++.dg/warn/Wunused-var-17.C: New.
2012-08-20 Patrick Marlier <patrick.marlier@gmail.com>
PR middle-end/53992

View File

@ -0,0 +1,4 @@
// PR c++/10416
// { dg-options "-Wunused" }
void f () { struct atend { ~atend () { __builtin_printf("leaving f\n"); } } a; }