[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Invalid _Static_assert expanded from HASH_CALLBACKS_CHECK
On 28.05.2021 11:59, Roberto Bagnara wrote: > On 25/05/21 10:58, Jan Beulich wrote: >> On 24.05.2021 06:29, Roberto Bagnara wrote: >>> I stumbled upon parsing errors due to invalid uses of >>> _Static_assert expanded from HASH_CALLBACKS_CHECK where >>> the tested expression is not constant, as mandated by >>> the C standard. >>> >>> Judging from the following comment, there is partial awareness >>> of the fact this is an issue: >>> >>> #ifndef __clang__ /* At least some versions dislike some of the uses. */ >>> #define HASH_CALLBACKS_CHECK(mask) \ >>> BUILD_BUG_ON((mask) > (1U << ARRAY_SIZE(callbacks)) - 1) >>> >>> Indeed, this is not a fault of Clang: the point is that some >>> of the expansions of this macro are not C. Moreover, >>> the fact that GCC sometimes accepts them is not >>> something we can rely upon: >>> >>> $ cat p.c >>> void f() { >>> static const int x = 3; >>> _Static_assert(x < 4, ""); >>> } >>> $ gcc -c -O p.c >>> $ gcc -c p.c >>> p.c: In function ‘f’: >>> p.c:3:20: error: expression in static assertion is not constant >>> 3 | _Static_assert(x < 4, ""); >>> | ~^~ >>> $ >> >> I'd nevertheless like to stick to this as long as not proven >> otherwise by future gcc. > > Just two observations: > > 1) Violating the C standard makes MISRA complicance significantly > more difficult. In addition, it complicates also compiler > qualification, for those who are required to do it. > > 2) GCC is already proving otherwise: if you try compiling > without optimization, compilation fails. I'm afraid we have other issues when building without optimization. In any event - feel free to contribute a patch. As said, I'm not the maintainer of that piece of code, and you may well find him agreeing with such a change. He didn't reply yet on the earlier mail, which would be a prereq to me possibly making a patch myself. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |