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