Module Name: src Committed By: rillig Date: Sat Feb 26 19:01:09 UTC 2022
Modified Files: src/usr.bin/xlint/lint1: cgram.y externs1.h tree.c Log Message: lint: extract code for handling statement expressions from the grammar This prepares the fix of the memory corruption bug that is demonstrated in t_integration.sh, test case assertion_failures. No functional change. To generate a diff of this commit: cvs rdiff -u -r1.379 -r1.380 src/usr.bin/xlint/lint1/cgram.y cvs rdiff -u -r1.144 -r1.145 src/usr.bin/xlint/lint1/externs1.h cvs rdiff -u -r1.402 -r1.403 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/usr.bin/xlint/lint1/cgram.y diff -u src/usr.bin/xlint/lint1/cgram.y:1.379 src/usr.bin/xlint/lint1/cgram.y:1.380 --- src/usr.bin/xlint/lint1/cgram.y:1.379 Sat Jan 15 23:21:34 2022 +++ src/usr.bin/xlint/lint1/cgram.y Sat Feb 26 19:01:09 2022 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: cgram.y,v 1.379 2022/01/15 23:21:34 rillig Exp $ */ +/* $NetBSD: cgram.y,v 1.380 2022/02/26 19:01:09 rillig Exp $ */ /* * Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved. @@ -35,7 +35,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: cgram.y,v 1.379 2022/01/15 23:21:34 rillig Exp $"); +__RCSID("$NetBSD: cgram.y,v 1.380 2022/02/26 19:01:09 rillig Exp $"); #endif #include <limits.h> @@ -518,16 +518,9 @@ postfix_expression: end_initialization(); } | T_LPAREN compound_statement_lbrace gcc_statement_expr_list { - block_level--; - mem_block_level--; - begin_initialization(mktempsym(dup_type($3->tn_type))); - mem_block_level++; - block_level++; - /* ({ }) is a GCC extension */ - gnuism(320); + do_statement_expr($3); } compound_statement_rbrace T_RPAREN { - $$ = build_name(*current_initsym(), false); - end_initialization(); + $$ = end_statement_expr(); } ; Index: src/usr.bin/xlint/lint1/externs1.h diff -u src/usr.bin/xlint/lint1/externs1.h:1.144 src/usr.bin/xlint/lint1/externs1.h:1.145 --- src/usr.bin/xlint/lint1/externs1.h:1.144 Tue Dec 21 21:04:08 2021 +++ src/usr.bin/xlint/lint1/externs1.h Sat Feb 26 19:01:09 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: externs1.h,v 1.144 2021/12/21 21:04:08 rillig Exp $ */ +/* $NetBSD: externs1.h,v 1.145 2022/02/26 19:01:09 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -262,6 +262,9 @@ extern bool constant_addr(const tnode_t extern strg_t *cat_strings(strg_t *, strg_t *); extern unsigned int type_size_in_bits(const type_t *); +void do_statement_expr(tnode_t *); +tnode_t *end_statement_expr(void); + /* * func.c */ Index: src/usr.bin/xlint/lint1/tree.c diff -u src/usr.bin/xlint/lint1/tree.c:1.402 src/usr.bin/xlint/lint1/tree.c:1.403 --- src/usr.bin/xlint/lint1/tree.c:1.402 Tue Dec 21 15:33:20 2021 +++ src/usr.bin/xlint/lint1/tree.c Sat Feb 26 19:01:09 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: tree.c,v 1.402 2021/12/21 15:33:20 rillig Exp $ */ +/* $NetBSD: tree.c,v 1.403 2022/02/26 19:01:09 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: tree.c,v 1.402 2021/12/21 15:33:20 rillig Exp $"); +__RCSID("$NetBSD: tree.c,v 1.403 2022/02/26 19:01:09 rillig Exp $"); #endif #include <float.h> @@ -4538,3 +4538,25 @@ check_precedence_confusion(tnode_t *tn) warning(169); } } + +void +do_statement_expr(tnode_t *tn) +{ + block_level--; + mem_block_level--; + /* Use the initialization code as temporary symbol storage. */ + begin_initialization(mktempsym(dup_type(tn->tn_type))); + mem_block_level++; + block_level++; + /* ({ }) is a GCC extension */ + gnuism(320); + +} + +tnode_t * +end_statement_expr(void) +{ + tnode_t *tn = build_name(*current_initsym(), false); + end_initialization(); + return tn; +}