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)