11.2Srillig/* $NetBSD: msg_382.c,v 1.2 2025/04/12 17:22:50 rillig Exp $ */ 21.1Srillig# 3 "msg_382.c" 31.1Srillig 41.2Srillig// Test for message: constant assignment of type '%s' in operand of '%s' always evaluates to '%s' [382] 51.1Srillig 61.1Srillig/* 71.1Srillig * Outside strict bool mode, an assignment can be used as a condition, but 81.1Srillig * that is generally wrong. Especially if a constant is assigned to a 91.1Srillig * variable, the condition always evaluates to that constant value, which 101.1Srillig * indicates a typo, as '==' makes more sense than '=' in a condition. 111.1Srillig */ 121.1Srillig 131.1Srillig/* lint1-extra-flags: -X 351 */ 141.1Srillig 151.1Srilligint 161.1Srilligconversions(int a, int b) 171.1Srillig{ 181.1Srillig /* expect+1: warning: constant assignment of type 'int' in operand of '!' always evaluates to 'true' [382] */ 191.1Srillig if (!(a = 13)) 201.1Srillig return 1; 211.1Srillig /* expect+1: warning: constant assignment of type 'int' in operand of '!' always evaluates to 'false' [382] */ 221.1Srillig if (!(b = 0)) 231.1Srillig return 2; 241.1Srillig if (!(a = a + 1)) 251.1Srillig return 3; 261.2Srillig 271.2Srillig /* expect+1: warning: constant assignment of type 'int' in operand of '&&' always evaluates to 'true' [382] */ 281.2Srillig if ((a = 13) && (b == 14)) 291.2Srillig return 4; 301.2Srillig /* expect+1: warning: constant assignment of type 'int' in operand of '&&' always evaluates to 'true' [382] */ 311.2Srillig if ((a == 13) && (b = 14)) 321.2Srillig return 5; 331.2Srillig 341.2Srillig /* expect+1: warning: constant assignment of type 'int' in operand of '||' always evaluates to 'true' [382] */ 351.2Srillig if ((a = 13) || (b == 14)) 361.2Srillig return 4; 371.2Srillig /* expect+1: warning: constant assignment of type 'int' in operand of '||' always evaluates to 'true' [382] */ 381.2Srillig if ((a == 13) || (b = 14)) 391.2Srillig return 5; 401.2Srillig 411.1Srillig return a; 421.1Srillig} 43