msg_161.c revision 1.7
11.7Srillig/*	$NetBSD: msg_161.c,v 1.7 2021/03/21 15:44:57 rillig Exp $	*/
21.1Srillig# 3 "msg_161.c"
31.1Srillig
41.1Srillig// Test for message: constant in conditional context [161]
51.1Srillig
61.2Srillig/* lint1-extra-flags: -h */
71.2Srillig
81.2Srilligvoid
91.2Srilligwhile_1(void)
101.2Srillig{
111.3Srillig	while (1)		/* expect: 161 */
121.2Srillig		continue;
131.2Srillig}
141.2Srillig
151.2Srilligvoid
161.2Srilligwhile_0(void)
171.2Srillig{
181.3Srillig	while (0)		/* expect: 161 */
191.7Srillig		continue;	/* expect: statement not reached */
201.2Srillig}
211.2Srillig
221.2Srillig/*
231.2Srillig * The pattern 'do { } while (0)' is a common technique to define a
241.2Srillig * preprocessor macro that behaves like a single statement.  There is
251.2Srillig * nothing unusual or surprising about the constant condition.
261.4Srillig * Before tree.c 1.202 from 2021-01-31, lint warned about it.
271.2Srillig */
281.2Srilligvoid
291.2Srilligdo_while_0(void)
301.2Srillig{
311.2Srillig	do {
321.2Srillig
331.4Srillig	} while (0);
341.2Srillig}
351.2Srillig
361.2Srilligvoid
371.2Srilligdo_while_1(void)
381.2Srillig{
391.2Srillig	do {
401.2Srillig
411.3Srillig	} while (1);		/* expect: 161 */
421.2Srillig}
431.5Srillig
441.5Srilligextern void println(const char *);
451.5Srillig
461.6Srillig/*
471.6Srillig * Since 2021-02-28, lint no longer warns about constant controlling
481.6Srillig * expressions involving sizeof since these are completely legitimate.
491.6Srillig */
501.5Srilligvoid
511.5Srilligtest_sizeof(void)
521.5Srillig{
531.6Srillig	if (sizeof(int) > sizeof(char))
541.5Srillig		println("very probable");
551.6Srillig	if (sizeof(int) < sizeof(char))
561.5Srillig		println("impossible");
571.5Srillig}
58