Module Name: src Committed By: rillig Date: Tue Jul 11 21:13:36 UTC 2023
Modified Files: src/usr.bin/xlint/lint1: cgram.y Log Message: lint: rename grammar rules to align with C23 To generate a diff of this commit: cvs rdiff -u -r1.453 -r1.454 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.453 src/usr.bin/xlint/lint1/cgram.y:1.454 --- src/usr.bin/xlint/lint1/cgram.y:1.453 Tue Jul 11 20:54:23 2023 +++ src/usr.bin/xlint/lint1/cgram.y Tue Jul 11 21:13:36 2023 @@ -1,5 +1,5 @@ %{ -/* $NetBSD: cgram.y,v 1.453 2023/07/11 20:54:23 rillig Exp $ */ +/* $NetBSD: cgram.y,v 1.454 2023/07/11 21:13:36 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.453 2023/07/11 20:54:23 rillig Exp $"); +__RCSID("$NetBSD: cgram.y,v 1.454 2023/07/11 21:13:36 rillig Exp $"); #endif #include <limits.h> @@ -297,7 +297,7 @@ is_either(const char *s, const char *a, %type <y_tnode> conditional_expression %type <y_tnode> assignment_expression %type <y_tnode> expression -%type <y_tnode> constant_expr +%type <y_tnode> constant_expression /* No type for declaration_or_error. */ /* No type for declaration. */ /* No type for begin_type_declaration_specifiers. */ @@ -318,15 +318,15 @@ is_either(const char *s, const char *a, %type <y_type> atomic_type_specifier %type <y_type> struct_or_union_specifier %type <y_tspec> struct_or_union -%type <y_sym> braced_struct_declaration_list -/* No type for struct_declaration_lbrace. */ -%type <y_sym> struct_declaration_list_with_rbrace -%type <y_sym> struct_declaration_list -%type <y_sym> struct_declaration -%type <y_sym> notype_struct_declarators -%type <y_sym> type_struct_declarators -%type <y_sym> notype_struct_declarator -%type <y_sym> type_struct_declarator +%type <y_sym> braced_member_declaration_list +/* No type for member_declaration_lbrace. */ +%type <y_sym> member_declaration_list_with_rbrace +%type <y_sym> member_declaration_list +%type <y_sym> member_declaration +%type <y_sym> notype_member_declarators +%type <y_sym> type_member_declarators +%type <y_sym> notype_member_declarator +%type <y_sym> type_member_declarator %type <y_type> enum_specifier /* No type for enum. */ %type <y_sym> enum_declaration @@ -533,7 +533,7 @@ generic_association: } ; -/* K&R 7.1, C90 ???, C99 6.5.2, C11 6.5.2 */ +/* K&R 7.1, C90 ???, C99 6.5.2, C11 6.5.2, C23 6.5.2 */ postfix_expression: primary_expression | postfix_expression T_LBRACK sys expression T_RBRACK { @@ -782,7 +782,8 @@ expression: } ; -constant_expr: /* C99 6.6 */ +/* K&R ???, C90 ???, C99 6.6, C11 ???, C23 6.6 */ +constant_expression: conditional_expression ; @@ -791,7 +792,8 @@ declaration_or_error: | error T_SEMI ; -declaration: /* C99 6.7 */ +/* K&R ???, C90 ???, C99 6.7, C11 ???, C23 6.7 */ +declaration: begin_type_declmods end_type T_SEMI { if (dcs->d_scl == TYPEDEF) { /* typedef declares no type name */ @@ -915,7 +917,7 @@ type_attribute_opt: type_attribute: /* See C11 6.7 declaration-specifiers */ gcc_attribute_specifier | T_ALIGNAS T_LPAREN type_specifier T_RPAREN /* C11 6.7.5 */ - | T_ALIGNAS T_LPAREN constant_expr T_RPAREN /* C11 6.7.5 */ + | T_ALIGNAS T_LPAREN constant_expression T_RPAREN /* C11 6.7.5 */ | T_PACKED { dcs_add_packed(); } @@ -967,7 +969,8 @@ atomic_type_specifier: } ; -struct_or_union_specifier: /* C99 6.7.2.1 */ +/* K&R ---, C90 ---, C99 6.7.2.1, C11 ???, C23 6.7.2.1 */ +struct_or_union_specifier: struct_or_union identifier_sym { /* * STDC requires that "struct a;" always introduces @@ -980,12 +983,12 @@ struct_or_union_specifier: /* C99 6.7.2. } | struct_or_union identifier_sym { dcs->d_tag_type = make_tag_type($2, $1, true, false); - } braced_struct_declaration_list { + } braced_member_declaration_list { $$ = complete_struct_or_union($4); } | struct_or_union { dcs->d_tag_type = make_tag_type(NULL, $1, true, false); - } braced_struct_declaration_list { + } braced_member_declaration_list { $$ = complete_struct_or_union($3); } | struct_or_union error { @@ -994,7 +997,8 @@ struct_or_union_specifier: /* C99 6.7.2. } ; -struct_or_union: /* C99 6.7.2.1 */ +/* K&R ---, C90 ---, C99 6.7.2.1, C11 ???, C23 6.7.2.1 */ +struct_or_union: T_STRUCT_OR_UNION { set_symtyp(FTAG); begin_declaration_level($1 == STRUCT ? DLK_STRUCT : DLK_UNION); @@ -1005,45 +1009,49 @@ struct_or_union: /* C99 6.7.2.1 */ | struct_or_union type_attribute ; -braced_struct_declaration_list: /* see C99 6.7.2.1 */ - struct_declaration_lbrace struct_declaration_list_with_rbrace { +braced_member_declaration_list: /* see C99 6.7.2.1 */ + member_declaration_lbrace member_declaration_list_with_rbrace { $$ = $2; } ; -struct_declaration_lbrace: /* see C99 6.7.2.1 */ +member_declaration_lbrace: /* see C99 6.7.2.1 */ T_LBRACE { set_symtyp(FVFT); } ; -struct_declaration_list_with_rbrace: /* see C99 6.7.2.1 */ - struct_declaration_list T_RBRACE +member_declaration_list_with_rbrace: /* see C99 6.7.2.1 */ + member_declaration_list T_RBRACE | T_RBRACE { /* XXX: This is not allowed by any C standard. */ $$ = NULL; } ; -struct_declaration_list: /* C99 6.7.2.1 */ - struct_declaration - | struct_declaration_list struct_declaration { +/* K&R ???, C90 ???, C99 6.7.2.1, C11 6.7.2.1, C23 6.7.2.1 */ +/* Was named struct_declaration_list until C11. */ +member_declaration_list: + member_declaration + | member_declaration_list member_declaration { $$ = concat_symbols($1, $2); } ; -struct_declaration: /* C99 6.7.2.1 */ +/* Was named struct_declaration until C11. */ +/* K&R ???, C90 ???, C99 6.7.2.1, C11 6.7.2.1, C23 6.7.2.1 */ +member_declaration: begin_type_qualifier_list end_type { /* ^^ There is no check for the missing type-specifier. */ /* too late, i know, but getsym() compensates it */ set_symtyp(FMEMBER); - } notype_struct_declarators type_attribute_opt T_SEMI { + } notype_member_declarators type_attribute_opt T_SEMI { set_symtyp(FVFT); $$ = $4; } | begin_type_specifier_qualifier_list end_type { set_symtyp(FMEMBER); - } type_struct_declarators type_attribute_opt T_SEMI { + } type_member_declarators type_attribute_opt T_SEMI { set_symtyp(FVFT); $$ = $4; } @@ -1075,54 +1083,60 @@ struct_declaration: /* C99 6.7.2.1 */ } ; -notype_struct_declarators: - notype_struct_declarator { +/* Was named struct_declarators until C11. */ +notype_member_declarators: + notype_member_declarator { $$ = declare_member($1); } - | notype_struct_declarators { + | notype_member_declarators { set_symtyp(FMEMBER); - } T_COMMA type_struct_declarator { + } T_COMMA type_member_declarator { $$ = concat_symbols($1, declare_member($4)); } ; -type_struct_declarators: - type_struct_declarator { +/* Was named struct_declarators until C11. */ +type_member_declarators: + type_member_declarator { $$ = declare_member($1); } - | type_struct_declarators { + | type_member_declarators { set_symtyp(FMEMBER); - } T_COMMA type_struct_declarator { + } T_COMMA type_member_declarator { $$ = concat_symbols($1, declare_member($4)); } ; -notype_struct_declarator: +/* Was named struct_declarator until C11. */ +notype_member_declarator: notype_declarator - | notype_declarator T_COLON constant_expr { /* C99 6.7.2.1 */ + /* C99 6.7.2.1 */ + | notype_declarator T_COLON constant_expression { $$ = set_bit_field_width($1, to_int_constant($3, true)); } + /* C99 6.7.2.1 */ | { set_symtyp(FVFT); - } T_COLON constant_expr { /* C99 6.7.2.1 */ + } T_COLON constant_expression { $$ = set_bit_field_width(NULL, to_int_constant($3, true)); } ; -type_struct_declarator: +/* Was named struct_declarator until C11. */ +type_member_declarator: type_declarator - | type_declarator T_COLON constant_expr { + | type_declarator T_COLON constant_expression { $$ = set_bit_field_width($1, to_int_constant($3, true)); } | { set_symtyp(FVFT); - } T_COLON constant_expr { + } T_COLON constant_expression { $$ = set_bit_field_width(NULL, to_int_constant($3, true)); } ; /* K&R ---, C90 6.5.2.2, C99 6.7.2.2, C11 6.7.2.2 */ -enum_specifier: /* C99 6.7.2.2 */ +enum_specifier: enum gcc_attribute_specifier_list_opt identifier_sym { $$ = make_tag_type($3, ENUM, false, false); } @@ -1191,7 +1205,7 @@ enumerator: /* C99 6.7.2.2 */ $$ = enumeration_constant($1, enumval, true); } | identifier_sym gcc_attribute_specifier_list_opt - T_ASSIGN constant_expr { + T_ASSIGN constant_expression { $$ = enumeration_constant($1, to_int_constant($4, true), false); } @@ -1437,7 +1451,7 @@ array_size_opt: ; array_size: - type_qualifier_list_opt T_SCLASS constant_expr { + type_qualifier_list_opt T_SCLASS constant_expression { /* C11 6.7.6.3p7 */ if ($2 != STATIC) yyerror("Bad attribute"); @@ -1451,7 +1465,7 @@ array_size: yyerror("Bad attribute"); $$ = NULL; } - | constant_expr + | constant_expression ; identifier_list: /* C99 6.7.5 */ @@ -1684,16 +1698,17 @@ designator: /* C99 6.7.8 "Initializati ; static_assert_declaration: - T_STATIC_ASSERT T_LPAREN constant_expr T_COMMA T_STRING T_RPAREN T_SEMI /* C11 */ - | T_STATIC_ASSERT T_LPAREN constant_expr T_RPAREN T_SEMI /* C23 */ + T_STATIC_ASSERT T_LPAREN + constant_expression T_COMMA T_STRING T_RPAREN T_SEMI /* C11 */ + | T_STATIC_ASSERT T_LPAREN constant_expression T_RPAREN T_SEMI /* C23 */ ; range: - constant_expr { + constant_expression { $$.lo = to_int_constant($1, true); $$.hi = $$.lo; } - | constant_expr T_ELLIPSIS constant_expr { + | constant_expression T_ELLIPSIS constant_expression { $$.lo = to_int_constant($1, true); $$.hi = to_int_constant($3, true); /* initialization with '[a...b]' is a GCC extension */ @@ -1727,7 +1742,8 @@ asm_or_symbolrename_opt: /* GCC extensio } ; -statement: /* C99 6.8 */ +/* K&R ???, C90 ???, C99 6.8, C11 ???, C23 6.8 */ +statement: expression_statement | non_expr_statement ; @@ -1753,11 +1769,11 @@ label: set_symtyp(FLABEL); named_label(getsym($1)); } - | T_CASE constant_expr T_COLON { + | T_CASE constant_expression T_COLON { case_label($2); seen_fallthrough = true; } - | T_CASE constant_expr T_ELLIPSIS constant_expr T_COLON { + | T_CASE constant_expression T_ELLIPSIS constant_expression T_COLON { /* XXX: We don't fill all cases */ case_label($2); seen_fallthrough = true; @@ -2191,8 +2207,8 @@ gcc_attribute: ; gcc_attribute_parameters: - constant_expr - | gcc_attribute_parameters T_COMMA constant_expr + constant_expression + | gcc_attribute_parameters T_COMMA constant_expression ; sys: