From patchwork Tue Jun 22 13:52:34 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [C++] Fix -Wunused-but-set-variable warnings on .*/->* operands (PR c++/44619) Date: Tue, 22 Jun 2010 03:52:34 -0000 From: Jakub Jelinek X-Patchwork-Id: 56500 Message-Id: <20100622135234.GS7811@tyan-ft48-01.lab.bos.redhat.com> To: Jason Merrill Cc: gcc-patches@gcc.gnu.org Hi! .* and ->* operands aren't marked as read, the following patch fixes it. Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk? Or should that be mark_rvalue_use (or something else)? 2010-06-22 Jakub Jelinek PR c++/44619 * typeck2.c (build_m_component_ref): Call mark_exp_read on datum and component. * g++.dg/warn/Wunused-var-13.C: New test. Jakub --- gcc/cp/typeck2.c.jj 2010-06-20 16:36:49.000000000 +0200 +++ gcc/cp/typeck2.c 2010-06-22 12:28:34.000000000 +0200 @@ -1478,6 +1478,9 @@ build_m_component_ref (tree datum, tree if (error_operand_p (datum) || error_operand_p (component)) return error_mark_node; + mark_exp_read (datum); + mark_exp_read (component); + ptrmem_type = TREE_TYPE (component); if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type)) { --- gcc/testsuite/g++.dg/warn/Wunused-var-13.C.jj 2010-06-22 12:30:04.000000000 +0200 +++ gcc/testsuite/g++.dg/warn/Wunused-var-13.C 2010-06-22 08:20:23.000000000 +0200 @@ -0,0 +1,22 @@ +// PR c++/44619 +// { dg-do compile } +// { dg-options "-Wunused -W" } + +struct S { int x, y; }; + +int +f1 () +{ + struct S p; + int S::*q = &S::x; + p.*q = 5; + return p.*q; +} + +int +f2 (struct S *p, int S::*q) +{ + struct S *r = p; + int S::*s = q; + return r->*s; +}