From dddf9a0a085e2d14aee9ada04326cc2259ee8978 Mon Sep 17 00:00:00 2001 From: Andrew Pinski Date: Sun, 16 Oct 2005 21:13:11 +0000 Subject: [PATCH] re PR c++/23959 (-Wswitch-default reports missing default in a template that has one) 2005-10-16 Andrew Pinski PR c++/23959 * decl.c (pop_switch): Only call c_do_switch_warnings when not processing templates. 2005-10-16 Andrew Pinski PR c++/23959 * g++.dg/warn/Wswitch-default-1.C: New test. * g++.dg/warn/Wswitch-default-2.C: New test. From-SVN: r105466 --- gcc/cp/ChangeLog | 6 +++++ gcc/cp/decl.c | 7 +++--- gcc/testsuite/ChangeLog | 6 +++++ gcc/testsuite/g++.dg/warn/Wswitch-default-1.C | 22 +++++++++++++++++++ gcc/testsuite/g++.dg/warn/Wswitch-default-2.C | 21 ++++++++++++++++++ 5 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Wswitch-default-1.C create mode 100644 gcc/testsuite/g++.dg/warn/Wswitch-default-2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 97a35a4b11f..022cad3a127 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-10-16 Andrew Pinski + + PR c++/23959 + * decl.c (pop_switch): Only call c_do_switch_warnings + when not processing templates. + 2005-10-16 Mark Mitchell PR c++/22173 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 56c2d4da765..eafebc188b3 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 ecdd049cfd0..034df789092 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-10-16 Andrew Pinski + + 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 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 00000000000..2236ae531e2 --- /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 +void foo( ) +{ + int i = 0; + + switch ( i ) /* { dg-bogus "switch missing default case" } */ + { + case 9: + default: + break; + } +} + +void f() +{ + foo(); +} 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 00000000000..832f867e079 --- /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 +void foo( ) +{ + int i = 0; + + switch ( i ) /* { dg-warning "switch missing default case" } */ + { + case 9: + break; + } +} + +void f() +{ + foo(); +} -- 2.30.2