aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIan Lance Taylor <ian@airs.com>2005-10-11 23:30:57 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2005-10-11 23:30:57 +0000
commit55792875db8332861380d621fc5a2877c5cc2617 (patch)
tree3007b19208ae47725cf5bc26f0466ed5c6e88769 /gcc
parent0257e3837eb84c9f288c39cfbb3caa41badf9e3b (diff)
downloadgcc-55792875db8332861380d621fc5a2877c5cc2617.zip
gcc-55792875db8332861380d621fc5a2877c5cc2617.tar.gz
gcc-55792875db8332861380d621fc5a2877c5cc2617.tar.bz2
re PR c++/8057 (Templates/non-templates and warnings about statements without effects)
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. From-SVN: r105273
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/cvt.c5
-rw-r--r--gcc/testsuite/ChangeLog8
-rw-r--r--gcc/testsuite/g++.dg/warn/noeffect2.C2
-rw-r--r--gcc/testsuite/g++.dg/warn/noeffect4.C6
-rw-r--r--gcc/testsuite/g++.dg/warn/noeffect7.C8
6 files changed, 31 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 99ea5ec..a544cfa 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-11 Ian Lance Taylor <ian@airs.com>
+
+ PR c++/8057
+ * cvt.c (convert_to_void): Don't warn about unused values when
+ processing a template declaration.
+
2005-10-11 Mark Mitchell <mark@codesourcery.com>
PR c++/21089
diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c
index ac24e0a..ea3c496 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 b626cdd..39ea01a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2005-10-11 Ian Lance Taylor <ian@airs.com>
+
+ 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 <mark@codesourcery.com>
PR c++/21089
diff --git a/gcc/testsuite/g++.dg/warn/noeffect2.C b/gcc/testsuite/g++.dg/warn/noeffect2.C
index 7bd2925..69adf39 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<int>; // { dg-warning "instantiated" }
template <class T>
void f() { FormatDisk(), 0; } // { dg-warning "right-hand operand of comma" "" }
+ template void f<int> (); // { 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 a4c46da..7b051dd 100644
--- a/gcc/testsuite/g++.dg/warn/noeffect4.C
+++ b/gcc/testsuite/g++.dg/warn/noeffect4.C
@@ -76,13 +76,13 @@ template<int I> void Foo (X &x)
x->m;
static_cast<int> (x);
dynamic_cast<Y &> (x);
- reinterpret_cast<int> (x.Foo ());
- const_cast<X &> (x.Foo ());
+ reinterpret_cast<int> (x.Foo ()); // { dg-error "invalid cast" }
+ const_cast<X &> (x.Foo ()); // { dg-warning "not used" }
reinterpret_cast<int *> (&x);// { dg-warning "no effect" "" }
const_cast<X &> (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 0000000..4aca249
--- /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 <typename T> class X { X() { Y::i; }; };
+class Z { Z() { Y::i; }; }; // { dg-warning "no effect" }