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)11e80f308cSrilligexample(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)22e80f308cSrilligconditionally_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)33e80f308cSrilligconditionally_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