Since cgram.y 1.325 from 2021-07-15, conditional expressions did not
accept a comma-expression in the then-branch anymore. In practice, this
is an edge case though since comma expressions are rare.
The grammar rule for assignment_expression is quite different from those
of the other expressions, for 2 reasons: first, its precedence is
right-to-left. Second, its left-hand side must be an lvalue, which
rules out all binary operators. K&R C even had a grammar rule named
'lvalue' for this purpose. Later C standards made the kinds of
expressions more fine-grained and used 'unary_expression' in this place.
Since cgram.y 1.325 from 2021-07-15, these are not needed anymore.
Strangely, neither yacc nor Bison warned about this redundancy.
No functional change, the grammar rules are the same as before.
This reduces the number of string comparisons for function names that
start with 'is' or 'to'.
The tests now cover function names that start with 'is' or 'to' but are
not one of the well-known functions from ctype.h. This removes the '*'
in the output from gcov.
No functional change.
The 9 shift/reduce conflicts were all internal to the grammar rule
begin_type_specifier_qualifier_list. Previously, there were two
possible ways to parse '__attribute__(()) const int':
1. '__attribute__(())' 'const int'
2. '__attribute__(()) const' 'int'
Both ways would produce the same result since __attribute__ has almost
no observable effects on the resulting type.
No functional change.
The __attribute__ after the enumerators will be fixed in a follow-up
commit since lint exits after the 5th syntax error in a translation
unit, which up to now shadowed the error messages about the enumerators.
By removing the misplaced grammar rule 'abstract_declarator: T_TYPEOF',
the type expression 'typeof(double(typeof(0.0)))' is no longer
interpreted as a declarator, but rather as a type specifier, just as in
the GCC parser.
This resolves 7 shift/reduce conflicts.
This probably doesn't matter in practice since the compiler is supposed
to catch this kind of error. Adding the type information mainly ensures
that parsing abstract type names works as specified.
all, it does not actually kill anything because the process executing
the execsnoop script is called "sh", not "execsnoop". And even if it
would somehow kill the shell running the execsnoop script, it still
would not kill the dtrace child process. On the other hand, if there
happened to be an unrelated process actually called "execsnoop", it
would kill that.
The actual killing of the execsnoop sh and dtrace processes happens in
the ATF cleanup stage (as it always has).
These errors are really unrealistic. Most parse errors that occur in
statements are already handled elsewhere and continue with the next
semicolon.
The tests had to be split into two separate files because lint assumes
that after the 5th parse error, it does not make sense to continue this
translation unit.
of active members in the pool cache (plus some slop) instead of looking
in all the free buffer list. Should reduce CPU usage for "systat vm"
to << 1% especially for machines with a larger number of buffers.