Module Name:    src
Committed By:   rillig
Date:           Tue Oct 17 19:33:16 UTC 2023

Modified Files:
        src/usr.bin/xlint/lint1: cgram.y

Log Message:
lint: resolve shift/reduce conflict in labels with attributes


To generate a diff of this commit:
cvs rdiff -u -r1.475 -r1.476 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.475 src/usr.bin/xlint/lint1/cgram.y:1.476
--- src/usr.bin/xlint/lint1/cgram.y:1.475	Tue Oct 17 19:29:09 2023
+++ src/usr.bin/xlint/lint1/cgram.y	Tue Oct 17 19:33:16 2023
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.475 2023/10/17 19:29:09 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.476 2023/10/17 19:33:16 rillig Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID)
-__RCSID("$NetBSD: cgram.y,v 1.475 2023/10/17 19:29:09 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.476 2023/10/17 19:33:16 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -132,7 +132,7 @@ is_either(const char *s, const char *a, 
 
 %}
 
-%expect 104
+%expect 103
 
 %union {
 	val_t	*y_val;
@@ -386,7 +386,9 @@ is_either(const char *s, const char *a, 
 /* No type for init_rbrace. */
 %type	<y_name>	asm_or_symbolrename_opt
 /* No type for statement. */
+/* No type for no_attr_statement. */
 /* No type for non_expr_statement. */
+/* No type for no_attr_non_expr_statement. */
 /* No type for labeled_statement. */
 /* No type for label. */
 /* No type for compound_statement. */
@@ -1752,9 +1754,20 @@ statement:
 |	non_expr_statement
 ;
 
+/* Helper to avoid shift/reduce conflict in 'label: __attribute__ ;'. */
+no_attr_statement:
+	expression_statement
+|	no_attr_non_expr_statement
+;
+
 non_expr_statement:		/* helper for C99 6.8 */
 	gcc_attribute_specifier /* ((__fallthrough__)) */ T_SEMI
-|	labeled_statement
+|	no_attr_non_expr_statement
+;
+
+/* Helper to avoid shift/reduce conflict in 'label: __attribute__ ;'. */
+no_attr_non_expr_statement:
+	labeled_statement
 |	compound_statement
 |	selection_statement
 |	iteration_statement
@@ -1765,7 +1778,7 @@ non_expr_statement:		/* helper for C99 6
 ;
 
 labeled_statement:		/* C99 6.8.1 */
-	label gcc_attribute_specifier_list_opt statement
+	label gcc_attribute_specifier_list_opt no_attr_statement
 ;
 
 label:

Reply via email to