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) {