On Mon, Nov 13, 2023 at 05:12:48PM +0000, Bruce Richardson wrote:
> On Mon, Nov 13, 2023 at 09:06:05AM -0800, Stephen Hemminger wrote:
> > Both Gcc, clang and MSVC have better way to do compile time
> > assertions rather than using out of bounds array access.
> > The old method would fail if -Wvla is enabled because compiler
> > can't determine size in that code.  Also, the use of new
> > _Static_assert will catch broken code that is passing non-constant
> > expression to RTE_BUILD_BUG_ON().
> > 
> > Signed-off-by: Stephen Hemminger <step...@networkplumber.org>
> > Acked-by: Morten Brørup <m...@smartsharesystems.com>
> > Acked-by: Tyler Retzlaff <roret...@linux.microsoft.com>
> > ---
> >  lib/eal/include/rte_common.h | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/lib/eal/include/rte_common.h b/lib/eal/include/rte_common.h
> > index c1ba32d00e47..bea7c0e57d5e 100644
> > --- a/lib/eal/include/rte_common.h
> > +++ b/lib/eal/include/rte_common.h
> > @@ -16,6 +16,7 @@
> >  extern "C" {
> >  #endif
> >  
> > +#include <assert.h>
> >  #include <stdint.h>
> >  #include <limits.h>
> >  
> > @@ -495,7 +496,7 @@ rte_is_aligned(const void * const __rte_restrict ptr, 
> > const unsigned int align)
> >  /**
> >   * Triggers an error at compilation time if the condition is true.
> >   */
> > -#define RTE_BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 
> > 2*!!(condition)]))
> > +#define RTE_BUILD_BUG_ON(condition) static_assert(!(condition), #condition)
> >  
> Acked-by: Bruce Richardson <bruce.richard...@intel.com>
> 
> And as for the static_assert vs BUILD_BUG_ON debate, I think I'd go with
> using static_assert explicitly and only keeping BUILD_BUG_ON for backward
> compatbility. Reason being that you can give a reasonable error message
> with the assert.

my vote is for the same, i would prefer to just use standard constructs
directly. i do wish the C11 version didn't require a message but
regardless let's use the standard version.

additionally, can we have an addition to checkpatches.pl (if the above
is agreed) that prevents further additions of RTE_BUILD_BUG_ON usage?

Reply via email to