Module Name:    src
Committed By:   rillig
Date:           Sun Jul 25 18:48:47 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint1: gcc_attribute_enum.c
            gcc_attribute_enum.exp
        src/usr.bin/xlint/lint1: cgram.y

Log Message:
lint: fix parsing of enumerators with __attribute__


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.c \
    src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.exp
cvs rdiff -u -r1.341 -r1.342 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/tests/usr.bin/xlint/lint1/gcc_attribute_enum.c
diff -u src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.c:1.3 src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.c:1.4
--- src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.c:1.3	Sun Jul 25 18:44:21 2021
+++ src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.c	Sun Jul 25 18:48:47 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: gcc_attribute_enum.c,v 1.3 2021/07/25 18:44:21 rillig Exp $	*/
+/*	$NetBSD: gcc_attribute_enum.c,v 1.4 2021/07/25 18:48:47 rillig Exp $	*/
 # 3 "gcc_attribute_enum.c"
 
 /*
@@ -30,15 +30,15 @@ enum __attribute__(()) {
  */
 
 enum without_initializer {
-	/* expect+1: error: syntax error '__attribute__' [249] */
 	NO_INIT_FIRST __attribute__(()),
-	NO_INIT__LAST __attribute__(())
+	NO_INIT_LAST __attribute__(())
 };
 
 enum with_initializer {
-	/* expect+1: error: syntax error '__attribute__' [249] */
 	INIT_FIRST __attribute__(()) = 1,
-	INIT__LAST __attribute__(()) = 2
+	INIT_LAST __attribute__(()) = 2,
+	/* expect+1: syntax error '__attribute__' [249] */
+	INIT_WRONG = 3 __attribute__(()),
 };
 
 enum tag {
Index: src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.exp
diff -u src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.exp:1.3 src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.exp:1.4
--- src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.exp:1.3	Sun Jul 25 18:44:21 2021
+++ src/tests/usr.bin/xlint/lint1/gcc_attribute_enum.exp	Sun Jul 25 18:48:47 2021
@@ -1,2 +1 @@
-gcc_attribute_enum.c(34): error: syntax error '__attribute__' [249]
-gcc_attribute_enum.c(40): error: syntax error '__attribute__' [249]
+gcc_attribute_enum.c(41): error: syntax error '__attribute__' [249]

Index: src/usr.bin/xlint/lint1/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.341 src/usr.bin/xlint/lint1/cgram.y:1.342
--- src/usr.bin/xlint/lint1/cgram.y:1.341	Sun Jul 25 18:44:21 2021
+++ src/usr.bin/xlint/lint1/cgram.y	Sun Jul 25 18:48:47 2021
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.341 2021/07/25 18:44:21 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.342 2021/07/25 18:48:47 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.341 2021/07/25 18:44:21 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.342 2021/07/25 18:48:47 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -1101,11 +1101,11 @@ enumerator_list:		/* C99 6.7.2.2 */
 	;
 
 enumerator:			/* C99 6.7.2.2 */
-	  identifier_sym {
+	  identifier_sym gcc_attribute_list_opt {
 		$$ = enumeration_constant($1, enumval, true);
 	  }
-	| identifier_sym T_ASSIGN constant_expr {
-		$$ = enumeration_constant($1, to_int_constant($3, true),
+	| identifier_sym gcc_attribute_list_opt T_ASSIGN constant_expr {
+		$$ = enumeration_constant($1, to_int_constant($4, true),
 		    false);
 	  }
 	;

Reply via email to