msg_161.c revision 1.3
11.3Srillig/* $NetBSD: msg_161.c,v 1.3 2021/01/31 12:30:53 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.2Srillig * Still, lint warns about it. FIXME don't. 271.2Srillig */ 281.2Srilligvoid 291.2Srilligdo_while_0(void) 301.2Srillig{ 311.2Srillig do { 321.2Srillig 331.3Srillig } while (0); /* expect: 161 */ 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} 43