From: paolo Date: Wed, 12 Jun 2013 21:36:36 +0000 (+0000) Subject: /cp X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a8b52ce38f3056e464457ba1e95efa25a8f08d07;p=thirdparty%2Fgcc.git /cp 2013-06-12 Paolo Carlini PR c++/38958 * decl.c (poplevel): For the benefit of -Wunused-variable see through references. /testsuite 2013-06-12 Paolo Carlini PR c++/38958 * g++.dg/warn/Wunused-var-20.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@200042 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2c9398288cd0..48a9310bddcc 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-06-12 Paolo Carlini + + PR c++/38958 + * decl.c (poplevel): For the benefit of -Wunused-variable see + through references. + 2013-06-12 Paolo Carlini * parser.c (cp_parser_nested_name_specifier_opt): Fix typo in comment. diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 7825c73e0d7e..9eb1d12ceb2e 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -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) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 51143cbdad1f..b167e4c3d479 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-06-12 Paolo Carlini + + PR c++/38958 + * g++.dg/warn/Wunused-var-20.C: New. + 2013-06-12 Richard Sandiford * gcc.target/mips/mips.exp: Handle -f{no-,}common. diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-20.C b/gcc/testsuite/g++.dg/warn/Wunused-var-20.C new file mode 100644 index 000000000000..792c25369c74 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-20.C @@ -0,0 +1,19 @@ +// 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; +}