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;
+}

Reply via email to