Module Name:    src
Committed By:   rillig
Date:           Sat Jun 19 15:51:11 UTC 2021

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/usr.bin/xlint/lint1: Makefile d_gcc_compound_statements1.c
        src/usr.bin/xlint/lint1: decl.c func.c
Added Files:
        src/tests/usr.bin/xlint/lint1: d_gcc_compound_statements1.exp

Log Message:
lint: fix crash in malformed initialization


To generate a diff of this commit:
cvs rdiff -u -r1.1058 -r1.1059 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.60 -r1.61 src/tests/usr.bin/xlint/lint1/Makefile
cvs rdiff -u -r1.4 -r1.5 \
    src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.c
cvs rdiff -u -r0 -r1.1 \
    src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.exp
cvs rdiff -u -r1.185 -r1.186 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.108 -r1.109 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/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.1058 src/distrib/sets/lists/tests/mi:1.1059
--- src/distrib/sets/lists/tests/mi:1.1058	Sat Jun 19 08:30:08 2021
+++ src/distrib/sets/lists/tests/mi	Sat Jun 19 15:51:11 2021
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1058 2021/06/19 08:30:08 rillig Exp $
+# $NetBSD: mi,v 1.1059 2021/06/19 15:51:11 rillig Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -6159,6 +6159,7 @@
 ./usr/tests/usr.bin/xlint/lint1/d_fold_test.c			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_fold_test.exp			tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.c	tests-usr.bin-tests	compattestfile,atf
+./usr/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.exp	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_compound_statements2.c	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_compound_statements3.c	tests-usr.bin-tests	compattestfile,atf
 ./usr/tests/usr.bin/xlint/lint1/d_gcc_extension.c		tests-usr.bin-tests	compattestfile,atf

Index: src/tests/usr.bin/xlint/lint1/Makefile
diff -u src/tests/usr.bin/xlint/lint1/Makefile:1.60 src/tests/usr.bin/xlint/lint1/Makefile:1.61
--- src/tests/usr.bin/xlint/lint1/Makefile:1.60	Sat Jun 19 08:30:08 2021
+++ src/tests/usr.bin/xlint/lint1/Makefile	Sat Jun 19 15:51:11 2021
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.60 2021/06/19 08:30:08 rillig Exp $
+# $NetBSD: Makefile,v 1.61 2021/06/19 15:51:11 rillig Exp $
 
 NOMAN=		# defined
 MAX_MESSAGE=	344		# see lint1/err.c
@@ -64,6 +64,7 @@ FILES+=		d_ellipsis_in_switch.c
 FILES+=		d_fold_test.c
 FILES+=		d_fold_test.exp
 FILES+=		d_gcc_compound_statements1.c
+FILES+=		d_gcc_compound_statements1.exp
 FILES+=		d_gcc_compound_statements2.c
 FILES+=		d_gcc_compound_statements3.c
 FILES+=		d_gcc_extension.c

Index: src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.c
diff -u src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.c:1.4 src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.c:1.5
--- src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.c:1.4	Sat Mar 27 13:59:18 2021
+++ src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.c	Sat Jun 19 15:51:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: d_gcc_compound_statements1.c,v 1.4 2021/03/27 13:59:18 rillig Exp $	*/
+/*	$NetBSD: d_gcc_compound_statements1.c,v 1.5 2021/06/19 15:51:11 rillig Exp $	*/
 # 3 "d_gcc_compound_statements1.c"
 
 /* GCC compound statement with expression */
@@ -12,3 +12,13 @@ foo(unsigned long z)
 	});
 	foo(z);
 }
+
+/*
+ * Compound statements are only allowed in functions, not at file scope.
+ *
+ * Before decl.c 1.186 from 2021-06-19, lint crashed with a segmentation
+ * fault.
+ */
+int c = ({
+    return 3;		/* expect: return outside function */
+});			/* expect: cannot initialize 'int' from 'void' */

Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.185 src/usr.bin/xlint/lint1/decl.c:1.186
--- src/usr.bin/xlint/lint1/decl.c:1.185	Sat Jun 19 14:28:04 2021
+++ src/usr.bin/xlint/lint1/decl.c	Sat Jun 19 15:51:11 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.185 2021/06/19 14:28:04 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.186 2021/06/19 15:51:11 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: decl.c,v 1.185 2021/06/19 14:28:04 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.186 2021/06/19 15:51:11 rillig Exp $");
 #endif
 
 #include <sys/param.h>
@@ -3052,7 +3052,10 @@ check_variable_usage(bool novar, sym_t *
 	sym_t	*xsym;
 
 	lint_assert(block_level != 0);
-	lint_assert(sym->s_block_level != 0);
+
+	/* example at file scope: int c = ({ return 3; }); */
+	if (sym->s_block_level == 0 && ch_isdigit(sym->s_name[0]))
+		return;
 
 	/* errors in expressions easily cause lots of these warnings */
 	if (nerr != 0)

Index: src/usr.bin/xlint/lint1/func.c
diff -u src/usr.bin/xlint/lint1/func.c:1.108 src/usr.bin/xlint/lint1/func.c:1.109
--- src/usr.bin/xlint/lint1/func.c:1.108	Sat May 15 19:12:14 2021
+++ src/usr.bin/xlint/lint1/func.c	Sat Jun 19 15:51:11 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: func.c,v 1.108 2021/05/15 19:12:14 rillig Exp $	*/
+/*	$NetBSD: func.c,v 1.109 2021/06/19 15:51:11 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: func.c,v 1.108 2021/05/15 19:12:14 rillig Exp $");
+__RCSID("$NetBSD: func.c,v 1.109 2021/06/19 15:51:11 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -1049,7 +1049,14 @@ do_return(tnode_t *tn)
 	cstk_t	*ci;
 	op_t	op;
 
-	for (ci = cstmt; ci->c_surrounding != NULL; ci = ci->c_surrounding)
+	ci = cstmt;
+	if (ci == NULL) {
+		/* syntax error '%s' */
+		error(249, "return outside function");
+		return;
+	}
+
+	for (; ci->c_surrounding != NULL; ci = ci->c_surrounding)
 		continue;
 
 	if (tn != NULL)

Added files:

Index: src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.exp
diff -u /dev/null src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.exp:1.1
--- /dev/null	Sat Jun 19 15:51:11 2021
+++ src/tests/usr.bin/xlint/lint1/d_gcc_compound_statements1.exp	Sat Jun 19 15:51:11 2021
@@ -0,0 +1,2 @@
+d_gcc_compound_statements1.c(23): error: syntax error 'return outside function' [249]
+d_gcc_compound_statements1.c(24): error: cannot initialize 'int' from 'void' [185]

Reply via email to