Module Name: src
Committed By: rillig
Date: Sat Jul 10 05:03:03 UTC 2021
Modified Files:
src/usr.bin/xlint/lint1: cgram.y
Log Message:
lint: reduce shift/reduce conflicts in direct_abstract_declarator
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.280 -r1.281 src/usr.bin/xlint/lint1/cgram.y
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.280 src/usr.bin/xlint/lint1/cgram.y:1.281
--- src/usr.bin/xlint/lint1/cgram.y:1.280 Sat Jul 10 04:57:41 2021
+++ src/usr.bin/xlint/lint1/cgram.y Sat Jul 10 05:03:03 2021
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.280 2021/07/10 04:57:41 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.281 2021/07/10 05:03:03 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.280 2021/07/10 04:57:41 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.281 2021/07/10 05:03:03 rillig Exp $");
#endif
#include <limits.h>
@@ -123,7 +123,7 @@ anonymize(sym_t *s)
}
%}
-%expect 142
+%expect 136
%union {
val_t *y_val;
@@ -319,6 +319,7 @@ anonymize(sym_t *s)
%type <y_sym> identifier_list
%type <y_sym> abstract_declarator
%type <y_sym> direct_abstract_declarator
+%type <y_sym> direct_abstract_declarator_postfix
%type <y_sym> vararg_parameter_type_list
%type <y_sym> parameter_type_list
%type <y_sym> parameter_declaration
@@ -1310,12 +1311,14 @@ abstract_declarator: /* C99 6.7.6 */
}
;
-/*
- * XXX: shift/reduce conflict, caused by:
- * type_attribute direct_abstract_declarator
- * direct_abstract_declarator type_attribute
- */
direct_abstract_declarator: /* C99 6.7.6 */
+ direct_abstract_declarator_postfix
+ | type_attribute direct_abstract_declarator_postfix {
+ $$ = $2;
+ }
+ ;
+
+direct_abstract_declarator_postfix: /* C99 6.7.6 */
T_LPAREN abstract_declarator T_RPAREN {
$$ = $2;
}
@@ -1325,16 +1328,14 @@ direct_abstract_declarator: /* C99 6.7.
| T_LBRACK array_size T_RBRACK {
$$ = add_array(abstract_name(), true, to_int_constant($2, false));
}
- | type_attribute direct_abstract_declarator {
- $$ = $2;
- }
- | direct_abstract_declarator T_LBRACK T_RBRACK {
+ | direct_abstract_declarator_postfix T_LBRACK T_RBRACK {
$$ = add_array($1, false, 0);
}
- | direct_abstract_declarator T_LBRACK T_ASTERISK T_RBRACK { /* C99 */
+ | direct_abstract_declarator_postfix
+ T_LBRACK T_ASTERISK T_RBRACK { /* C99 */
$$ = add_array($1, false, 0);
}
- | direct_abstract_declarator T_LBRACK array_size T_RBRACK {
+ | direct_abstract_declarator_postfix T_LBRACK array_size T_RBRACK {
$$ = add_array($1, true, to_int_constant($3, false));
}
| abstract_decl_param_list asm_or_symbolrename_opt {
@@ -1342,12 +1343,13 @@ direct_abstract_declarator: /* C99 6.7.
end_declaration_level();
block_level--;
}
- | direct_abstract_declarator abstract_decl_param_list asm_or_symbolrename_opt {
+ | direct_abstract_declarator_postfix abstract_decl_param_list
+ asm_or_symbolrename_opt {
$$ = add_function(symbolrename($1, $3), $2);
end_declaration_level();
block_level--;
}
- | direct_abstract_declarator type_attribute
+ | direct_abstract_declarator_postfix type_attribute
;
array_size: