Module Name:    src
Committed By:   rillig
Date:           Sun Jul 11 20:07:42 UTC 2021

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

Log Message:
lint: reorganize grammar rules for unary expressions

According to GCC, __builtin_offsetof is a primary-expression.

According to GCC, __real__, __imag__ and __extension__ are
unary-operator, just like '!' and '~'.

According to C11, _Alignof is a unary-operator.


To generate a diff of this commit:
cvs rdiff -u -r1.314 -r1.315 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.314 src/usr.bin/xlint/lint1/cgram.y:1.315
--- src/usr.bin/xlint/lint1/cgram.y:1.314	Sun Jul 11 19:46:09 2021
+++ src/usr.bin/xlint/lint1/cgram.y	Sun Jul 11 20:07:41 2021
@@ -1,5 +1,5 @@
 %{
-/* $NetBSD: cgram.y,v 1.314 2021/07/11 19:46:09 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.315 2021/07/11 20:07:41 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.314 2021/07/11 19:46:09 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.315 2021/07/11 20:07:41 rillig Exp $");
 #endif
 
 #include <limits.h>
@@ -1747,6 +1747,11 @@ primary_expression:		/* C99 6.5.1 */
 			$2->tn_parenthesized = true;
 		$$ = $2;
 	  }
+	/* GCC primary-expression, see c_parser_postfix_expression */
+	| T_BUILTIN_OFFSETOF T_LPAREN type_name T_COMMA identifier T_RPAREN {
+		symtyp = FMEMBER;
+		$$ = build_offsetof($3, getsym($5));
+	  }
 	;
 
 postfix_expression:		/* C99 6.5.2 */
@@ -1802,10 +1807,10 @@ postfix_expression:		/* C99 6.5.2 */
 		block_level++;
 		/* ({ }) is a GCC extension */
 		gnuism(320);
-	 } compound_statement_rbrace T_RPAREN {
+	  } compound_statement_rbrace T_RPAREN {
 		$$ = new_name_node(*current_initsym(), 0);
 		end_initialization();
-	 }
+	  }
 	;
 
 unary_expression:		/* C99 6.5.3 */
@@ -1832,6 +1837,15 @@ unary_expression:		/* C99 6.5.3 */
 	| T_LOGNOT term {
 		$$ = build(NOT, $2, NULL);
 	  }
+	| T_REAL term {		/* GCC c_parser_unary_expression */
+		$$ = build(REAL, $2, NULL);
+	  }
+	| T_IMAG term {		/* GCC c_parser_unary_expression */
+		$$ = build(IMAG, $2, NULL);
+	  }
+	| T_EXTENSION term {	/* GCC c_parser_unary_expression */
+		$$ = $2;
+	  }
 	| T_SIZEOF unary_expression {
 		$$ = $2 == NULL ? NULL : build_sizeof($2->tn_type);
 		if ($$ != NULL)
@@ -1840,26 +1854,13 @@ unary_expression:		/* C99 6.5.3 */
 	| T_SIZEOF T_LPAREN type_name T_RPAREN {
 		$$ = build_sizeof($3);
 	  }
+	| T_ALIGNOF T_LPAREN type_name T_RPAREN {	/* C11 6.5.3 */
+		$$ = build_alignof($3);
+	  }
 	;
 
 term:				/* see C99 6.5.1 */
 	  unary_expression
-	| T_REAL term {
-		$$ = build(REAL, $2, NULL);
-	  }
-	| T_IMAG term {
-		$$ = build(IMAG, $2, NULL);
-	  }
-	| T_EXTENSION term {
-		$$ = $2;
-	  }
-	| T_BUILTIN_OFFSETOF T_LPAREN type_name T_COMMA identifier T_RPAREN {
-		symtyp = FMEMBER;
-		$$ = build_offsetof($3, getsym($5));
-	  }
-	| T_ALIGNOF T_LPAREN type_name T_RPAREN {
-		$$ = build_alignof($3);
-	  }
 	| T_LPAREN type_name T_RPAREN term {
 		$$ = cast($4, $2);
 	  }

Reply via email to