Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

/*	$NetBSD: msg_158.c,v 1.6 2023/03/28 14:44:35 rillig Exp $	*/
# 3 "msg_158.c"

// Test for message: '%s' may be used before set [158]

/* lint1-extra-flags: -X 351 */

void sink_int(int);

void
example(int arg)
{
	int twice_arg;

	/* expect+1: warning: 'twice_arg' may be used before set [158] */
	sink_int(twice_arg);
	twice_arg = 2 * arg;
	sink_int(twice_arg);
}

void
conditionally_used(int arg)
{
	int twice_arg;

	if (arg > 0)
		twice_arg = 2 * arg;
	if (arg > 0)
		sink_int(twice_arg);
}

void
conditionally_unused(int arg)
{
	int twice_arg;

	if (arg > 0)
		twice_arg = 2 * arg;

	/*
	 * This situation is not detected by lint as it does not track the
	 * possible code paths for all conditions.
	 */
	if (arg < 0)
		sink_int(twice_arg);
}