* [PATCH v2 0/2] Fix truncation warnings from building test_scanf.c
@ 2021-05-25 11:05 Richard Fitzgerald
2021-05-25 11:05 ` [PATCH v2 1/2] lib: test_scanf: Remove pointless use of type_min() with unsigned types Richard Fitzgerald
0 siblings, 1 reply; 3+ messages in thread
From: Richard Fitzgerald @ 2021-05-25 11:05 UTC (permalink / raw)
To: pmladek, rostedt, sergey.senozhatsky, andriy.shevchenko, linux,
w, davem, kuba
Cc: netdev, linux-kernel, patches, Richard Fitzgerald
The kernel test robot is reporting truncation warnings when building
lib/test_scanf.c:
1) lib/test_scanf.c:250:9: sparse: sparse: cast truncates bits from
constant value (ffff0001 becomes 1)
Reported on several lines.
2) include/linux/prandom.h:114:45: sparse: sparse: cast truncates bits
from constant value (4f2e5357408c3c09 becomes 408c3c09)
(1) is caused by test_scanf.c using type_min() on an unsigned type. The
truncation is expected but the use of type_min() on an unsigned is
unnecessary because we know it is always 0.
(2) is caused by prandom_seed_state() storing a modified u64 seed value
into a u32 - sparse will warn that this causes a truncation.
The two patches in this series fix these problems.
Richard Fitzgerald (2):
lib: test_scanf: Remove pointless use of type_min() with unsigned
types
random32: Fix implicit truncation warning in prandom_seed_state()
include/linux/prandom.h | 2 +-
lib/test_scanf.c | 13 ++++++-------
2 files changed, 7 insertions(+), 8 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2 1/2] lib: test_scanf: Remove pointless use of type_min() with unsigned types
2021-05-25 11:05 [PATCH v2 0/2] Fix truncation warnings from building test_scanf.c Richard Fitzgerald
@ 2021-05-25 11:05 ` Richard Fitzgerald
0 siblings, 0 replies; 3+ messages in thread
From: Richard Fitzgerald @ 2021-05-25 11:05 UTC (permalink / raw)
To: pmladek, rostedt, sergey.senozhatsky, andriy.shevchenko, linux,
w, davem, kuba
Cc: netdev, linux-kernel, patches, Richard Fitzgerald
sparse was producing warnings of the form:
sparse: cast truncates bits from constant value (ffff0001 becomes 1)
There is no actual problem here. Using type_min() on an unsigned type
results in an (expected) truncation.
However, there is no need to test an unsigned value against type_min().
The minimum value of an unsigned is obviously 0, and any value cast to
an unsigned type is >= 0, so for unsigneds only type_max() need be tested.
This patch also takes the opportunity to clean up the implementation of
simple_numbers_loop() to use a common pattern for the positive and
negative test.
Reported-by: kernel test robot <lkp@intel.com>
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
---
lib/test_scanf.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/lib/test_scanf.c b/lib/test_scanf.c
index 8d577aec6c28..48ff5747a4da 100644
--- a/lib/test_scanf.c
+++ b/lib/test_scanf.c
@@ -187,8 +187,8 @@ static const unsigned long long numbers[] __initconst = {
#define value_representable_in_type(T, val) \
(is_signed_type(T) \
? ((long long)(val) >= type_min(T)) && ((long long)(val) <= type_max(T)) \
- : ((unsigned long long)(val) >= type_min(T)) && \
- ((unsigned long long)(val) <= type_max(T)))
+ : ((unsigned long long)(val) <= type_max(T)))
+
#define test_one_number(T, gen_fmt, scan_fmt, val, fn) \
do { \
@@ -204,12 +204,11 @@ do { \
int i; \
\
for (i = 0; i < ARRAY_SIZE(numbers); i++) { \
- if (!value_representable_in_type(T, numbers[i])) \
- continue; \
+ if (value_representable_in_type(T, numbers[i])) \
+ test_one_number(T, gen_fmt, scan_fmt, \
+ numbers[i], fn); \
\
- test_one_number(T, gen_fmt, scan_fmt, numbers[i], fn); \
- \
- if (is_signed_type(T)) \
+ if (value_representable_in_type(T, -numbers[i])) \
test_one_number(T, gen_fmt, scan_fmt, \
-numbers[i], fn); \
} \
--
2.20.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v2 0/2] Fix truncation warnings from building test_scanf.c
@ 2021-05-25 12:20 Richard Fitzgerald
0 siblings, 0 replies; 3+ messages in thread
From: Richard Fitzgerald @ 2021-05-25 12:20 UTC (permalink / raw)
To: pmladek, rostedt, sergey.senozhatsky, andriy.shevchenko, linux,
w, davem, kuba
Cc: netdev, linux-kernel, patches, Richard Fitzgerald
The kernel test robot is reporting truncation warnings when building
lib/test_scanf.c:
1) lib/test_scanf.c:250:9: sparse: sparse: cast truncates bits from
constant value (ffff0001 becomes 1)
Reported on several lines.
2) include/linux/prandom.h:114:45: sparse: sparse: cast truncates bits
from constant value (4f2e5357408c3c09 becomes 408c3c09)
(1) is caused by test_scanf.c using type_min() on an unsigned type. The
truncation is expected but the use of type_min() on an unsigned is
unnecessary because we know it is always 0.
(2) is caused by prandom_seed_state() storing a modified u64 seed value
into a u32 - sparse will warn that this causes a truncation.
The two patches in this series fix these problems.
Richard Fitzgerald (2):
lib: test_scanf: Remove pointless use of type_min() with unsigned
types
random32: Fix implicit truncation warning in prandom_seed_state()
include/linux/prandom.h | 2 +-
lib/test_scanf.c | 13 ++++++-------
2 files changed, 7 insertions(+), 8 deletions(-)
--
2.20.1
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-05-25 12:21 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-25 11:05 [PATCH v2 0/2] Fix truncation warnings from building test_scanf.c Richard Fitzgerald
2021-05-25 11:05 ` [PATCH v2 1/2] lib: test_scanf: Remove pointless use of type_min() with unsigned types Richard Fitzgerald
2021-05-25 12:20 [PATCH v2 0/2] Fix truncation warnings from building test_scanf.c Richard Fitzgerald
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).