Commit Graph

17516 Commits

Author SHA1 Message Date
rillig
ac846d67c2 lint: warn about unreachable statement after joining the 'if' branches 2021-03-21 19:14:40 +00:00
rillig
f32d16fd5a lint: invert 'rchflag', call it warn_about_unreachable instead
No functional change.
2021-03-21 19:08:10 +00:00
rillig
5db61676e0 lint: reduce number of places where 'reached' is set
When determining the reachability of a statement, the idea was that
whenever 'reached' was set to false, 'rchflg' (the abbreviation for "do
not warn about unreachable statements") would be reset as well.

In some (trivial) cases, this was done, but many more interesting cases
simply forgot to set this second variable.  To prevent this in the
future, encapsulate this in a simple helper function.

Now even if a statement is reachable, 'rchflg' gets reset.  This does
not hurt since as long as the current statement is reachable, the value
of 'rchflg' does not matter.

No functional change.  There would be quite a big functional change
though if check_statement_reachable were to reset 'rchflg' instead of
'reached', as the comment already suggests.  In that case, with the
current code, many legitimate warnings about unreachable statements
would be skipped, especially those involving 'if' statements, since
these didn't reset 'rchflg' properly before.
2021-03-21 18:58:34 +00:00
rillig
792d6541e8 lint: fix reachability for while (0) 2021-03-21 15:44:57 +00:00
rillig
62b887ae9d lint: fix reachability for constant controlling expression in for loop 2021-03-21 15:34:13 +00:00
rillig
352b5b3b4b lint: fix reachability for if-then-else statements 2021-03-21 15:24:55 +00:00
rillig
f23731fc8b lint: rename functions for handling control statements
No functional change.
2021-03-21 14:49:21 +00:00
rillig
97e5c72af7 lint: fix reachability computation in if statements
Previously, only loop statements were considered for reachability.  This
ignored the possibility of an early return in an if statement, or
unreachable branches.
2021-03-21 14:36:59 +00:00
rillig
65ab73b7c4 lint: add missing space when adding a new test case 2021-03-21 13:10:58 +00:00
rillig
4e6f02877c lint: rename c_rchif to c_reached_end_of_then
No functional change.
2021-03-21 13:03:42 +00:00
rillig
d19f53645a lint: document why an unreachable statement is set to reachable
No functional change.
2021-03-21 12:10:27 +00:00
rillig
2703dc53ce lint: rename c_cont to c_continue
No functional change.
2021-03-21 12:08:34 +00:00
rillig
20bc44c056 lint: document the precise meaning of control_statement.c_break
No functional change.
2021-03-21 12:06:10 +00:00
rillig
6c32983dfe lint: rename i_infinite to i_maybe_endless
Not every loop that has 'while (1)' is an endless loop.  It may still
contain a 'return' somewhere.
2021-03-21 12:03:56 +00:00
rillig
8c4298c341 lint: fix wrong 'falls off bottom' after return in do-while 2021-03-21 11:55:59 +00:00
rillig
85a09d20fa lint: fix wrong 'statement not reached' in do-while loop 2021-03-21 11:48:04 +00:00
rillig
299565f1d9 lint: remove redundant braces in doreturn
No functional change.
2021-03-21 11:38:24 +00:00
nia
bc9df35069 audioctl.1: describe foibles 2021-03-21 10:50:08 +00:00
rillig
07746a75ad lint: rename d_fargs, d_fdpos and d_fpsyms to be less abbreviated
No functional change.
2021-03-21 10:30:28 +00:00
rillig
4baf940241 lint: rename d_nedecl to d_nonempty_decl
No functional change.
2021-03-21 10:25:40 +00:00
rillig
b7e78ec23d lint: rename d_rdcsym to d_redeclared_symbol
No functional change.
2021-03-21 10:21:07 +00:00
rillig
94e7a0615e lint: inline local variable in declarator_1_struct_union
No functional change.
2021-03-21 10:16:12 +00:00
rillig
c509e4baa5 lint: rename clst to case_labels
No functional change.
2021-03-21 10:08:01 +00:00
rillig
7dc34efc1f lint: rename declspecs to declaration_specifiers, just as in C99
No functional change.
2021-03-21 09:54:02 +00:00
rillig
7e6909cce4 lint: rename grammar rule 'data_def' to 'top_level_declaration'
No functional change.
2021-03-21 09:49:34 +00:00
rillig
6474e49f87 lint: remove redundant '%prec' declarations from the grammar
No change to the generated binary.
2021-03-21 09:22:35 +00:00
rillig
4629487630 lint: rename token T_XOR to T_BITXOR
For symmetry with the operator, which is named BITXOR.

No functional change.
2021-03-21 08:55:59 +00:00
rillig
63f810f095 lint: in debug output, use uniform file location references
This makes it easy to click on the location in the IDE instead of having
to manually parse the location and navigate to it.

No functional change outside debug mode.
2021-03-21 08:52:05 +00:00
rillig
389a384e79 lint: remove redundant operator information from the grammar
Several tokens can only ever map to a single operator and thus do not
need to encode the operator.  Indeed, they already encoded it as NOOP,
and it was not used by any grammar rule.

No functional change.
2021-03-21 08:46:26 +00:00
cheusov
d7beb5fa1a seq.c: replace non-standard \e with standard compliant \x1B 2021-03-20 22:10:17 +00:00
rillig
b48597d41d lint: clean up new_name_node
No functional change.
2021-03-20 21:08:09 +00:00
rillig
440cc62809 lint: move getopname over to tree.c
Except for the one use in print_tnode, the name of the operator is only
used in tree.c.

No functional change.
2021-03-20 20:56:58 +00:00
rillig
ea582d3e24 lint: remove redundant operator properties table
It's enough to have modtab, which describes the properties of the
various operators.  There is no need to have a second table imods that
holds the same content.  Rather make modtab constant as well.

The only possible functional change is that the names of the internal
operators 'no-op', '++', '--', 'real', 'imag' and 'case' may appear in
diagnostics, where previously lint invoked undefined behavior by passing
a null pointer for a '%s' conversion specifier.
2021-03-20 20:39:35 +00:00
rillig
d6f490fd83 lint: fix argument names and table headings for operator definitions
The abbreviations in the table of operator properties had been wrong
since ops.def 1.10 from 2021-01-12, when strict bool mode was added.  In
an earlier working draft, I had named that column 'takes_others' instead
of 'requires_bool', that's where the 'o' came from.

The names of the macro arguments had been wrong since op.h 1.11 from
2021-01-09, when the order of the columns changed and the macros were
not adjusted accordingly.  Since all the properties of the operator
table are uniform, this didn't result in any bugs, it was just confusing
for human readers.

Clang-tidy suggests to enclose the macro arguments in oper.c in
parentheses but that is not possible since the arguments are either
empty or 1, and the syntactical ambiguity of the '+ 0' being either a
unary or a binary operator is needed here.

No change to the resulting binary.
2021-03-20 20:15:37 +00:00
rillig
5019ab66ba lint: make lint's own code pass the strict bool mode
No functional change.
2021-03-20 19:33:25 +00:00
rillig
7ccd7b1468 lint: use macro for initializing keywords table
Since today, lint's strict bool mode requires initializers to have the
correct type.  The flags in kwtab are of type bool and were initialized
with an int, for brevity.  Keep the brevity and do the conversion from
int to bool in a macro.

By defining several macros for the different kinds of keywords, reduce
the clutter of having 2 additional zeroes per line.  The macros also
remove the redundancy and thereby the possible inconsistency of filling
the wrong fields since these depend on the token type.

No functional change.  The only change to the binary is due to the
changed line numbers in the calls to lint_assert.
2021-03-20 19:24:56 +00:00
rillig
e18860fa07 lint: use macro for encoding type information
In lint's strict bool mode, initialization must be of the correct type.
This affects the bool fields in ttab_t, which are initialized with int.
To keep the code brief, preserve these ints and let a macro do the
actual work of converting them to bool.

No change to the generated binary.
2021-03-20 18:59:00 +00:00
rillig
6a451d6268 lint: inline access to type properties in check_bad_enum_operation
No functional change.
2021-03-20 18:38:25 +00:00
rillig
10736dfe07 lint: in strict bool mode, check initialization as well
C99 6.7.8p11 says for initialization that "the same type constraints and
conversions as for simple assignments apply", so actually apply them.
(I had just forgotten this "operator" when I first implemented strict
bool mode.)
2021-03-20 17:18:50 +00:00
rillig
87876a2355 lint: rename ftflg to seen_fallthrough
One less abbreviation to remember when reading the code.

No functional change.
2021-03-20 16:16:32 +00:00
rillig
73790b7671 lint: make the calls to clear_warning_flags stand out less
Even though clear_warning_flags and its companions are implemented as
macros, they act like ordinary functions.  Do not distract the reader by
using uppercase names for them.

No functional change.
2021-03-20 16:11:12 +00:00
rillig
f5c815bc77 lint: clean up grammar for declaration after statement
No functional change.
2021-03-20 15:30:58 +00:00
rillig
fb9b10bc8d lint: fix check for declaration after statement in pre-C99 mode
The new code may not be the most beautiful, but it fixes all bugs that
occurred while testing message 327.  The grammar rules are taken from
C99 6.8.2, so it's no surprise they work well.
2021-03-20 15:28:07 +00:00
cheusov
736f809ed1 cmp.c: use C99 strtoll(3) instead of legacy strtoq(3) 2021-03-20 14:27:47 +00:00
rillig
daef7ea921 lint: properly name C99 in message about declaration after statement
Now that C99 has been released and published, there is no reason anymore
to refer to it as C9X.
2021-03-20 14:17:56 +00:00
rillig
b925668ec9 lint: use proper boolean literals instead of 0/1
The code in the C grammar is generated by yacc and is not checked by
lint's strict bool mode, therefore the replacement was done manually.

No change to the resulting change.
2021-03-20 13:53:28 +00:00
rillig
e4fa7e61a5 lint: update comment on setasm for C99
No functional change.
2021-03-20 13:25:31 +00:00
rillig
4f4415984d lint: reduce indentation and braces in merge_type_specifiers
No functional change.
2021-03-20 13:22:06 +00:00
rillig
e305d7be33 lint: extract adjusting of the storage class into separate function
No functional change.
2021-03-20 13:06:05 +00:00
rillig
1cf2c45884 lint: document the struct for declarations more precisely
No functional change.
2021-03-20 13:00:43 +00:00