Commit 6a026364 by Paolo Carlini Committed by Paolo Carlini

re PR c++/38958 ('unused variable' warning emitted when extending the lifetime…

re PR c++/38958 ('unused variable' warning emitted when extending the lifetime of a returned RAII type by holding a reference to const despite delayed destructor side-effects. [dtor])

/cp
2013-06-12  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/38958
	* decl.c (poplevel): For the benefit of -Wunused-variable see
	through references.

/testsuite
2013-06-12  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/38958
	* g++.dg/warn/Wunused-var-20.C: New.

From-SVN: r200042
parent ef08b035
2013-06-12 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/38958
* decl.c (poplevel): For the benefit of -Wunused-variable see
through references.
2013-06-12 Paolo Carlini <paolo.carlini@oracle.com>
* parser.c (cp_parser_nested_name_specifier_opt): Fix typo in comment.
2013-06-12 Paolo Carlini <paolo.carlini@oracle.com>
......
......@@ -622,17 +622,20 @@ poplevel (int keep, int reverse, int functionbody)
push_local_binding where the list of decls returned by
getdecls is built. */
decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
// See through references for improved -Wunused-variable (PR 38958).
tree type = non_reference (TREE_TYPE (decl));
if (VAR_P (decl)
&& (! TREE_USED (decl) || !DECL_READ_P (decl))
&& ! DECL_IN_SYSTEM_HEADER (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))))
&& type != error_mark_node
&& (!CLASS_TYPE_P (type)
|| !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)))
{
if (! TREE_USED (decl))
warning (OPT_Wunused_variable, "unused variable %q+D", decl);
else if (DECL_CONTEXT (decl) == current_function_decl
// For -Wunused-but-set-variable leave references alone.
&& TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
&& errorcount == unused_but_set_errorcount)
{
......
2013-06-12 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/38958
* g++.dg/warn/Wunused-var-20.C: New.
2013-06-12 Richard Sandiford <rdsandiford@googlemail.com>
* gcc.target/mips/mips.exp: Handle -f{no-,}common.
......
// PR c++/38958
// { dg-options "-Wunused" }
volatile int g;
struct Lock
{
~Lock() { g = 0; }
};
Lock AcquireLock() { return Lock(); }
int main()
{
const Lock& lock = AcquireLock();
g = 1;
g = 2;
g = 3;
}
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