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 <[email protected]>
Acked-by: Morten Brørup <[email protected]>
Reviewed-by: Morten Brørup <[email protected]>
---
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(-)
diff --git a/drivers/common/sfc_efx/base/efx.h
b/drivers/common/sfc_efx/base/efx.h
index 3312c2fa8f81..d2fa6bf49396 100644
--- a/drivers/common/sfc_efx/base/efx.h
+++ b/drivers/common/sfc_efx/base/efx.h
@@ -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]))
--
2.43.0