Home | History | Annotate | Line # | Download | only in lint1
msg_193.c revision 1.13
      1  1.13  rillig /*	$NetBSD: msg_193.c,v 1.13 2021/08/15 21:21:13 rillig Exp $	*/
      2   1.1  rillig # 3 "msg_193.c"
      3   1.1  rillig 
      4   1.1  rillig // Test for message: statement not reached [193]
      5   1.1  rillig 
      6   1.3  rillig /*
      7   1.3  rillig  * Test the reachability of statements in a function.
      8   1.3  rillig  *
      9   1.3  rillig  *	if
     10   1.3  rillig  *	if-else
     11   1.3  rillig  *	if-else-if-else
     12   1.3  rillig  *	for
     13   1.3  rillig  *	while
     14   1.3  rillig  *	do-while
     15   1.3  rillig  *	switch
     16   1.3  rillig  *	break
     17   1.3  rillig  *	continue
     18   1.3  rillig  *	goto
     19   1.3  rillig  *	return
     20   1.3  rillig  *
     21   1.3  rillig  *	constant expression
     22   1.3  rillig  *	system-dependent constant expression
     23   1.3  rillig  */
     24   1.3  rillig 
     25  1.10  rillig extern void reachable(void);
     26  1.10  rillig extern void unreachable(void);
     27  1.10  rillig extern _Bool maybe(void);
     28  1.10  rillig 
     29   1.3  rillig 
     30   1.3  rillig void
     31   1.3  rillig test_statement(void)
     32   1.3  rillig {
     33   1.3  rillig 	reachable();
     34   1.3  rillig 	reachable();
     35   1.3  rillig }
     36   1.3  rillig 
     37   1.3  rillig void
     38   1.3  rillig test_compound_statement(void)
     39   1.3  rillig {
     40   1.3  rillig 	reachable();
     41   1.3  rillig 	{
     42   1.3  rillig 		reachable();
     43   1.3  rillig 		reachable();
     44   1.3  rillig 	}
     45   1.3  rillig 	reachable();
     46   1.3  rillig }
     47   1.3  rillig 
     48   1.3  rillig void
     49   1.3  rillig test_if_statement(void)
     50   1.3  rillig {
     51   1.3  rillig 	if (1)
     52   1.3  rillig 		reachable();
     53   1.3  rillig 	reachable();
     54   1.3  rillig 	if (0)
     55   1.4  rillig 		unreachable();		/* expect: 193 */
     56   1.3  rillig 	reachable();
     57   1.3  rillig }
     58   1.3  rillig 
     59   1.3  rillig void
     60   1.3  rillig test_if_compound_statement(void)
     61   1.3  rillig {
     62   1.3  rillig 	if (1) {
     63   1.3  rillig 		reachable();
     64   1.3  rillig 	}
     65   1.3  rillig 	if (1) {
     66   1.3  rillig 		{
     67   1.3  rillig 			{
     68   1.3  rillig 				reachable();
     69   1.3  rillig 			}
     70   1.3  rillig 		}
     71   1.3  rillig 	}
     72   1.3  rillig 
     73   1.3  rillig 	if (0) {
     74   1.4  rillig 		unreachable();		/* expect: 193 */
     75   1.3  rillig 	}
     76   1.3  rillig 	if (0) {
     77   1.3  rillig 		{
     78   1.3  rillig 			{
     79   1.4  rillig 				unreachable();	/* expect: 193 */
     80   1.3  rillig 			}
     81   1.3  rillig 		}
     82   1.3  rillig 	}
     83   1.3  rillig }
     84   1.3  rillig 
     85   1.3  rillig void
     86   1.3  rillig test_if_without_else(void)
     87   1.3  rillig {
     88   1.3  rillig 	if (1)
     89   1.3  rillig 		reachable();
     90   1.3  rillig 	reachable();
     91   1.3  rillig 
     92   1.3  rillig 	if (0)
     93   1.4  rillig 		unreachable();		/* expect: 193 */
     94   1.3  rillig 	reachable();
     95   1.3  rillig }
     96   1.3  rillig 
     97   1.3  rillig void
     98   1.3  rillig test_if_with_else(void)
     99   1.3  rillig {
    100   1.3  rillig 	if (1)
    101   1.3  rillig 		reachable();
    102   1.3  rillig 	else
    103   1.4  rillig 		unreachable();		/* expect: 193 */
    104   1.3  rillig 	reachable();
    105   1.3  rillig 
    106   1.3  rillig 	if (0)
    107   1.4  rillig 		unreachable();		/* expect: 193 */
    108   1.3  rillig 	else
    109   1.3  rillig 		reachable();
    110   1.3  rillig 	reachable();
    111   1.3  rillig }
    112   1.3  rillig 
    113   1.3  rillig void
    114   1.3  rillig test_if_else_if_else(void)
    115   1.3  rillig {
    116   1.3  rillig 	if (1)
    117   1.3  rillig 		reachable();
    118   1.4  rillig 	else if (1)			/* expect: 193 */
    119   1.4  rillig 		unreachable();
    120   1.3  rillig 	else
    121   1.4  rillig 		unreachable();		/* expect: 193 */
    122   1.3  rillig 
    123   1.3  rillig 	if (0)
    124   1.4  rillig 		unreachable();		/* expect: 193 */
    125   1.3  rillig 	else if (1)
    126   1.3  rillig 		reachable();
    127   1.3  rillig 	else
    128   1.4  rillig 		unreachable();		/* expect: 193 */
    129   1.3  rillig 
    130   1.3  rillig 	if (0)
    131   1.4  rillig 		unreachable();		/* expect: 193 */
    132   1.3  rillig 	else if (0)
    133   1.4  rillig 		unreachable();		/* expect: 193 */
    134   1.3  rillig 	else
    135   1.3  rillig 		reachable();
    136   1.3  rillig }
    137   1.3  rillig 
    138   1.3  rillig void
    139   1.3  rillig test_if_return(void)
    140   1.3  rillig {
    141   1.3  rillig 	if (1)
    142   1.3  rillig 		return;
    143   1.5  rillig 	unreachable();			/* expect: 193 */
    144   1.3  rillig }
    145   1.3  rillig 
    146   1.3  rillig void
    147   1.3  rillig test_if_else_return(void)
    148   1.3  rillig {
    149   1.3  rillig 	if (1)
    150   1.3  rillig 		reachable();
    151   1.3  rillig 	else
    152   1.4  rillig 		return;			/* expect: 193 */
    153   1.3  rillig 	reachable();
    154   1.3  rillig }
    155   1.3  rillig 
    156   1.3  rillig void
    157   1.3  rillig test_for_forever(void)
    158   1.3  rillig {
    159   1.3  rillig 	for (;;)
    160   1.3  rillig 		reachable();
    161   1.3  rillig 	unreachable();			/* expect: 193 */
    162   1.3  rillig }
    163   1.3  rillig 
    164   1.3  rillig void
    165   1.3  rillig test_for_true(void)
    166   1.3  rillig {
    167   1.3  rillig 	for (; 1;)
    168   1.3  rillig 		reachable();
    169   1.3  rillig 	unreachable();			/* expect: 193 */
    170   1.3  rillig }
    171   1.3  rillig 
    172   1.3  rillig void
    173   1.3  rillig test_for_false(void)
    174   1.3  rillig {
    175   1.3  rillig 	for (; 0;)
    176   1.6  rillig 		unreachable();		/* expect: 193 */
    177   1.3  rillig 	reachable();
    178   1.3  rillig }
    179   1.3  rillig 
    180   1.3  rillig void
    181   1.3  rillig test_for_break(void)
    182   1.3  rillig {
    183   1.3  rillig 	for (;;) {
    184   1.3  rillig 		reachable();
    185   1.3  rillig 		break;
    186   1.3  rillig 		unreachable();		/* expect: 193 */
    187   1.3  rillig 	}
    188   1.3  rillig 	reachable();
    189   1.3  rillig }
    190   1.3  rillig 
    191   1.3  rillig void
    192   1.3  rillig test_for_if_break(void)
    193   1.3  rillig {
    194   1.3  rillig 	for (;;) {
    195   1.3  rillig 		reachable();
    196   1.3  rillig 		if (0) {
    197   1.4  rillig 			unreachable();	/* expect: 193 */
    198   1.3  rillig 			break;
    199   1.3  rillig 			unreachable();	/* expect: 193 */
    200   1.3  rillig 		}
    201   1.3  rillig 		if (1) {
    202   1.3  rillig 			reachable();
    203   1.3  rillig 			break;
    204   1.3  rillig 			unreachable();	/* expect: 193 */
    205   1.3  rillig 		}
    206   1.8  rillig 		unreachable();		/* expect: 193 */
    207   1.3  rillig 	}
    208   1.3  rillig 	reachable();
    209   1.3  rillig }
    210   1.3  rillig 
    211   1.3  rillig void
    212   1.3  rillig test_for_continue(void)
    213   1.3  rillig {
    214   1.3  rillig 	for (;;) {
    215   1.3  rillig 		reachable();
    216   1.3  rillig 		continue;
    217   1.3  rillig 		unreachable();		/* expect: 193 */
    218   1.3  rillig 	}
    219   1.3  rillig 	unreachable();			/* expect: 193 */
    220   1.3  rillig }
    221   1.3  rillig 
    222   1.3  rillig void
    223   1.3  rillig test_for_if_continue(void)
    224   1.3  rillig {
    225   1.3  rillig 	for (;;) {
    226   1.3  rillig 		reachable();
    227   1.3  rillig 		if (0) {
    228   1.4  rillig 			unreachable();	/* expect: 193 */
    229   1.3  rillig 			continue;
    230   1.3  rillig 			unreachable();	/* expect: 193 */
    231   1.3  rillig 		}
    232   1.3  rillig 		if (1) {
    233   1.3  rillig 			reachable();
    234   1.3  rillig 			continue;
    235   1.3  rillig 			unreachable();	/* expect: 193 */
    236   1.3  rillig 		}
    237   1.8  rillig 		unreachable();		/* expect: 193 */
    238   1.3  rillig 	}
    239   1.3  rillig 	unreachable();			/* expect: 193 */
    240   1.3  rillig }
    241   1.3  rillig 
    242   1.3  rillig void
    243   1.3  rillig test_for_return(void)
    244   1.2  rillig {
    245   1.3  rillig 	for (;;) {
    246   1.3  rillig 		reachable();
    247   1.3  rillig 		return;
    248   1.3  rillig 		unreachable();		/* expect: 193 */
    249   1.3  rillig 	}
    250   1.3  rillig 	unreachable();			/* expect: 193 */
    251   1.2  rillig }
    252   1.3  rillig 
    253   1.3  rillig void
    254   1.3  rillig test_for_if_return(void)
    255   1.3  rillig {
    256   1.3  rillig 	for (;;) {
    257   1.3  rillig 		reachable();
    258   1.3  rillig 		if (0) {
    259   1.4  rillig 			unreachable();	/* expect: 193 */
    260   1.3  rillig 			return;
    261   1.3  rillig 			unreachable();	/* expect: 193 */
    262   1.3  rillig 		}
    263   1.3  rillig 		if (1) {
    264   1.3  rillig 			reachable();
    265   1.3  rillig 			return;
    266   1.3  rillig 			unreachable();	/* expect: 193 */
    267   1.3  rillig 		}
    268   1.8  rillig 		unreachable();		/* expect: 193 */
    269   1.3  rillig 	}
    270   1.3  rillig 	unreachable();			/* expect: 193 */
    271   1.3  rillig }
    272   1.3  rillig 
    273   1.3  rillig void
    274   1.3  rillig test_while_true(void)
    275   1.3  rillig {
    276   1.3  rillig 	while (1)
    277   1.3  rillig 		reachable();
    278   1.3  rillig 	unreachable();			/* expect: 193 */
    279   1.3  rillig }
    280   1.3  rillig 
    281   1.3  rillig void
    282   1.3  rillig test_while_false(void)
    283   1.3  rillig {
    284   1.3  rillig 	while (0)
    285   1.7  rillig 		unreachable();		/* expect: 193 */
    286   1.3  rillig 	reachable();
    287   1.3  rillig }
    288   1.3  rillig 
    289   1.3  rillig void
    290   1.3  rillig test_while_break(void)
    291   1.3  rillig {
    292   1.3  rillig 	while (1) {
    293   1.3  rillig 		reachable();
    294   1.3  rillig 		break;
    295   1.3  rillig 		unreachable();		/* expect: 193 */
    296   1.3  rillig 	}
    297   1.3  rillig 	reachable();
    298   1.3  rillig }
    299   1.3  rillig 
    300   1.3  rillig void
    301   1.3  rillig test_while_if_break(void)
    302   1.3  rillig {
    303   1.3  rillig 	while (1) {
    304   1.3  rillig 		reachable();
    305   1.3  rillig 		if (0) {
    306   1.4  rillig 			unreachable();	/* expect: 193 */
    307   1.3  rillig 			break;
    308   1.3  rillig 			unreachable();	/* expect: 193 */
    309   1.3  rillig 		}
    310   1.3  rillig 		if (1) {
    311   1.3  rillig 			reachable();
    312   1.3  rillig 			break;
    313   1.3  rillig 			unreachable();	/* expect: 193 */
    314   1.3  rillig 		}
    315   1.8  rillig 		unreachable();		/* expect: 193 */
    316   1.3  rillig 	}
    317   1.3  rillig 	reachable();
    318   1.3  rillig }
    319   1.3  rillig 
    320   1.3  rillig void
    321   1.3  rillig test_while_continue(void)
    322   1.3  rillig {
    323   1.3  rillig 	while (1) {
    324   1.3  rillig 		reachable();
    325   1.3  rillig 		continue;
    326   1.3  rillig 		unreachable();		/* expect: 193 */
    327   1.3  rillig 	}
    328   1.3  rillig 	unreachable();			/* expect: 193 */
    329   1.3  rillig }
    330   1.3  rillig 
    331   1.3  rillig void
    332   1.3  rillig test_while_if_continue(void)
    333   1.3  rillig {
    334   1.3  rillig 	while (1) {
    335   1.3  rillig 		reachable();
    336   1.3  rillig 		if (0) {
    337   1.4  rillig 			unreachable();	/* expect: 193 */
    338   1.3  rillig 			continue;
    339   1.3  rillig 			unreachable();	/* expect: 193 */
    340   1.3  rillig 		}
    341   1.3  rillig 		if (1) {
    342   1.3  rillig 			reachable();
    343   1.3  rillig 			continue;
    344   1.3  rillig 			unreachable();	/* expect: 193 */
    345   1.3  rillig 		}
    346   1.8  rillig 		unreachable();		/* expect: 193 */
    347   1.3  rillig 	}
    348   1.3  rillig 	unreachable();			/* expect: 193 */
    349   1.3  rillig }
    350   1.3  rillig 
    351   1.3  rillig void
    352   1.3  rillig test_while_return(void)
    353   1.3  rillig {
    354   1.3  rillig 	while (1) {
    355   1.3  rillig 		reachable();
    356   1.3  rillig 		return;
    357   1.3  rillig 		unreachable();		/* expect: 193 */
    358   1.3  rillig 	}
    359   1.3  rillig 	unreachable();			/* expect: 193 */
    360   1.3  rillig }
    361   1.3  rillig 
    362   1.3  rillig void
    363   1.3  rillig test_while_if_return(void)
    364   1.3  rillig {
    365   1.3  rillig 	while (1) {
    366   1.3  rillig 		reachable();
    367   1.3  rillig 		if (0) {
    368   1.4  rillig 			unreachable();	/* expect: 193 */
    369   1.3  rillig 			return;
    370   1.3  rillig 			unreachable();	/* expect: 193 */
    371   1.3  rillig 		}
    372   1.3  rillig 		if (1) {
    373   1.3  rillig 			reachable();
    374   1.3  rillig 			return;
    375   1.3  rillig 			unreachable();	/* expect: 193 */
    376   1.3  rillig 		}
    377   1.8  rillig 		unreachable();		/* expect: 193 */
    378   1.3  rillig 	}
    379   1.3  rillig 	unreachable();			/* expect: 193 */
    380   1.3  rillig }
    381   1.3  rillig 
    382   1.3  rillig void
    383   1.3  rillig test_do_while_true(void)
    384   1.3  rillig {
    385   1.3  rillig 	do {
    386   1.3  rillig 		reachable();
    387   1.3  rillig 	} while (1);
    388   1.3  rillig 	unreachable();			/* expect: 193 */
    389   1.3  rillig }
    390   1.3  rillig 
    391   1.3  rillig void
    392   1.3  rillig test_do_while_false(void)
    393   1.3  rillig {
    394   1.3  rillig 	do {
    395   1.3  rillig 		reachable();
    396   1.3  rillig 	} while (0);
    397   1.3  rillig 	reachable();
    398   1.3  rillig }
    399   1.3  rillig 
    400   1.3  rillig void
    401   1.3  rillig test_do_while_break(void)
    402   1.3  rillig {
    403   1.3  rillig 	do {
    404   1.3  rillig 		reachable();
    405   1.3  rillig 		break;
    406   1.3  rillig 		unreachable();		/* expect: 193 */
    407   1.3  rillig 	} while (1);
    408   1.3  rillig 	reachable();
    409   1.3  rillig }
    410   1.3  rillig 
    411   1.3  rillig void
    412   1.3  rillig test_do_while_if_break(void)
    413   1.3  rillig {
    414   1.3  rillig 	do {
    415   1.3  rillig 		reachable();
    416   1.3  rillig 		if (0) {
    417   1.4  rillig 			unreachable();	/* expect: 193 */
    418   1.3  rillig 			break;
    419   1.3  rillig 			unreachable();	/* expect: 193 */
    420   1.3  rillig 		}
    421   1.3  rillig 		if (1) {
    422   1.3  rillig 			reachable();
    423   1.3  rillig 			break;
    424   1.3  rillig 			unreachable();	/* expect: 193 */
    425   1.3  rillig 		}
    426   1.8  rillig 		unreachable();		/* expect: 193 */
    427   1.3  rillig 	} while (1);
    428   1.3  rillig 	reachable();
    429   1.3  rillig }
    430   1.3  rillig 
    431   1.3  rillig void
    432   1.3  rillig test_do_while_continue(void)
    433   1.3  rillig {
    434   1.3  rillig 	do {
    435   1.3  rillig 		reachable();
    436   1.3  rillig 		continue;
    437   1.3  rillig 		unreachable();		/* expect: 193 */
    438   1.3  rillig 	} while (1);
    439   1.3  rillig 	unreachable();			/* expect: 193 */
    440   1.3  rillig }
    441   1.3  rillig 
    442   1.3  rillig void
    443   1.3  rillig test_do_while_if_continue(void)
    444   1.3  rillig {
    445   1.3  rillig 	do {
    446   1.3  rillig 		reachable();
    447   1.3  rillig 		if (0) {
    448   1.4  rillig 			unreachable();	/* expect: 193 */
    449   1.3  rillig 			continue;
    450   1.3  rillig 			unreachable();	/* expect: 193 */
    451   1.3  rillig 		}
    452   1.3  rillig 		if (1) {
    453   1.3  rillig 			reachable();
    454   1.3  rillig 			continue;
    455   1.3  rillig 			unreachable();	/* expect: 193 */
    456   1.3  rillig 		}
    457   1.8  rillig 		unreachable();		/* expect: 193 */
    458   1.3  rillig 	} while (1);
    459   1.3  rillig 	unreachable();			/* expect: 193 */
    460   1.3  rillig }
    461   1.3  rillig 
    462   1.3  rillig void
    463   1.3  rillig test_do_while_return(void)
    464   1.3  rillig {
    465   1.3  rillig 	do {
    466   1.3  rillig 		reachable();
    467   1.3  rillig 		return;
    468   1.3  rillig 		unreachable();		/* expect: 193 */
    469   1.3  rillig 	} while (1);
    470   1.3  rillig 	unreachable();			/* expect: 193 */
    471   1.3  rillig }
    472   1.3  rillig 
    473   1.3  rillig void
    474   1.3  rillig test_do_while_if_return(void)
    475   1.3  rillig {
    476   1.3  rillig 	do {
    477   1.3  rillig 		reachable();
    478   1.3  rillig 		if (0) {
    479   1.4  rillig 			unreachable();	/* expect: 193 */
    480   1.3  rillig 			return;
    481   1.3  rillig 			unreachable();	/* expect: 193 */
    482   1.3  rillig 		}
    483   1.3  rillig 		if (1) {
    484   1.3  rillig 			reachable();
    485   1.3  rillig 			return;
    486   1.3  rillig 			unreachable();	/* expect: 193 */
    487   1.3  rillig 		}
    488   1.8  rillig 		unreachable();		/* expect: 193 */
    489   1.3  rillig 	} while (1);
    490   1.3  rillig 	unreachable();			/* expect: 193 */
    491   1.3  rillig }
    492   1.3  rillig 
    493   1.9  rillig void
    494   1.9  rillig test_if_nested(void)
    495   1.9  rillig {
    496   1.9  rillig 	if (0) {
    497   1.9  rillig 		if (1)			/* expect: 193 */
    498   1.9  rillig 			unreachable();
    499   1.9  rillig 		else
    500   1.9  rillig 			unreachable();	/* expect: 193 *//* XXX: redundant */
    501   1.9  rillig 
    502   1.9  rillig 		if (0)
    503   1.9  rillig 			unreachable();	/* expect: 193 *//* XXX: redundant */
    504   1.9  rillig 		else
    505   1.9  rillig 			unreachable();
    506   1.9  rillig 
    507   1.9  rillig 		unreachable();
    508   1.9  rillig 	}
    509   1.9  rillig 	reachable();
    510   1.9  rillig 
    511   1.9  rillig 	if (1) {
    512   1.9  rillig 		if (1)
    513   1.9  rillig 			reachable();
    514   1.9  rillig 		else
    515   1.9  rillig 			unreachable();	/* expect: 193 */
    516   1.9  rillig 
    517   1.9  rillig 		if (0)
    518   1.9  rillig 			unreachable();	/* expect: 193 */
    519   1.9  rillig 		else
    520   1.9  rillig 			reachable();
    521   1.9  rillig 
    522   1.9  rillig 		reachable();
    523   1.9  rillig 	}
    524   1.9  rillig 	reachable();
    525   1.9  rillig }
    526   1.9  rillig 
    527  1.10  rillig void
    528  1.10  rillig test_if_maybe(void)
    529  1.10  rillig {
    530  1.10  rillig 	if (maybe()) {
    531  1.10  rillig 		if (0)
    532  1.10  rillig 			unreachable();	/* expect: 193 */
    533  1.10  rillig 		else
    534  1.10  rillig 			reachable();
    535  1.10  rillig 		reachable();
    536  1.10  rillig 	}
    537  1.10  rillig 	reachable();
    538  1.10  rillig 
    539  1.10  rillig 	if (0) {
    540  1.10  rillig 		if (maybe())		/* expect: 193 */
    541  1.10  rillig 			unreachable();
    542  1.10  rillig 		else
    543  1.10  rillig 			unreachable();
    544  1.10  rillig 		unreachable();
    545  1.10  rillig 	}
    546  1.10  rillig 	reachable();
    547  1.10  rillig 
    548  1.10  rillig 	if (1) {
    549  1.10  rillig 		if (maybe())
    550  1.10  rillig 			reachable();
    551  1.10  rillig 		else
    552  1.10  rillig 			reachable();
    553  1.10  rillig 		reachable();
    554  1.10  rillig 	}
    555  1.10  rillig 	reachable();
    556  1.10  rillig }
    557  1.10  rillig 
    558  1.11  rillig /*
    559  1.11  rillig  * To compute the reachability graph of this little monster, lint would have
    560  1.11  rillig  * to keep all statements and their relations from the whole function in
    561  1.11  rillig  * memory.  It doesn't do that.  Therefore it does not warn about any
    562  1.11  rillig  * unreachable statements in this function.
    563  1.11  rillig  */
    564  1.11  rillig void
    565  1.11  rillig test_goto_numbers_alphabetically(void)
    566  1.11  rillig {
    567  1.11  rillig 	goto one;
    568  1.11  rillig eight:
    569  1.11  rillig 	goto nine;
    570  1.11  rillig five:
    571  1.11  rillig 	return;
    572  1.11  rillig four:
    573  1.11  rillig 	goto five;
    574  1.11  rillig nine:
    575  1.11  rillig 	goto ten;
    576  1.11  rillig one:
    577  1.11  rillig 	goto two;
    578  1.11  rillig seven:
    579  1.11  rillig 	goto eight;
    580  1.12  rillig six:				/* expect: warning: label 'six' unused */
    581  1.11  rillig 	goto seven;
    582  1.11  rillig ten:
    583  1.11  rillig 	return;
    584  1.11  rillig three:
    585  1.11  rillig 	goto four;
    586  1.11  rillig two:
    587  1.11  rillig 	goto three;
    588  1.11  rillig }
    589  1.11  rillig 
    590  1.11  rillig void
    591  1.11  rillig test_while_goto(void)
    592  1.11  rillig {
    593  1.11  rillig 	while (1) {
    594  1.11  rillig 		goto out;
    595  1.11  rillig 		break;		/* lint only warns with the -b option */
    596  1.11  rillig 	}
    597  1.11  rillig 	unreachable();		/* expect: 193 */
    598  1.11  rillig out:
    599  1.11  rillig 	reachable();
    600  1.11  rillig }
    601  1.11  rillig 
    602  1.11  rillig void
    603  1.11  rillig test_unreachable_label(void)
    604  1.11  rillig {
    605  1.11  rillig 	if (0)
    606  1.11  rillig 		goto unreachable;	/* expect: 193 */
    607  1.11  rillig 	goto reachable;
    608  1.11  rillig 
    609  1.11  rillig 	/* named_label assumes that any label is reachable. */
    610  1.11  rillig unreachable:
    611  1.11  rillig 	unreachable();
    612  1.11  rillig reachable:
    613  1.11  rillig 	reachable();
    614  1.11  rillig }
    615  1.11  rillig 
    616   1.3  rillig /* TODO: switch */
    617   1.3  rillig 
    618   1.3  rillig /* TODO: system-dependent constant expression (see tn_system_dependent) */
    619  1.13  rillig 
    620  1.13  rillig void suppressed(void);
    621  1.13  rillig 
    622  1.13  rillig void
    623  1.13  rillig lint_annotation_NOTREACHED(void)
    624  1.13  rillig {
    625  1.13  rillig 	if (0) {
    626  1.13  rillig 		/* expect+1: warning: statement not reached [193] */
    627  1.13  rillig 		unreachable();
    628  1.13  rillig 	}
    629  1.13  rillig 
    630  1.13  rillig 	if (0) {
    631  1.13  rillig 		/* NOTREACHED */
    632  1.13  rillig 		suppressed();
    633  1.13  rillig 	}
    634  1.13  rillig 
    635  1.13  rillig 	if (0)
    636  1.13  rillig 		/* NOTREACHED */
    637  1.13  rillig 		suppressed();
    638  1.13  rillig 
    639  1.13  rillig 	if (1) {
    640  1.13  rillig 		reachable();
    641  1.13  rillig 	}
    642  1.13  rillig 
    643  1.13  rillig 	if (1) {
    644  1.13  rillig 		/* NOTREACHED */
    645  1.13  rillig 		suppressed();
    646  1.13  rillig 	}
    647  1.13  rillig 
    648  1.13  rillig 	/* FIXME: The 'if' statement _is_ reached. */
    649  1.13  rillig 	/* expect+1: warning: statement not reached [193] */
    650  1.13  rillig 	if (1)
    651  1.13  rillig 		/* NOTREACHED */
    652  1.13  rillig 		suppressed();
    653  1.13  rillig }
    654