Message ID | 20240201122216.2634007-15-aleksander.lobakin@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ice: add PFCP filter support | expand |
On Thu, Feb 01, 2024 at 01:22:09PM +0100, Alexander Lobakin wrote: > Commit dc34d5036692 ("lib: test_bitmap: add compile-time > optimization/evaluations assertions") initially missed __assign_bit(), > which led to that quite a time passed before I realized it doesn't get > optimized at compilation time. Now that it does, add test for that just > to make sure nothing will break one day. > To make things more interesting, use bitmap_complement() and > bitmap_full(), thus checking their compile-time evaluation as well. And > remove the misleading comment mentioning the workaround removed recently > in favor of adding the whole file to GCov exceptions. > > Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> > Signed-off-by: Alexander Lobakin <aleksander.lobakin@intel.com> Signed-off-by: Yury Norov <yury.norov@gmail.com>
diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c index a6e92cf5266a..4ee1f8ceb51d 100644 --- a/lib/test_bitmap.c +++ b/lib/test_bitmap.c @@ -1204,14 +1204,7 @@ static void __init test_bitmap_const_eval(void) * in runtime. */ - /* - * Equals to `unsigned long bitmap[1] = { GENMASK(6, 5), }`. - * Clang on s390 optimizes bitops at compile-time as intended, but at - * the same time stops treating @bitmap and @bitopvar as compile-time - * constants after regular test_bit() is executed, thus triggering the - * build bugs below. So, call const_test_bit() there directly until - * the compiler is fixed. - */ + /* Equals to `unsigned long bitmap[1] = { GENMASK(6, 5), }` */ bitmap_clear(bitmap, 0, BITS_PER_LONG); if (!test_bit(7, bitmap)) bitmap_set(bitmap, 5, 2); @@ -1243,6 +1236,15 @@ static void __init test_bitmap_const_eval(void) /* ~BIT(25) */ BUILD_BUG_ON(!__builtin_constant_p(~var)); BUILD_BUG_ON(~var != ~BIT(25)); + + /* ~BIT(25) | BIT(25) == ~0UL */ + bitmap_complement(&var, &var, BITS_PER_LONG); + __assign_bit(25, &var, true); + + /* !(~(~0UL)) == 1 */ + res = bitmap_full(&var, BITS_PER_LONG); + BUILD_BUG_ON(!__builtin_constant_p(res)); + BUILD_BUG_ON(!res); } /*