[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Invalid _Static_assert expanded from HASH_CALLBACKS_CHECK
Hi Jan. Please see below. 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. Kind regards, Roberto
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |