xref: /netbsd-src/tests/usr.bin/xlint/lint1/msg_158.c (revision b2baa50111d645353fa30b4deab0f79d93650c8c)
1*b2baa501Srillig /*	$NetBSD: msg_158.c,v 1.6 2023/03/28 14:44:35 rillig Exp $	*/
2a0a15c14Srillig # 3 "msg_158.c"
3a0a15c14Srillig 
440a9b8fdSrillig // Test for message: '%s' may be used before set [158]
5a0a15c14Srillig 
6*b2baa501Srillig /* lint1-extra-flags: -X 351 */
7*b2baa501Srillig 
8e80f308cSrillig void sink_int(int);
9e80f308cSrillig 
10e80f308cSrillig void
example(int arg)11e80f308cSrillig example(int arg)
12e80f308cSrillig {
13e80f308cSrillig 	int twice_arg;
14e80f308cSrillig 
1540a9b8fdSrillig 	/* expect+1: warning: 'twice_arg' may be used before set [158] */
1665e5c21bSrillig 	sink_int(twice_arg);
17e80f308cSrillig 	twice_arg = 2 * arg;
18e80f308cSrillig 	sink_int(twice_arg);
19e80f308cSrillig }
20e80f308cSrillig 
21e80f308cSrillig void
conditionally_used(int arg)22e80f308cSrillig conditionally_used(int arg)
23e80f308cSrillig {
24e80f308cSrillig 	int twice_arg;
25e80f308cSrillig 
26e80f308cSrillig 	if (arg > 0)
27e80f308cSrillig 		twice_arg = 2 * arg;
28e80f308cSrillig 	if (arg > 0)
29e80f308cSrillig 		sink_int(twice_arg);
30e80f308cSrillig }
31e80f308cSrillig 
32e80f308cSrillig void
conditionally_unused(int arg)33e80f308cSrillig conditionally_unused(int arg)
34e80f308cSrillig {
35e80f308cSrillig 	int twice_arg;
36e80f308cSrillig 
37e80f308cSrillig 	if (arg > 0)
38e80f308cSrillig 		twice_arg = 2 * arg;
39e80f308cSrillig 
40e80f308cSrillig 	/*
41e80f308cSrillig 	 * This situation is not detected by lint as it does not track the
42e80f308cSrillig 	 * possible code paths for all conditions.
43e80f308cSrillig 	 */
44e80f308cSrillig 	if (arg < 0)
45e80f308cSrillig 		sink_int(twice_arg);
46e80f308cSrillig }
47