Module Name:    src
Committed By:   rillig
Date:           Mon Dec 20 19:34:01 UTC 2021

Modified Files:
        src/usr.bin/xlint/lint1: cgram.y externs1.h init.c

Log Message:
lint: add grammar rule for the beginning of a designation

This will be necessary to properly implement handling of initializers
and braced initializer-lists.

No functional change for now since the designation is already reset
after each expression and '}'.  To handle initializations properly, the
designation must not be reset after each expression, it must advance to
the next member instead.


To generate a diff of this commit:
cvs rdiff -u -r1.376 -r1.377 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.142 -r1.143 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.222 -r1.223 src/usr.bin/xlint/lint1/init.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.376 src/usr.bin/xlint/lint1/cgram.y:1.377
--- src/usr.bin/xlint/lint1/cgram.y:1.376	Sat Dec 18 11:37:00 2021
+++ src/usr.bin/xlint/lint1/cgram.y	Mon Dec 20 19:34:01 2021
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.376 2021/12/18 11:37:00 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.377 2021/12/20 19:34:01 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.376 2021/12/18 11:37:00 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.377 2021/12/20 19:34:01 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -1561,14 +1561,21 @@ initializer_list_item:		/* helper */
 	;
 
 designation:			/* C99 6.7.8 "Initialization" */
-	  designator_list T_ASSIGN
+	  begin_designation designator_list T_ASSIGN
 	| identifier T_COLON {
 		/* GCC style struct or union member name in initializer */
 		gnuism(315);
+		begin_designation();
 		add_designator_member($1);
 	  }
 	;
 
+begin_designation:		/* lint-specific helper */
+	  /* empty */ {
+		begin_designation();
+	  }
+	;
+
 designator_list:		/* C99 6.7.8 "Initialization" */
 	  designator
 	| designator_list designator

Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.142 src/usr.bin/xlint/lint1/externs1.h:1.143
--- src/usr.bin/xlint/lint1/externs1.h:1.142	Thu Dec 16 23:46:21 2021
+++ src/usr.bin/xlint/lint1/externs1.h	Mon Dec 20 19:34:01 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: externs1.h,v 1.142 2021/12/16 23:46:21 rillig Exp $	*/
+/*	$NetBSD: externs1.h,v 1.143 2021/12/20 19:34:01 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -332,6 +332,7 @@ extern	sym_t	**current_initsym(void);
 extern	void	init_rbrace(void);
 extern	void	init_lbrace(void);
 extern	void	init_expr(tnode_t *);
+extern	void	begin_designation(void);
 extern	void	add_designator_member(sbuf_t *);
 extern	void	add_designator_subscript(range_t);
 

Index: src/usr.bin/xlint/lint1/init.c
diff -u src/usr.bin/xlint/lint1/init.c:1.222 src/usr.bin/xlint/lint1/init.c:1.223
--- src/usr.bin/xlint/lint1/init.c:1.222	Sun Dec 19 23:50:27 2021
+++ src/usr.bin/xlint/lint1/init.c	Mon Dec 20 19:34:01 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: init.c,v 1.222 2021/12/19 23:50:27 rillig Exp $	*/
+/*	$NetBSD: init.c,v 1.223 2021/12/20 19:34:01 rillig Exp $	*/
 
 /*
  * Copyright (c) 1994, 1995 Jochen Pohl
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: init.c,v 1.222 2021/12/19 23:50:27 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.223 2021/12/20 19:34:01 rillig Exp $");
 #endif
 
 #include <stdlib.h>
@@ -988,6 +988,16 @@ end_initialization(void)
 }
 
 void
+begin_designation(void)
+{
+	brace_level *bl;
+
+	bl = current_init()->in_brace_level;
+	lint_assert(bl != NULL);
+	designation_reset(&bl->bl_designation);
+}
+
+void
 add_designator_member(sbuf_t *sb)
 {
 

Reply via email to