Module Name:    src
Committed By:   rillig
Date:           Tue Sep 12 07:23:27 UTC 2023

Modified Files:
        src/tests/usr.bin/xlint/lint1: msg_192.c
        src/usr.bin/xlint/lint1: tree.c

Log Message:
lint: mark symbols that are only used in untaken '?:' branch as used


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/xlint/lint1/msg_192.c
cvs rdiff -u -r1.578 -r1.579 src/usr.bin/xlint/lint1/tree.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/xlint/lint1/msg_192.c
diff -u src/tests/usr.bin/xlint/lint1/msg_192.c:1.7 src/tests/usr.bin/xlint/lint1/msg_192.c:1.8
--- src/tests/usr.bin/xlint/lint1/msg_192.c:1.7	Tue Sep 12 06:51:02 2023
+++ src/tests/usr.bin/xlint/lint1/msg_192.c	Tue Sep 12 07:23:27 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: msg_192.c,v 1.7 2023/09/12 06:51:02 rillig Exp $	*/
+/*	$NetBSD: msg_192.c,v 1.8 2023/09/12 07:23:27 rillig Exp $	*/
 # 3 "msg_192.c"
 
 // Test for message: '%s' unused in function '%s' [192]
@@ -16,13 +16,15 @@ example(int param)
 
 void assertion_failed(const char *);
 
+/*
+ * The symbol '__func__' only occurs in an unreachable branch.  It is
+ * nevertheless marked as used.
+ */
 void
 assert_true(void)
 {
 	sizeof(char) == 1
 	    ? (void)0
-/* FIXME: '__func__' is used, the code is just not reachable. */
-/* expect+1: warning: '__func__' unused in function 'assert_true' [192] */
 	    : assertion_failed(__func__);
 }
 

Index: src/usr.bin/xlint/lint1/tree.c
diff -u src/usr.bin/xlint/lint1/tree.c:1.578 src/usr.bin/xlint/lint1/tree.c:1.579
--- src/usr.bin/xlint/lint1/tree.c:1.578	Sat Aug 26 10:43:53 2023
+++ src/usr.bin/xlint/lint1/tree.c	Tue Sep 12 07:23:27 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: tree.c,v 1.578 2023/08/26 10:43:53 rillig Exp $	*/
+/*	$NetBSD: tree.c,v 1.579 2023/09/12 07:23:27 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: tree.c,v 1.578 2023/08/26 10:43:53 rillig Exp $");
+__RCSID("$NetBSD: tree.c,v 1.579 2023/09/12 07:23:27 rillig Exp $");
 #endif
 
 #include <float.h>
@@ -1635,6 +1635,25 @@ fold_float(tnode_t *tn)
 	return build_constant(tn->tn_type, v);
 }
 
+static void
+use(const tnode_t *tn)
+{
+	if (tn == NULL)
+		return;
+	switch (tn->tn_op) {
+	case NAME:
+		mark_as_used(tn->tn_sym, false /* XXX */, false /* XXX */);
+		break;
+	case CON:
+	case STRING:
+		break;
+	default:
+		use(tn->tn_left);
+		if (is_binary(tn))
+			use(tn->tn_right);
+	}
+}
+
 /*
  * Create a tree node for a binary operator and its two operands. Also called
  * for unary operators; in that case rn is NULL.
@@ -1809,6 +1828,8 @@ build_binary(tnode_t *ln, op_t op, bool 
 				ntn = fold(ntn);
 			}
 		} else if (op == QUEST && ln->tn_op == CON) {
+			use(ln->tn_val.u.integer != 0
+			    ? rn->tn_right : rn->tn_left);
 			ntn = ln->tn_val.u.integer != 0
 			    ? rn->tn_left : rn->tn_right;
 		}

Reply via email to