xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_382.c (revision a53894b635e673440a046eb87c721c3a133147e7)
1*a53894b6Srillig /*	$NetBSD: msg_382.c,v 1.1 2024/07/10 20:33:38 rillig Exp $	*/
2*a53894b6Srillig # 3 "msg_382.c"
3*a53894b6Srillig 
4*a53894b6Srillig // Test for message: constant assignment of type '%s' in operand of '!' always evaluates to '%s' [382]
5*a53894b6Srillig 
6*a53894b6Srillig /*
7*a53894b6Srillig  * Outside strict bool mode, an assignment can be used as a condition, but
8*a53894b6Srillig  * that is generally wrong.  Especially if a constant is assigned to a
9*a53894b6Srillig  * variable, the condition always evaluates to that constant value, which
10*a53894b6Srillig  * indicates a typo, as '==' makes more sense than '=' in a condition.
11*a53894b6Srillig  */
12*a53894b6Srillig 
13*a53894b6Srillig /* lint1-extra-flags: -X 351 */
14*a53894b6Srillig 
15*a53894b6Srillig int
16*a53894b6Srillig /* expect+1: warning: parameter 'b' unused in function 'conversions' [231] */
conversions(int a,int b)17*a53894b6Srillig conversions(int a, int b)
18*a53894b6Srillig {
19*a53894b6Srillig 	/* expect+1: warning: constant assignment of type 'int' in operand of '!' always evaluates to 'true' [382] */
20*a53894b6Srillig 	if (!(a = 13))
21*a53894b6Srillig 		return 1;
22*a53894b6Srillig 	/* expect+1: warning: constant assignment of type 'int' in operand of '!' always evaluates to 'false' [382] */
23*a53894b6Srillig 	if (!(b = 0))
24*a53894b6Srillig 		return 2;
25*a53894b6Srillig 	if (!(a = a + 1))
26*a53894b6Srillig 		return 3;
27*a53894b6Srillig 	return a;
28*a53894b6Srillig }
29