1*e6298b92Srillig /* $NetBSD: msg_159.c,v 1.7 2023/07/07 19:45:22 rillig Exp $ */
2a0a15c14Srillig # 3 "msg_159.c"
3a0a15c14Srillig
4a0a15c14Srillig // Test for message: assignment in conditional context [159]
5a0a15c14Srillig
6*e6298b92Srillig /* lint1-extra-flags: -h -X 351 */
7d9029d56Srillig
8d9029d56Srillig const char *
example(int a,int b)9d9029d56Srillig example(int a, int b)
10d9029d56Srillig {
11d9029d56Srillig
12d9029d56Srillig if (a == b)
13d9029d56Srillig return "comparison, not parenthesized";
14d9029d56Srillig
1583d27b7dSrillig /*
1683d27b7dSrillig * Clang-Tidy marks a comparison with extra parentheses as an error,
1783d27b7dSrillig * expecting that assignments are parenthesized and comparisons
1883d27b7dSrillig * aren't.
1983d27b7dSrillig */
20d9029d56Srillig if ((a == b))
21d9029d56Srillig return "comparison, parenthesized";
22d9029d56Srillig
23d9029d56Srillig if (
240e61302aSrillig # 25 "msg_159.c" 3 4
25d9029d56Srillig (a == b)
260e61302aSrillig # 27 "msg_159.c"
27d9029d56Srillig )
28d9029d56Srillig return "comparison, parenthesized, from system header";
29d9029d56Srillig
30d9029d56Srillig /* expect+1: warning: assignment in conditional context [159] */
31d9029d56Srillig if (a = b)
32d9029d56Srillig return "assignment, not parenthesized";
33d9029d56Srillig
34d9029d56Srillig /*
3583d27b7dSrillig * GCC established the convention that an assignment that is
3683d27b7dSrillig * parenthesized is intended as an assignment, so don't warn about
3783d27b7dSrillig * that case.
38d9029d56Srillig */
39d9029d56Srillig if ((a = b))
40d9029d56Srillig return "assignment, parenthesized";
41d9029d56Srillig
42d9029d56Srillig if ((a = b) != 0)
43d9029d56Srillig return "explicit comparison after assignment";
44d9029d56Srillig
45d9029d56Srillig return "other";
46d9029d56Srillig }
47