From 5e2a41336909f37826a7f599a2156add1019f97d Mon Sep 17 00:00:00 2001 From: ian Date: Tue, 11 Oct 2005 23:30:57 +0000 Subject: [PATCH] cp/ PR c++/8057 * cvt.c (convert_to_void): Don't warn about unused values when processing a template declaration. testsuite/ PR c++/8057 * g++.dg/warn/noeffect7.C: New test. * g++.dg/warn/noeffect2.C: Instantiate templates. * g++.dg/warn/noeffect4.C: Instantiate template. Add new error and warning. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105273 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/cvt.c | 5 ++++- gcc/testsuite/ChangeLog | 8 ++++++++ gcc/testsuite/g++.dg/warn/noeffect2.C | 2 ++ gcc/testsuite/g++.dg/warn/noeffect4.C | 6 +++--- gcc/testsuite/g++.dg/warn/noeffect7.C | 8 ++++++++ 6 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/noeffect7.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 99ea5ec6759..a544cfa392d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-10-11 Ian Lance Taylor + + PR c++/8057 + * cvt.c (convert_to_void): Don't warn about unused values when + processing a template declaration. + 2005-10-11 Mark Mitchell PR c++/21089 diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index ac24e0a5f34..ea3c496b6c7 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -910,7 +910,10 @@ convert_to_void (tree expr, const char *implicit) if (expr != error_mark_node && !VOID_TYPE_P (TREE_TYPE (expr))) { - if (implicit && warn_unused_value && !TREE_NO_WARNING (expr)) + if (implicit + && warn_unused_value + && !TREE_NO_WARNING (expr) + && !processing_template_decl) { /* The middle end does not warn about expressions that have been explicitly cast to void, so we must do so here. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b626cdd8019..39ea01a5e9c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2005-10-11 Ian Lance Taylor + + PR c++/8057 + * g++.dg/warn/noeffect7.C: New test. + * g++.dg/warn/noeffect2.C: Instantiate templates. + * g++.dg/warn/noeffect4.C: Instantiate template. Add new error + and warning. + 2005-10-11 Mark Mitchell PR c++/21089 diff --git a/gcc/testsuite/g++.dg/warn/noeffect2.C b/gcc/testsuite/g++.dg/warn/noeffect2.C index 7bd2925f542..69adf396367 100644 --- a/gcc/testsuite/g++.dg/warn/noeffect2.C +++ b/gcc/testsuite/g++.dg/warn/noeffect2.C @@ -12,7 +12,9 @@ extern "C" void FormatDisk(); struct C { C(){ FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" } }; + template struct C; // { dg-warning "instantiated" } template void f() { FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" } + template void f (); // { dg-warning "instantiated" } void g() { FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" } diff --git a/gcc/testsuite/g++.dg/warn/noeffect4.C b/gcc/testsuite/g++.dg/warn/noeffect4.C index a4c46dafbcc..7b051dd6766 100644 --- a/gcc/testsuite/g++.dg/warn/noeffect4.C +++ b/gcc/testsuite/g++.dg/warn/noeffect4.C @@ -76,13 +76,13 @@ template void Foo (X &x) x->m; static_cast (x); dynamic_cast (x); - reinterpret_cast (x.Foo ()); - const_cast (x.Foo ()); + reinterpret_cast (x.Foo ()); // { dg-error "invalid cast" } + const_cast (x.Foo ()); // { dg-warning "not used" } reinterpret_cast (&x);// { dg-warning "no effect" "" } const_cast (x); // { dg-warning "no effect" "" } sizeof (x++); // { dg-warning "no effect" "" } __alignof__ (x++); // { dg-warning "no effect" "" } } - +template void Foo<4> (X&); // { dg-warning "instantiated" } diff --git a/gcc/testsuite/g++.dg/warn/noeffect7.C b/gcc/testsuite/g++.dg/warn/noeffect7.C new file mode 100644 index 00000000000..4aca2496c5e --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/noeffect7.C @@ -0,0 +1,8 @@ +// PR c++/8057 +// Don't give a "statement has no effect" warning when declaring a +// template, only when instantiating it. +// { dg-do compile } +// { dg-options "-Wunused" } +struct Y { static int i; }; +template class X { X() { Y::i; }; }; +class Z { Z() { Y::i; }; }; // { dg-warning "no effect" } -- 2.11.4.GIT