> cat bug.ii struct Base1 { virtual ~Base1() {} }; struct Base2 { virtual ~Base2() {} }; struct Foo : Base1, Base2 {}; void f(Foo&); void g(void* v) { Base2* base = static_cast<Base2*>(v); Foo* foo = static_cast<Foo*>(base); f(*foo); } > g++ -Wall -c bug.ii bug.ii: In function ‘void g(void*)’: bug.ii:12:9: warning: variable ‘base’ set but not used [-Wunused-but-set-variable] I'm using SVN revision trunk@161411 on linux x86_64.
Confirmed.
Created attachment 21021 [details] gcc46-pr44682.patch Untested fix.
Subject: Bug 44682 Author: jakub Date: Mon Jun 28 20:12:31 2010 New Revision: 161511 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=161511 Log: PR c++/44682 * class.c (build_base_path): If want_pointer, call mark_rvalue_use on expr. * g++.dg/warn/Wunused-var-14.C: New test. Added: trunk/gcc/testsuite/g++.dg/warn/Wunused-var-14.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/class.c trunk/gcc/testsuite/ChangeLog
Fixed.