2002-08-14 Gabriel Dos Reis Fix PR/7566 * c-semantics.c (genrtl_case_label): Don't (mis)use warning_with_decl. 2005-01-03 Jakub Jelinek * g++.dg/parse/jumptocaselab1.C: New test. --- gcc/c-semantics.c.jj 2003-01-17 18:31:04.000000000 +0100 +++ gcc/c-semantics.c 2005-01-03 10:19:51.912155689 +0100 @@ -673,8 +673,7 @@ genrtl_case_label (case_label) if (cleanup) { static int explained = 0; - warning_with_decl (TREE_PURPOSE (cleanup), - "destructor needed for `%#D'"); + warning ("destructor needed for `%#D'", TREE_PURPOSE (cleanup)); warning ("where case label appears here"); if (!explained) { --- gcc/testsuite/g++.dg/parse/jumptocaselab1.C.jj 2005-01-03 10:23:45.286072690 +0100 +++ gcc/testsuite/g++.dg/parse/jumptocaselab1.C 2005-01-03 10:26:29.216516818 +0100 @@ -0,0 +1,19 @@ +// PR c++/7566 +// { dg-do compile } + +struct bar { bar (); ~bar ();}; + +void foo (int c) +{ + switch (c) + { + case 0: + case 1: + bar x; // { dg-error "crosses initialization" } + break; + default: // { dg-error "jump to case label" } + break; + } +} + +// { dg-warning "destructor needed|where case label|enclose actions" "" { target *-*-* } 14 }