Commit Graph

1748 Commits

Author SHA1 Message Date
rillig 0382e641fc lint: in the query about implicit conversions, ignore casts 2024-03-30 19:12:37 +00:00
rillig 370056d3b9 lint: add query for implicit integer-to-floating conversion 2024-03-30 17:23:13 +00:00
rillig def8e1797a lint: do not convert array subscripts from size_t to ptrdiff_t
The C standards do not specify a fixed type for an array subscript, it
just has to be an integer type.  Previously, query 4 fired for the
ubiquitous expression 'ptr[sz]' when sz had type 'size_t'.

The test platform_ilp32_long is unaffected by this change, as the
integer constant 0x80000000 has type 'unsigned int', while size_t is
'unsigned long' on those platforms, and even though the types 'unsigned
int' and 'unsigned long' have the same value space, there's still a
conversion, at least for now.
2024-03-30 17:12:26 +00:00
rillig c6466ed0f7 lint: reword messages about array subscripts to sound more natural 2024-03-30 16:47:44 +00:00
rillig 55398a9a51 lint: fix wording of warning about bit-field initializer 2024-03-29 07:35:45 +00:00
rillig 134116ce30 lint: clean up 2024-03-28 21:04:48 +00:00
rillig 8910413e27 lint: clean up; extend overflow test 2024-03-27 20:09:43 +00:00
rillig e57698da95 lint: don't use 'long' in diagnostics
The size of 'long' differs between 64-bit and 32-bit platforms.
Eliminate this possible platform-dependency.
2024-03-27 19:28:20 +00:00
rillig 216c89c02b lint: fix warnings about loss of accuracy on bit-field operations 2024-03-25 23:39:13 +00:00
rillig 6167e0cc12 tests/lint: demonstrate wrong warnings about lossy bit field operations 2024-03-25 22:46:23 +00:00
rillig 64230f3217 lint: rename snprintb 'directives' to 'conversions'
This aligns the terminology with the snprintf function.
2024-03-25 22:37:43 +00:00
rillig 083828859c stat: don't allow numeric formatting flags on strings
Calling snprintf with "%+s" invokes undefined behavior.
2024-03-14 21:17:54 +00:00
rillig 897cdf26ba tests/stat: test the left-aligned and right-aligned 'S' format 2024-03-14 21:00:32 +00:00
rillig 9ca08a6937 tests/lint: ensure that lint correctly decays array parameter types 2024-03-13 06:56:24 +00:00
rillig 9ed4dea22d tests/lint: extend test for previously wrong warning about bit-fields 2024-03-12 20:35:29 +00:00
rillig 9b239cc71c lint: fix warning about loss of conversion for unsigned bit-fields
Since decl.c 1.180 from 2021-05-02.
2024-03-12 07:56:08 +00:00
rillig fc2f5e14be tests/lint: demonstrate wrong warning when comparing a bit-field
Since decl.c 1.180 from 2021-05-02, which allowed arbitrary integer
types to be used as the underlying type for bit-fields in GCC mode.
2024-03-12 07:29:39 +00:00
rillig dd848dec1a lint: add details to the message about integer overflow
Having only the operator was too unspecific to be actionable, so add the
actual numbers and the data type.
2024-03-10 19:45:14 +00:00
rillig bd9743d3db lint: saturate signed integer overflow
In array address calculations, this prevents a 'array subscript cannot
be negative' for large array subscripts.
2024-03-10 16:06:13 +00:00
rillig 08d1bd5c72 lint: fix integer overflow detection
Previously, an unsigned operation that had a negative result went
undetected in a few cases. Now, all results that are not representable
by their type are considered overflows.

