From b0d0fafc346fd2b205f268ec6c40413dfdca9934 Mon Sep 17 00:00:00 2001 From: Ivan Maidanski Date: Fri, 4 Oct 2019 23:43:09 +0300 Subject: [PATCH] Workaround 'condition is redundant or null deref is possible' cppcheck FP * cord/cordprnt.c (MACRO_BLKSTMT_BEGIN, MACRO_BLKSTMT_END): New macro. * cord/tests/de.c (MACRO_BLKSTMT_BEGIN, MACRO_BLKSTMT_END): Likewise. * include/private/gc_priv.h (MACRO_BLKSTMT_BEGIN, MACRO_BLKSTMT_END): Likewise. * cord/cordprnt.c (OUT_OF_MEMORY): Use MACRO_BLKSTMT_BEGIN/END instead of "do {" and "} while (0)". * cord/tests/de.c (OUT_OF_MEMORY): Likewise. * include/private/gc_priv.h (ABORT_ARG1, ABORT_ARG2, ABORT_ARG3): Likewise. --- cord/cordprnt.c | 11 +++++++++-- cord/tests/de.c | 12 ++++++++++-- include/private/gc_priv.h | 20 ++++++++++++++------ 3 files changed, 33 insertions(+), 10 deletions(-) diff --git a/cord/cordprnt.c b/cord/cordprnt.c index 7eaf372..70972af 100644 --- a/cord/cordprnt.c +++ b/cord/cordprnt.c @@ -43,12 +43,19 @@ #define CONV_RESULT_LEN 50 /* Maximum length of any */ /* conversion with default */ /* width and prec. */ +#if defined(CPPCHECK) +# define MACRO_BLKSTMT_BEGIN { +# define MACRO_BLKSTMT_END } +#else +# define MACRO_BLKSTMT_BEGIN do { +# define MACRO_BLKSTMT_END } while (0) +#endif -#define OUT_OF_MEMORY do { \ +#define OUT_OF_MEMORY MACRO_BLKSTMT_BEGIN \ if (CORD_oom_fn != 0) (*CORD_oom_fn)(); \ fprintf(stderr, "Out of memory\n"); \ abort(); \ - } while (0) + MACRO_BLKSTMT_END static int ec_len(CORD_ec x) { diff --git a/cord/tests/de.c b/cord/tests/de.c index f69edde..9f554d1 100644 --- a/cord/tests/de.c +++ b/cord/tests/de.c @@ -75,10 +75,18 @@ #endif #include "de_cmds.h" -#define OUT_OF_MEMORY do { \ +#if defined(CPPCHECK) +# define MACRO_BLKSTMT_BEGIN { +# define MACRO_BLKSTMT_END } +#else +# define MACRO_BLKSTMT_BEGIN do { +# define MACRO_BLKSTMT_END } while (0) +#endif + +#define OUT_OF_MEMORY MACRO_BLKSTMT_BEGIN \ fprintf(stderr, "Out of memory\n"); \ exit(3); \ - } while (0) + MACRO_BLKSTMT_END /* List of line number to position mappings, in descending order. */ /* There may be holes. */ diff --git a/include/private/gc_priv.h b/include/private/gc_priv.h index ea4d2a8..22ad7bc 100644 --- a/include/private/gc_priv.h +++ b/include/private/gc_priv.h @@ -166,6 +166,14 @@ typedef int GC_bool; # define REGISTER register #endif +#if defined(CPPCHECK) +# define MACRO_BLKSTMT_BEGIN { +# define MACRO_BLKSTMT_END } +#else +# define MACRO_BLKSTMT_BEGIN do { +# define MACRO_BLKSTMT_END } while (0) +#endif + #ifndef HEADERS_H # include "gc_hdrs.h" #endif @@ -631,21 +639,21 @@ EXTERN_C_BEGIN /* literals. C_msg should not contain format specifiers. Arguments */ /* should match their format specifiers. */ #define ABORT_ARG1(C_msg, C_fmt, arg1) \ - do { \ + MACRO_BLKSTMT_BEGIN \ GC_INFOLOG_PRINTF(C_msg /* + */ C_fmt "\n", arg1); \ ABORT(C_msg); \ - } while (0) + MACRO_BLKSTMT_END #define ABORT_ARG2(C_msg, C_fmt, arg1, arg2) \ - do { \ + MACRO_BLKSTMT_BEGIN \ GC_INFOLOG_PRINTF(C_msg /* + */ C_fmt "\n", arg1, arg2); \ ABORT(C_msg); \ - } while (0) + MACRO_BLKSTMT_END #define ABORT_ARG3(C_msg, C_fmt, arg1, arg2, arg3) \ - do { \ + MACRO_BLKSTMT_BEGIN \ GC_INFOLOG_PRINTF(C_msg /* + */ C_fmt "\n", \ arg1, arg2, arg3); \ ABORT(C_msg); \ - } while (0) + MACRO_BLKSTMT_END /* Same as ABORT but does not have 'no-return' attribute. */ /* ABORT on a dummy condition (which is always true). */ -- 2.7.4