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)

Reply via email to