From 2fe33f551c47a0535d6eca5ca8e290ccf68ef6f2 Mon Sep 17 00:00:00 2001 From: yinshengkai Date: Wed, 18 Oct 2023 22:24:21 +0800 Subject: [PATCH] assert: change the do-while of assert to a conditional expression According to the standard definition, assert should return a void expression https://pubs.opengroup.org/onlinepubs/007904875/basedefs/assert.h.html This patch involves two changes: If you define the NDEBUG macro, assert does not use any parameters and directly returns a void expression. assert should return a void expression and cannot use do-while statements. If the following code , a compilation error will occur. Signed-off-by: yinshengkai --- include/assert.h | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/include/assert.h b/include/assert.h index a714c60e840..0d4393f30c8 100644 --- a/include/assert.h +++ b/include/assert.h @@ -79,20 +79,10 @@ __ASSERT_LINE__, msg, regs) #define __ASSERT__(f, file, line, _f) \ - do \ - { \ - if (predict_false(!(f))) \ - __assert(file, line, _f); \ - } \ - while (0) + (predict_false(!(f))) ? __assert(file, line, _f) : ((void)0) #define __VERIFY__(f, file, line, _f) \ - do \ - { \ - if (predict_false((f) < 0)) \ - __assert(file, line, _f); \ - } \ - while (0) + (predict_false((f) < 0)) ? __assert(file, line, _f) : ((void)0) #ifdef CONFIG_DEBUG_ASSERTIONS_EXPRESSION # define _ASSERT(f,file,line) __ASSERT__(f, file, line, #f) @@ -150,7 +140,7 @@ # define static_assert _Static_assert # else # define static_assert(cond, msg) \ - extern int (*__static_assert_function (void)) \ + extern int (*__static_assert_function(void)) \ [!!sizeof (struct { int __error_if_negative: (cond) ? 2 : -1; })] # endif #endif