Re: [bug report] lib: introduce test_meminit module
Alexander Potapenko <[email protected]>
| Newsgroups | gmane.linux.kernel.janitors |
|---|---|
| Message-ID | <CAG_fn=XMAqMqD8Qd_U010_m3_q+C5C=ww=92AjJa1PFM4oK4GA@mail.gmail.com> |
On Mon, May 4, 2026 at 9:36 AM Alexander Potapenko <[email protected]> wrote: > > On Thu, Apr 30, 2026 at 8:15 PM Dan Carpenter <[email protected]> wrote: > > > > Hello Alexander Potapenko, > > > > Commit 5015a300a522 ("lib: introduce test_meminit module") from Jul > > 16, 2019 (linux-next), leads to the following Smatch static checker > > warning: > > > > lib/test_meminit.c:390 test_kmemcache() > > warn: bool mask is always false 'ctor & zero' > > > > lib/test_meminit.c > > 378 static int __init test_kmemcache(int *total_failures) > > 379 { > > 380 int failures = 0, num_tests = 0; > > 381 int i, flags, size; > > 382 bool ctor, rcu, zero; > > 383 > > 384 for (i = 0; i < 10; i++) { > > 385 size = 8 << i; > > 386 for (flags = 0; flags < 8; flags++) { > > 387 ctor = flags & 1; > > 388 rcu = flags & 2; > > 389 zero = flags & 4; > > --> 390 if (ctor & zero) > > ^^^^^^^^^^^ > > This is like (BIT(1) & BIT(4)) so it can't be true. Was && intended? Well, in fact I think the "(BIT(1) & BIT(4))" part is incorrect. Both `ctor` and `zero` are _Bool, so their values are converted to 0/1 before `ctor & zero` is calculated. So while the code is smelly (because it uses `&` on a bool type) and needs fixing, the warning generated by Smatch is also misleading.