Commit 9127c38e by Jason Merrill Committed by Jason Merrill

re PR c++/63657 (-Wunused-variable: warning supressed by virtual dtor)

	PR c++/63657
	PR c++/38958
	* call.c (set_up_extended_ref_temp): Set TREE_USED on the reference
	if the temporary has a non-trivial destructor.
	* decl.c (poplevel): Don't look through references.

From-SVN: r217957
parent 0cd7c672
2014-11-21 Jason Merrill <jason@redhat.com> 2014-11-21 Jason Merrill <jason@redhat.com>
PR c++/63657
PR c++/38958
* call.c (set_up_extended_ref_temp): Set TREE_USED on the reference
if the temporary has a non-trivial destructor.
* decl.c (poplevel): Don't look through references.
PR c++/63942 PR c++/63942
* name-lookup.c (supplement_binding_1): Override a mangling alias. * name-lookup.c (supplement_binding_1): Override a mangling alias.
* mangle.c (maybe_remove_implicit_alias): New. * mangle.c (maybe_remove_implicit_alias): New.
......
...@@ -9622,6 +9622,10 @@ set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups, ...@@ -9622,6 +9622,10 @@ set_up_extended_ref_temp (tree decl, tree expr, vec<tree, va_gc> **cleanups,
/* Check whether the dtor is callable. */ /* Check whether the dtor is callable. */
cxx_maybe_build_cleanup (var, tf_warning_or_error); cxx_maybe_build_cleanup (var, tf_warning_or_error);
} }
/* Avoid -Wunused-variable warning (c++/38958). */
if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
&& TREE_CODE (decl) == VAR_DECL)
TREE_USED (decl) = DECL_READ_P (decl) = true;
*initp = init; *initp = init;
return var; return var;
......
...@@ -638,8 +638,7 @@ poplevel (int keep, int reverse, int functionbody) ...@@ -638,8 +638,7 @@ poplevel (int keep, int reverse, int functionbody)
push_local_binding where the list of decls returned by push_local_binding where the list of decls returned by
getdecls is built. */ getdecls is built. */
decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d; decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
// See through references for improved -Wunused-variable (PR 38958). tree type = TREE_TYPE (decl);
tree type = non_reference (TREE_TYPE (decl));
if (VAR_P (decl) if (VAR_P (decl)
&& (! TREE_USED (decl) || !DECL_READ_P (decl)) && (! TREE_USED (decl) || !DECL_READ_P (decl))
&& ! DECL_IN_SYSTEM_HEADER (decl) && ! DECL_IN_SYSTEM_HEADER (decl)
......
// PR c++/63657
// { dg-options "-Wunused-variable" }
class Bar
{
virtual ~Bar() {}
};
Bar& getbar();
void bar()
{
Bar& b = getbar(); // { dg-warning "unused" }
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment