Module Name:    src
Committed By:   rillig
Date:           Sat Apr 15 11:34:45 UTC 2023

Modified Files:
        src/tests/usr.bin/xlint/lint1: queries.c
        src/usr.bin/xlint/lint1: err.c func.c

Log Message:
lint: add query for parenthesized return value


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/tests/usr.bin/xlint/lint1/queries.c
cvs rdiff -u -r1.192 -r1.193 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.152 -r1.153 src/usr.bin/xlint/lint1/func.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/queries.c
diff -u src/tests/usr.bin/xlint/lint1/queries.c:1.11 src/tests/usr.bin/xlint/lint1/queries.c:1.12
--- src/tests/usr.bin/xlint/lint1/queries.c:1.11	Fri Mar 31 13:03:05 2023
+++ src/tests/usr.bin/xlint/lint1/queries.c	Sat Apr 15 11:34:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: queries.c,v 1.11 2023/03/31 13:03:05 rillig Exp $	*/
+/*	$NetBSD: queries.c,v 1.12 2023/04/15 11:34:45 rillig Exp $	*/
 # 3 "queries.c"
 
 /*
@@ -15,7 +15,7 @@
  * 	such as casts between arithmetic types.
  */
 
-/* lint1-extra-flags: -q 1,2,3,4,5,6,7,8 -X 351 */
+/* lint1-extra-flags: -q 1,2,3,4,5,6,7,8,9 -X 351 */
 
 typedef unsigned char u8_t;
 typedef unsigned short u16_t;
@@ -310,6 +310,49 @@ Q8(void)
 	u16 = 0000644;
 }
 
+int
+Q9(int x)
+{
+	switch (x) {
+	case 0:
+		return 0;
+	case 1:
+		/* expect+1: parenthesized return value [Q9] */
+		return (0);
+	case 2:
+		return +(0);
+	case 3:
+		return -(13);
+	case 4:
+		/* expect+1: parenthesized return value [Q9] */
+		return (0), (1);
+	case 5:
+		/* expect+1: parenthesized return value [Q9] */
+		return (0, 1);
+	case 6:
+		return 0, 1;
+	case 7:
+		/* expect+1: implicit conversion from floating point 'double' to integer 'int' [Q1] */
+		return 0.0;
+	case 8:
+		/* expect+2: parenthesized return value [Q9] */
+		/* expect+1: implicit conversion from floating point 'double' to integer 'int' [Q1] */
+		return (0.0);
+	case 9:
+		return
+# 344 "queries.c" 3 4
+		((void *)0)
+# 346 "queries.c"
+		/* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' [183] */
+		;
+	case 10:
+		/* expect+1: warning: illegal combination of integer 'int' and pointer 'pointer to void' [183] */
+		return (void *)(0);
+	default:
+		return 0;
+	}
+}
+
 /*
  * Since queries do not affect the exit status, force a warning to make this
  * test conform to the general expectation that a test that produces output

Index: src/usr.bin/xlint/lint1/err.c
diff -u src/usr.bin/xlint/lint1/err.c:1.192 src/usr.bin/xlint/lint1/err.c:1.193
--- src/usr.bin/xlint/lint1/err.c:1.192	Fri Mar 31 13:03:05 2023
+++ src/usr.bin/xlint/lint1/err.c	Sat Apr 15 11:34:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: err.c,v 1.192 2023/03/31 13:03:05 rillig Exp $	*/
+/*	$NetBSD: err.c,v 1.193 2023/04/15 11:34:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: err.c,v 1.192 2023/03/31 13:03:05 rillig Exp $");
+__RCSID("$NetBSD: err.c,v 1.193 2023/04/15 11:34:45 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -699,6 +699,7 @@ static const char *queries[] = {
 	"no-op cast from '%s' to '%s'",				      /* Q6 */
 	"redundant cast from '%s' to '%s' before assignment",	      /* Q7 */
 	"octal number '%.*s'",					      /* Q8 */
+	"parenthesized return value",				      /* Q9 */
 };
 
 bool any_query_enabled;		/* for optimizing non-query scenarios */

Index: src/usr.bin/xlint/lint1/func.c
diff -u src/usr.bin/xlint/lint1/func.c:1.152 src/usr.bin/xlint/lint1/func.c:1.153
--- src/usr.bin/xlint/lint1/func.c:1.152	Sat Apr 15 10:32:46 2023
+++ src/usr.bin/xlint/lint1/func.c	Sat Apr 15 11:34:45 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: func.c,v 1.152 2023/04/15 10:32:46 rillig Exp $	*/
+/*	$NetBSD: func.c,v 1.153 2023/04/15 11:34:45 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: func.c,v 1.152 2023/04/15 10:32:46 rillig Exp $");
+__RCSID("$NetBSD: func.c,v 1.153 2023/04/15 11:34:45 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -1047,9 +1047,24 @@ do_continue(void)
 	set_reached(false);
 }
 
+static bool
+is_parenthesized(const tnode_t *tn)
+{
+
+	while (!tn->tn_parenthesized && tn->tn_op == COMMA)
+		tn = tn->tn_right;
+	return tn->tn_parenthesized && !tn->tn_sys;
+}
+
 static void
 check_return_value(bool sys, tnode_t *tn)
 {
+
+	if (any_query_enabled && is_parenthesized(tn)) {
+		/* parenthesized return value */
+		query_message(9);
+	}
+
 	/* Create a temporary node for the left side */
 	tnode_t *ln = expr_zero_alloc(sizeof(*ln));
 	ln->tn_op = NAME;

Reply via email to