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