common/sfc: replace out of bounds condition with static_assert
Checks
Commit Message
The sfc base code had its own definition of static assertions
using the out of bound array access hack. This method does
not force the condition to be const and can have false negatives.
Better to use static_assert() like other places in DPDK.
Fixes: f67e4719147d ("net/sfc/base: fix coding style")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Morten Brørup <mb@smartsharesystems.com>
Reviewed-by: Morten Brørup <mb@smartsharesystems.com>
---
v3 - change the macro to workaround issues with older clang.
Compiles on Debian testing with Gcc and Clang.
drivers/common/sfc_efx/base/efx.h | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
@@ -7,6 +7,8 @@
#ifndef _SYS_EFX_H
#define _SYS_EFX_H
+#include <assert.h>
+
#include "efx_annote.h"
#include "efsys.h"
#include "efx_types.h"
@@ -17,8 +19,14 @@
extern "C" {
#endif
-#define EFX_STATIC_ASSERT(_cond) \
- ((void)sizeof (char[(_cond) ? 1 : -1]))
+/*
+ * Triggers an error at compilation time if the condition is false.
+ *
+ * The { } exists to workaround a bug in clang (#55821)
+ * where it would not handle _Static_assert in a switch case.
+ */
+#define EFX_STATIC_ASSERT(_cond) \
+ { static_assert((_cond), #_cond); }
#define EFX_ARRAY_SIZE(_array) \
(sizeof (_array) / sizeof ((_array)[0]))