Module Name: src Committed By: rillig Date: Mon Jun 28 09:14:42 UTC 2021
Modified Files: src/usr.bin/xlint/lint1: cgram.y decl.c Log Message: lint: align grammar with C99 C99 uses type-qualifier-list_opt in section 6.7.5. To generate a diff of this commit: cvs rdiff -u -r1.244 -r1.245 src/usr.bin/xlint/lint1/cgram.y cvs rdiff -u -r1.190 -r1.191 src/usr.bin/xlint/lint1/decl.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.244 src/usr.bin/xlint/lint1/cgram.y:1.245 --- src/usr.bin/xlint/lint1/cgram.y:1.244 Mon Jun 28 09:01:48 2021 +++ src/usr.bin/xlint/lint1/cgram.y Mon Jun 28 09:14:42 2021 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: cgram.y,v 1.244 2021/06/28 09:01:48 rillig Exp $ */ +/* $NetBSD: cgram.y,v 1.245 2021/06/28 09:14:42 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.244 2021/06/28 09:01:48 rillig Exp $"); +__RCSID("$NetBSD: cgram.y,v 1.245 2021/06/28 09:14:42 rillig Exp $"); #endif #include <limits.h> @@ -314,6 +314,7 @@ anonymize(sym_t *s) %type <y_sym> direct_param_decl %type <y_sym> notype_param_decl %type <y_sym> direct_notype_param_decl +%type <y_qual_ptr> type_qualifier_list_opt %type <y_qual_ptr> type_qualifier_list %type <y_qual_ptr> type_qualifier %type <y_sym> identifier_list @@ -1132,11 +1133,6 @@ param_decl: } ; -type_qualifier_list_opt: - /* empty */ - | type_qualifier_list - ; - array_size: type_qualifier_list_opt T_SCLASS constant_expr { /* C11 6.7.6.3p7 */ @@ -1200,14 +1196,10 @@ direct_notype_param_decl: ; pointer: /* C99 6.7.5 */ - asterisk - | asterisk type_qualifier_list { - $$ = merge_qualified_pointer($1, $2); - } - | asterisk pointer { + asterisk type_qualifier_list_opt { $$ = merge_qualified_pointer($1, $2); } - | asterisk type_qualifier_list pointer { + | asterisk type_qualifier_list_opt pointer { $$ = merge_qualified_pointer($1, $2); $$ = merge_qualified_pointer($$, $3); } @@ -1220,8 +1212,14 @@ asterisk: } ; -/* TODO: try whether type_qualifier_list_opt makes the code simpler */ -type_qualifier_list: +type_qualifier_list_opt: + /* empty */ { + $$ = NULL; + } + | type_qualifier_list + ; + +type_qualifier_list: /* C99 6.7.5 */ type_qualifier | type_qualifier_list type_qualifier { $$ = merge_qualified_pointer($1, $2); Index: src/usr.bin/xlint/lint1/decl.c diff -u src/usr.bin/xlint/lint1/decl.c:1.190 src/usr.bin/xlint/lint1/decl.c:1.191 --- src/usr.bin/xlint/lint1/decl.c:1.190 Mon Jun 28 08:52:55 2021 +++ src/usr.bin/xlint/lint1/decl.c Mon Jun 28 09:14:42 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: decl.c,v 1.190 2021/06/28 08:52:55 rillig Exp $ */ +/* $NetBSD: decl.c,v 1.191 2021/06/28 09:14:42 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.190 2021/06/28 08:52:55 rillig Exp $"); +__RCSID("$NetBSD: decl.c,v 1.191 2021/06/28 09:14:42 rillig Exp $"); #endif #include <sys/param.h> @@ -1296,6 +1296,9 @@ merge_qualified_pointer(qual_ptr *p1, qu { qual_ptr *tail; + if (p2 == NULL) + return p1; /* for optional qualifiers */ + if (p2->p_pointer) { /* append p1 to p2, keeping p2 */ for (tail = p2; tail->p_next != NULL; tail = tail->p_next)