aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2005-10-16 21:13:11 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2005-10-16 14:13:11 -0700
commitdddf9a0a085e2d14aee9ada04326cc2259ee8978 (patch)
treefcf84681133a792ef1ab8dad9656bc93e33a864d /gcc
parent5bf8b82d52a4192b4db5e38eade75108bc9da1a9 (diff)
downloadgcc-dddf9a0a085e2d14aee9ada04326cc2259ee8978.zip
gcc-dddf9a0a085e2d14aee9ada04326cc2259ee8978.tar.gz
gcc-dddf9a0a085e2d14aee9ada04326cc2259ee8978.tar.bz2
re PR c++/23959 (-Wswitch-default reports missing default in a template that has one)
2005-10-16 Andrew Pinski <pinskia@physics.uc.edu> PR c++/23959 * decl.c (pop_switch): Only call c_do_switch_warnings when not processing templates. 2005-10-16 Andrew Pinski <pinskia@physics.uc.edu> PR c++/23959 * g++.dg/warn/Wswitch-default-1.C: New test. * g++.dg/warn/Wswitch-default-2.C: New test. From-SVN: r105466
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/warn/Wswitch-default-1.C22
-rw-r--r--gcc/testsuite/g++.dg/warn/Wswitch-default-2.C21
5 files changed, 59 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 97a35a4..022cad3 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-16 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/23959
+ * decl.c (pop_switch): Only call c_do_switch_warnings
+ when not processing templates.
+
2005-10-16 Mark Mitchell <mark@codesourcery.com>
PR c++/22173
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 56c2d4d..eafebc1 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -2415,9 +2415,10 @@ pop_switch (void)
switch_location = EXPR_LOCATION (cs->switch_stmt);
else
switch_location = input_location;
- c_do_switch_warnings (cs->cases, switch_location,
- SWITCH_STMT_TYPE (cs->switch_stmt),
- SWITCH_STMT_COND (cs->switch_stmt));
+ if (!processing_template_decl)
+ c_do_switch_warnings (cs->cases, switch_location,
+ SWITCH_STMT_TYPE (cs->switch_stmt),
+ SWITCH_STMT_COND (cs->switch_stmt));
splay_tree_delete (cs->cases);
switch_stack = switch_stack->next;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ecdd049..034df78 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-16 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR c++/23959
+ * g++.dg/warn/Wswitch-default-1.C: New test.
+ * g++.dg/warn/Wswitch-default-2.C: New test.
+
2005-10-16 Mark Mitchell <mark@codesourcery.com>
PR c++/22173
diff --git a/gcc/testsuite/g++.dg/warn/Wswitch-default-1.C b/gcc/testsuite/g++.dg/warn/Wswitch-default-1.C
new file mode 100644
index 0000000..2236ae5
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wswitch-default-1.C
@@ -0,0 +1,22 @@
+// PR C++/21123
+/* { dg-do compile } */
+/* { dg-options "-Wswitch-default" } */
+
+
+template <typename ArrayType>
+void foo( )
+{
+ int i = 0;
+
+ switch ( i ) /* { dg-bogus "switch missing default case" } */
+ {
+ case 9:
+ default:
+ break;
+ }
+}
+
+void f()
+{
+ foo<int>();
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wswitch-default-2.C b/gcc/testsuite/g++.dg/warn/Wswitch-default-2.C
new file mode 100644
index 0000000..832f867
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wswitch-default-2.C
@@ -0,0 +1,21 @@
+// PR C++/21123
+/* { dg-do compile } */
+/* { dg-options "-Wswitch-default" } */
+
+
+template <typename ArrayType>
+void foo( )
+{
+ int i = 0;
+
+ switch ( i ) /* { dg-warning "switch missing default case" } */
+ {
+ case 9:
+ break;
+ }
+}
+
+void f()
+{
+ foo<int>();
+}