Home | History | Annotate | Line # | Download | only in lint1
msg_220.c revision 1.9
      1  1.9    rillig /*	$NetBSD: msg_220.c,v 1.9 2023/03/28 14:44:35 rillig Exp $	*/
      2  1.1    rillig # 3 "msg_220.c"
      3  1.1    rillig 
      4  1.1    rillig // Test for message: fallthrough on case statement [220]
      5  1.1    rillig 
      6  1.9    rillig /* lint1-extra-flags: -h -X 351 */
      7  1.2    rillig 
      8  1.2    rillig extern void
      9  1.2    rillig println(const char *);
     10  1.2    rillig 
     11  1.2    rillig void
     12  1.2    rillig example(int n)
     13  1.2    rillig {
     14  1.2    rillig 	switch (n) {
     15  1.2    rillig 	case 1:
     16  1.2    rillig 	case 3:
     17  1.2    rillig 	case 5:
     18  1.2    rillig 		println("odd");
     19  1.8    rillig 		/* expect+1: warning: fallthrough on case statement [220] */
     20  1.8    rillig 	case 2:
     21  1.2    rillig 	case 7:
     22  1.2    rillig 		println("prime");
     23  1.8    rillig 		/* expect+1: warning: fallthrough on default statement [284] */
     24  1.8    rillig 	default:
     25  1.2    rillig 		println("number");
     26  1.2    rillig 	}
     27  1.2    rillig }
     28  1.3  christos 
     29  1.3  christos void
     30  1.3  christos example1(int n)
     31  1.3  christos {
     32  1.3  christos 	switch (n) {
     33  1.3  christos 	case 1:
     34  1.3  christos 	case 3:
     35  1.3  christos 	case 5:
     36  1.3  christos 		println("odd");
     37  1.3  christos 		__attribute__((__fallthrough__));
     38  1.3  christos 	case 2:
     39  1.3  christos 	case 7:
     40  1.3  christos 		println("prime");
     41  1.3  christos 		__attribute__((__fallthrough__));
     42  1.3  christos 	default:
     43  1.3  christos 		println("number");
     44  1.3  christos 	}
     45  1.3  christos }
     46  1.4    rillig 
     47  1.4    rillig /* https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wimplicit-fallthrough */
     48  1.4    rillig void
     49  1.4    rillig annotation_comment_variations(int n)
     50  1.4    rillig {
     51  1.4    rillig 	switch (n) {
     52  1.4    rillig 	case 0:
     53  1.4    rillig 		println("0");
     54  1.4    rillig 		/* FALLTHROUGH */
     55  1.4    rillig 	case 1:
     56  1.4    rillig 		println("1");
     57  1.7    rillig 		/* Seen in libarchive/archive_string.c, macro WRITE_UC. */
     58  1.4    rillig 		/* FALL THROUGH */
     59  1.7    rillig 		/* Lint warned before lex.c 1.79 from 2021-08-29. */
     60  1.4    rillig 	case 2:
     61  1.4    rillig 		println("2");
     62  1.4    rillig 		/* FALLS THROUGH */
     63  1.4    rillig 		/* expect+1: warning: fallthrough on case statement [220] */
     64  1.4    rillig 	case 3:
     65  1.4    rillig 		println("3");
     66  1.4    rillig 		/* intentionally falls through */
     67  1.4    rillig 		/* expect+1: warning: fallthrough on case statement [220] */
     68  1.4    rillig 	case 4:
     69  1.4    rillig 		println("4");
     70  1.7    rillig 		/* This is the Splint variant, which is seldom used. */
     71  1.4    rillig 		/* @fallthrough@ */
     72  1.4    rillig 		/* expect+1: warning: fallthrough on case statement [220] */
     73  1.4    rillig 	case 5:
     74  1.4    rillig 		println("5");
     75  1.7    rillig 		/* Seen in unbound/lookup3.c, function hashlittle. */
     76  1.7    rillig 		/* Lint warned before lex.c 1.80 from 2021-08-29. */
     77  1.6    rillig 		/* fallthrough */
     78  1.6    rillig 	case 6:
     79  1.6    rillig 		println("6");
     80  1.4    rillig 	}
     81  1.4    rillig }
     82