The implementation of signed shift-right had been wrong for a few
commits.
2024-03-10 15:49:12 +00:00
rillig 51858eeb3e lint: detect more cases of integer overflow in constant expressions
For unsigned integers, detect when 'a + b' wraps around.
2024-03-10 14:32:30 +00:00
rillig 7d57e750b8 tests/lint: enable test for integer overflow in array index 2024-03-10 10:39:19 +00:00
rillig 25f6e58591 lint: remove wrong warning about overflow in unary '-' for unsigned 2024-03-10 10:31:29 +00:00
rillig 34885a599d lint: fix integer overflow in integer overflow check 2024-03-10 10:15:51 +00:00
rillig 16f849b643 tests/lint: test integer overflow when folding constants
The test is still incomplete, yet it has discovered several bugs that
are worth fixing.
2024-03-10 09:58:30 +00:00
rillig 3e856647d2 lint: fix excessive overflow warning after division by zero 2024-03-09 23:55:11 +00:00
rillig 2b5c0f6a77 tests/lint: demonstrate integer overflow on lp64 platforms 2024-03-09 17:34:01 +00:00
rillig d6cf182bfe tests/lint: test check for out-of-bounds array index 2024-03-09 16:47:09 +00:00
rillig 5926386128 lint: clean up string parsing and snprintb check 2024-03-03 16:09:01 +00:00
rillig 3d5fc26390 lint: warn about escaped snprintb directive
Repurpose message 362, as the previous version was redundant since null
bytes in old-style formats are already covered by message 371 (bit
position out of range) and 377 (redundant '\0' at the end).
2024-03-03 13:09:22 +00:00
rillig a8d07ea3d1 lint: fix warning about "empty" single-letter snprintb descriptions 2024-03-03 10:27:18 +00:00
rillig c9de07fbb0 lint: check for unreachable bits and fields in snprintb formats
While here, clean up a few existing checks.
2024-03-03 00:50:41 +00:00
rillig 1ec17c714c lint: check snprintb formats for overlapping bits and fields 2024-03-02 11:56:37 +00:00
rillig 38c0bdf232 lint: test format strings from snprintb calls
The functions snprintb and snprintb_m are specific to NetBSD, and their
format strings are tricky to get correct.  Provide some assistance in
catching the most common mistakes.
2024-03-01 19:39:28 +00:00
rillig 9e211f3599 tests/lint: remove redundant documentation 2024-03-01 17:22:55 +00:00
rillig d06187ed85 tests/lint: sync test for integer constant type on ILP32 platforms
The test was broken since lex.c 1.214 from today.
2024-02-07 22:59:28 +00:00
rillig 26428579ad lint: unify rules for determining the type of an integer constant
Previously, in traditional C mode, large decimal numbers were treated as
unsigned, which disagreed with the book from 1978.
2024-02-07 07:42:50 +00:00
rillig 139c6401cd lint: warn about short octal escape followed by '8' or '9'
These mistakes is typically found in snprintb format directives but is
probably a typo everywhere else as well.
2024-02-03 20:10:10 +00:00
rillig 2b097c752f tests/lint: extend tests for hexadecimal character escapes 2024-02-03 19:18:36 +00:00
rillig 29354841ac lint: allow hexadecimal character escapes up to UINT_MAX
Previously, any value larger than INT_MAX was regarded as negative and
thus terminated the loop around get_escaped_char.
2024-02-03 18:58:05 +00:00
rillig 661078afe6 lint: remove unused code for converting multibyte character sequences 2024-02-03 10:56:18 +00:00
rillig c1862de9dd lint: allow larger numbers in escapes for wide characters and strings 2024-02-03 10:01:58 +00:00
rillig bc5123edee tests/lint: test octal escapes in character and wide strings 2024-02-03 09:36:14 +00:00
rillig 03951da31e lint: use the locale for interpreting wide character strings 2024-02-02 23:36:01 +00:00
rillig 3454588e0f tests/lint: test UTF-8 mode 2024-02-02 23:30:38 +00:00
rillig 708a1296c5 tests/lint: add UTF-8 test for string literals 2024-02-02 22:45:48 +00:00
rillig 183f84fe87 tests/lint: test lexing of characters and strings 2024-02-02 19:07:57 +00:00
rillig 8016349204 lint: fix debug output for strings, reduce code size
The debug output contained too many newlines.

The buffer functions were built into lint2 even though they weren't
used.

Enable the query for invisible characters in string literals, to make
sure that a newline in a string literal does not trigger that query.
2024-02-02 16:25:58 +00:00
rillig 402b4579b3 lint: make newline in a string literal an error in C90 and later 2024-02-02 16:05:37 +00:00
martin e9be82c8ac Skip the dtb set if the /boot partition is not mounted. 2024-01-30 16:57:32 +00:00