Module Name: src
Committed By: rillig
Date: Wed Jul 21 21:24:45 UTC 2021
Modified Files:
src/usr.bin/xlint/lint1: cgram.y
Log Message:
lint: move assignments to $$ at the end of the action
They are closely related to return statements.
While here, add some more remarks from reviewing the grammar.
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.333 -r1.334 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.333 src/usr.bin/xlint/lint1/cgram.y:1.334
--- src/usr.bin/xlint/lint1/cgram.y:1.333 Wed Jul 21 21:17:57 2021
+++ src/usr.bin/xlint/lint1/cgram.y Wed Jul 21 21:24:45 2021
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.333 2021/07/21 21:17:57 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.334 2021/07/21 21:24:45 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.333 2021/07/21 21:17:57 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.334 2021/07/21 21:24:45 rillig Exp $");
#endif
#include <limits.h>
@@ -375,12 +375,12 @@ identifier_sym: /* helper for struct/u
/* K&R ???, C90 ???, C99 6.4.2.1, C11 ??? */
identifier:
T_NAME {
+ cgram_debug("name '%s'", $1->sb_name);
$$ = $1;
- cgram_debug("name '%s'", $$->sb_name);
}
| T_TYPENAME {
+ cgram_debug("typename '%s'", $1->sb_name);
$$ = $1;
- cgram_debug("typename '%s'", $$->sb_name);
}
;
@@ -543,9 +543,9 @@ gcc_statement_expr_item:
/* XXX: do that only on the last name */
if ($1->tn_op == NAME)
$1->tn_sym->s_used = true;
- $$ = $1;
expr($1, false, false, false, false);
seen_fallthrough = false;
+ $$ = $1;
}
}
;
@@ -615,6 +615,7 @@ unary_expression:
}
/* K&R ---, C90 ---, C99 ---, C11 6.5.3 */
| T_ALIGNOF T_LPAREN type_name T_RPAREN {
+ /* TODO: c11ism */
$$ = build_alignof($3);
}
;
@@ -736,6 +737,7 @@ declaration: /* C99 6.7 */
}
}
| begin_type_declmods end_type notype_init_declarators T_SEMI
+ /* ^^ There is no check for the missing type-specifier. */
| begin_type_declaration_specifiers end_type T_SEMI {
if (dcs->d_scl == TYPEDEF) {
/* typedef declares no type name */
@@ -777,6 +779,7 @@ begin_type_specifier_qualifier_list: /*
begin_type_typespec {
add_type($1);
}
+ /* TODO: shift/reduce conflict for type_attribute */
| type_attribute begin_type_specifier_qualifier_list
| begin_type_qualifier_list type_specifier {
add_type($2);
@@ -834,6 +837,7 @@ type_attribute: /* See C11 6.7 declara
} gcc_attribute_spec_list {
attron = false;
} T_RPAREN T_RPAREN
+ /* TODO: c11ism */
| T_ALIGNAS T_LPAREN align_as T_RPAREN
| T_PACKED {
addpacked();
@@ -949,6 +953,7 @@ struct_declaration_list: /* C99 6.7.2.1
struct_declaration: /* C99 6.7.2.1 */
begin_type_qualifier_list end_type {
+ /* ^^ There is no check for the missing type-specifier. */
/* too late, i know, but getsym() compensates it */
symtyp = FMEMBER;
} notype_struct_declarators type_attribute_opt T_SEMI {
@@ -1475,12 +1480,14 @@ parameter_type_list:
/* XXX: C99 6.7.5 defines the same name, but it looks completely different. */
parameter_declaration:
begin_type_declmods end_type {
+ /* ^^ There is no check for the missing type-specifier. */
$$ = declare_argument(abstract_name(), false);
}
| begin_type_declaration_specifiers end_type {
$$ = declare_argument(abstract_name(), false);
}
| begin_type_declmods end_type notype_param_declarator {
+ /* ^^ There is no check for the missing type-specifier. */
$$ = declare_argument($3, false);
}
/*
@@ -1494,6 +1501,7 @@ parameter_declaration:
$$ = declare_argument($3, false);
}
| begin_type_declmods end_type abstract_declarator {
+ /* ^^ There is no check for the missing type-specifier. */
$$ = declare_argument($3, false);
}
| begin_type_declaration_specifiers end_type abstract_declarator {
@@ -1509,6 +1517,7 @@ initializer: /* C99 6.7.8 "Initializat
/* XXX: Empty braces are not covered by C99 6.7.8. */
}
| init_lbrace initializer_list comma_opt init_rbrace
+ /* XXX: What is this error handling for? */
| error
;
@@ -1940,9 +1949,11 @@ function_definition: /* C99 6.9.1 */
func_declarator:
begin_type end_type notype_declarator {
+ /* ^^ There is no check for the missing type-specifier. */
$$ = $3;
}
| begin_type_declmods end_type notype_declarator {
+ /* ^^ There is no check for the missing type-specifier. */
$$ = $3;
}
| begin_type_declaration_specifiers end_type type_declarator {