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