msg_161.c revision 1.5
11.5Srillig/*	$NetBSD: msg_161.c,v 1.5 2021/02/28 03:29:12 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.2Srillig		continue;
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.5Srilligvoid
471.5Srilligtest_sizeof(void)
481.5Srillig{
491.5Srillig	/*
501.5Srillig	 * XXX: The following conditions should not need CONSTCOND as they
511.5Srillig	 * are perfectly legitimate.
521.5Srillig	 */
531.5Srillig	if (sizeof(int) > sizeof(char))		/* expect: 161 */
541.5Srillig		println("very probable");
551.5Srillig	if (sizeof(int) < sizeof(char))		/* expect: 161 */
561.5Srillig		println("impossible");
571.5Srillig}
58