Source-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: src



Module Name:    src
Committed By:   rillig
Date:           Tue Jan 12 20:42:01 UTC 2021

Modified Files:
        src/tests/usr.bin/xlint/lint1: d_c99_bool_strict.c
            d_c99_bool_strict.exp
        src/usr.bin/xlint/common: externs.h
        src/usr.bin/xlint/lint1: cgram.y err.c externs1.h func.c main1.c op.h
            oper.c ops.def tree.c
        src/usr.bin/xlint/lint2: main2.c
        src/usr.bin/xlint/xlint: lint.1 xlint.c
Added Files:
        src/tests/usr.bin/xlint: check-expect.lua

Log Message:
lint: add new check for strict bool mode

In strict bool mode, bool is considered incompatible with all other
scalar types, just as in Java, C#, Pascal.

The controlling expressions in if statements, while loops, for loops and
the '?:' operator must be of type bool.  The logical operators work on
bool instead of int, the bitwise operators accept both integer and bool.
The arithmetic operators don't accept bool.

Since <stdbool.h> implements bool using C preprocessor macros instead of
predefining the identifiers "true" and "false", the integer constants 0
and 1 may be used in all contexts that require a bool expression.
Except from these, no implicit conversion between bool and scalar types
is allowed.

See usr.bin/tests/xlint/lint1/d_c99_bool_strict.c for more details.

The command line option -T has been chosen because all obvious choices
(-b or -B for bool, -s or -S for strict) are already in use.  The -T may
stand for "types are checked strictly".

The default behavior of lint doesn't change.  The strict bool check is
purely optional.

An example program for strict bool mode is usr.bin/make, which has been
using explicit comparisons such as p != NULL, ch != '\0' or n > 0 in
most places for a long time now, even before the refactoring in 2020.


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/tests/usr.bin/xlint/check-expect.lua
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.c
cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/xlint/lint1/d_c99_bool_strict.exp
cvs rdiff -u -r1.12 -r1.13 src/usr.bin/xlint/common/externs.h
cvs rdiff -u -r1.138 -r1.139 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.65 -r1.66 src/usr.bin/xlint/lint1/err.c
cvs rdiff -u -r1.54 -r1.55 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.56 -r1.57 src/usr.bin/xlint/lint1/func.c
cvs rdiff -u -r1.33 -r1.34 src/usr.bin/xlint/lint1/main1.c
cvs rdiff -u -r1.11 -r1.12 src/usr.bin/xlint/lint1/op.h
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/xlint/lint1/oper.c
cvs rdiff -u -r1.9 -r1.10 src/usr.bin/xlint/lint1/ops.def
cvs rdiff -u -r1.150 -r1.151 src/usr.bin/xlint/lint1/tree.c
cvs rdiff -u -r1.10 -r1.11 src/usr.bin/xlint/lint2/main2.c
cvs rdiff -u -r1.41 -r1.42 src/usr.bin/xlint/xlint/lint.1
cvs rdiff -u -r1.52 -r1.53 src/usr.bin/xlint/xlint/xlint.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.




Home | Main Index | Thread Index | Old Index