------- Comment #1 from jakub at gcc dot gnu dot org 2010-06-04 12:03 ------- More complete testcase:
// PR c++/44412 // { dg-do compile } // { dg-options "-Wunused" } struct S { static const int a = 3; static int b; int c; }; const int S::a; int S::b = 4; int f1 () { S s; return s.a; } int f2 () { S s; return s.b; } void f3 () { S s; s.c = 6;// { dg-warning "set but not used" } } int f4 () { S s; s.c = 6; return s.c; } Guess we should mark the object through which a static data member is accessed, because that access already marks the object as TREE_USED, yet it is not a set of the object. Not sure where to do that though. Calling methods or static methods apparently is handled already, in both cases build_new_method_call -> build_this -> cp_build_unary_op ADDR_EXPR -> mark_lvalue_use -> mark_exp_read takes care of it: // PR c++/44412 // { dg-do compile } // { dg-options "-Wunused" } struct S { int foo (); static int bar (); }; int S::foo () { return 5; } int S::bar () { return 6; } int f1 () { S s; return s.foo (); } int f2 () { S s; return s.bar (); } -- jakub at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |dodji at gcc dot gnu dot | |org, jason at gcc dot gnu | |dot org Summary|Another bogus set-but-not- |[4.6 Regression] Another |used warning |bogus set-but-not-used | |warning Target Milestone|--- |4.6.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44412