diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3b5f1bd82de..a7df7b8b1c6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2010-06-28 Jakub Jelinek + + PR c++/44682 + * class.c (build_base_path): If want_pointer, call mark_rvalue_use + on expr. + 2010-06-28 Steven Bosscher * init.c: Do not include except.h. diff --git a/gcc/cp/class.c b/gcc/cp/class.c index f945923ddc4..51f749f61b0 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -283,6 +283,8 @@ build_base_path (enum tree_code code, if (!want_pointer) /* This must happen before the call to save_expr. */ expr = cp_build_unary_op (ADDR_EXPR, expr, 0, tf_warning_or_error); + else + mark_rvalue_use (expr); offset = BINFO_OFFSET (binfo); fixed_type_p = resolves_to_fixed_type_p (expr, &nonnull); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5f0ea3fbd1e..e3558942969 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-06-28 Jakub Jelinek + + PR c++/44682 + * g++.dg/warn/Wunused-var-14.C: New test. + 2010-06-28 Tobias Burnus PR fortran/43298 diff --git a/gcc/testsuite/g++.dg/warn/Wunused-var-14.C b/gcc/testsuite/g++.dg/warn/Wunused-var-14.C new file mode 100644 index 00000000000..a552b56dad1 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-var-14.C @@ -0,0 +1,17 @@ +// PR c++/44682 +// { dg-do compile } +// { dg-options "-Wunused" } + +struct S { virtual ~S () {} }; +struct T { virtual ~T () {} }; +struct U : S, T {}; + +void f (U &); + +void +g (void *v) +{ + T *t = static_cast (v); + U *u = static_cast (t); + f (*u); +}