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