From: jakub Date: Fri, 4 Jun 2010 18:45:07 +0000 (+0000) Subject: PR c++/44412 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35f2d7a74c5746a4f6bfbc2342ac89d98348efd0;p=thirdparty%2Fgcc.git PR c++/44412 * typeck.c (build_class_member_access_expr): Call mark_exp_read on object for static data members. * g++.dg/warn/Wunused-var-10.C: New test. * g++.dg/warn/Wunused-var-11.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@160290 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b949f5aacdc3..c54ed026cecd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-06-04 Jakub Jelinek + + PR c++/44412 + * typeck.c (build_class_member_access_expr): Call mark_exp_read + on object for static data members. + 2010-06-04 Jakub Jelinek Jason Merrill diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index a7d04ddbc5b7..3a7610a41669 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -2229,6 +2229,7 @@ build_class_member_access_expr (tree object, tree member, { /* A static data member. */ result = member; + mark_exp_read (object); /* If OBJECT has side-effects, they are supposed to occur. */ if (TREE_SIDE_EFFECTS (object)) result = build2 (COMPOUND_EXPR, TREE_TYPE (result), object, result); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index dd4b2c206d6e..7f8d144c95ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,9 @@ 2010-06-04 Jakub Jelinek + PR c++/44412 + * g++.dg/warn/Wunused-var-10.C: New test. + * g++.dg/warn/Wunused-var-11.C: New test. + PR c++/44362 * c-c++-common/Wunused-var-10.c: New test. diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-10.C b/gcc/testsuite/g++.dg/warn/Wunused-var-10.C new file mode 100644 index 000000000000..ffdb89327907 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-10.C @@ -0,0 +1,42 @@ +// 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; // { dg-warning "set but not used" } + s.c = 6; +} + +int +f4 () +{ + S s; + s.c = 6; + return s.c; +} diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-11.C b/gcc/testsuite/g++.dg/warn/Wunused-var-11.C new file mode 100644 index 000000000000..c7c1bf35ff7b --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-11.C @@ -0,0 +1,33 @@ +// 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 (); +}