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