/* $NetBSD: msg_382.c,v 1.2 2025/04/12 17:22:50 rillig Exp $ */ # 3 "msg_382.c" // Test for message: constant assignment of type '%s' in operand of '%s' always evaluates to '%s' [382] /* * Outside strict bool mode, an assignment can be used as a condition, but * that is generally wrong. Especially if a constant is assigned to a * variable, the condition always evaluates to that constant value, which * indicates a typo, as '==' makes more sense than '=' in a condition. */ /* lint1-extra-flags: -X 351 */ int conversions(int a, int b) { /* expect+1: warning: constant assignment of type 'int' in operand of '!' always evaluates to 'true' [382] */ if (!(a = 13)) return 1; /* expect+1: warning: constant assignment of type 'int' in operand of '!' always evaluates to 'false' [382] */ if (!(b = 0)) return 2; if (!(a = a + 1)) return 3; /* expect+1: warning: constant assignment of type 'int' in operand of '&&' always evaluates to 'true' [382] */ if ((a = 13) && (b == 14)) return 4; /* expect+1: warning: constant assignment of type 'int' in operand of '&&' always evaluates to 'true' [382] */ if ((a == 13) && (b = 14)) return 5; /* expect+1: warning: constant assignment of type 'int' in operand of '||' always evaluates to 'true' [382] */ if ((a = 13) || (b == 14)) return 4; /* expect+1: warning: constant assignment of type 'int' in operand of '||' always evaluates to 'true' [382] */ if ((a == 13) || (b = 14)) return 5; return a; }