11.7Srillig/*	$NetBSD: msg_159.c,v 1.7 2023/07/07 19:45:22 rillig Exp $	*/
21.1Srillig# 3 "msg_159.c"
31.1Srillig
41.1Srillig// Test for message: assignment in conditional context [159]
51.1Srillig
61.7Srillig/* lint1-extra-flags: -h -X 351 */
71.4Srillig
81.4Srilligconst char *
91.4Srilligexample(int a, int b)
101.4Srillig{
111.4Srillig
121.4Srillig	if (a == b)
131.4Srillig		return "comparison, not parenthesized";
141.4Srillig
151.5Srillig	/*
161.5Srillig	 * Clang-Tidy marks a comparison with extra parentheses as an error,
171.5Srillig	 * expecting that assignments are parenthesized and comparisons
181.5Srillig	 * aren't.
191.5Srillig	 */
201.4Srillig	if ((a == b))
211.4Srillig		return "comparison, parenthesized";
221.4Srillig
231.4Srillig	if (
241.6Srillig# 25 "msg_159.c" 3 4
251.4Srillig	    (a == b)
261.6Srillig# 27 "msg_159.c"
271.4Srillig	    )
281.4Srillig		return "comparison, parenthesized, from system header";
291.4Srillig
301.4Srillig	/* expect+1: warning: assignment in conditional context [159] */
311.4Srillig	if (a = b)
321.4Srillig		return "assignment, not parenthesized";
331.4Srillig
341.4Srillig	/*
351.5Srillig	 * GCC established the convention that an assignment that is
361.5Srillig	 * parenthesized is intended as an assignment, so don't warn about
371.5Srillig	 * that case.
381.4Srillig	 */
391.4Srillig	if ((a = b))
401.4Srillig		return "assignment, parenthesized";
411.4Srillig
421.4Srillig	if ((a = b) != 0)
431.4Srillig		return "explicit comparison after assignment";
441.4Srillig
451.4Srillig	return "other";
461.4Srillig}
47