[PATCH] common/sfc: replace out of bounds condition with static_assert
Stephen Hemminger
stephen at networkplumber.org
Sun Feb 11 23:24:15 CET 2024
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 at networkplumber.org>
Acked-by: Morten Brørup <mb at smartsharesystems.com>
Reviewed-by: Morten Brørup <mb at 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(-)
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
More information about the dev
mailing list