|  | /* PR middle-end/103597 */ | 
|  | /* { dg-do compile } */ | 
|  | /* { dg-options "-Wimplicit-fallthrough" } */ | 
|  |  | 
|  | #define E(c, e) if (c) e | 
|  |  | 
|  | int | 
|  | fn0 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | E (1, return 0); | 
|  | case 1: | 
|  | return -1; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | fn1 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | E (1, goto out); | 
|  | case 1: | 
|  | return -1; | 
|  | } | 
|  | out: | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | fn2 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | if (1) | 
|  | n++;	  /* { dg-warning "statement may fall through" } */ | 
|  | case 1:	  /* { dg-message "here" } */ | 
|  | return -1; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | fn3 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | if (0)		/* { dg-warning "statement may fall through" } */ | 
|  | return 0; | 
|  | case 1:		/* { dg-message "here" } */ | 
|  | return -1; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | fn4 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | E (0, n++); | 
|  | --n;	  /* { dg-warning "statement may fall through" } */ | 
|  | case 1:	  /* { dg-message "here" } */ | 
|  | return -1; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | fn5 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | if (1) | 
|  | return 0; | 
|  | else | 
|  | return -1; | 
|  | case 1: | 
|  | return -1; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | fn6 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | if (1) | 
|  | return 0; | 
|  | else | 
|  | { | 
|  | meow: | 
|  | n--;  /* { dg-warning "statement may fall through" } */ | 
|  | } | 
|  | case 1:   /* { dg-message "here" } */ | 
|  | return -1; | 
|  | case 2: | 
|  | goto meow; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | fn7 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | if (1) | 
|  | return 0; | 
|  | woof: | 
|  | case 1: | 
|  | return -1; | 
|  | } | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | int | 
|  | fn8 (int n) | 
|  | { | 
|  | switch (n) | 
|  | { | 
|  | case 0: | 
|  | if (1) n++; /* { dg-warning "statement may fall through" } */ | 
|  | woof:		  /* { dg-message "here" } */ | 
|  | case 1: | 
|  | return -1; | 
|  | } | 
|  | return 0; | 
|  | } |