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]