diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2019-10-04 23:43:09 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2019-10-04 23:43:09 +0300 |
commit | b0d0fafc346fd2b205f268ec6c40413dfdca9934 (patch) | |
tree | f28ce7c4646c4e6a9f06cf740de7d362676b451b | |
parent | 890ad2c9930458392e19bba7964c69a405b6d3e0 (diff) | |
download | bdwgc-b0d0fafc346fd2b205f268ec6c40413dfdca9934.tar.gz |
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.
-rw-r--r-- | cord/cordprnt.c | 11 | ||||
-rw-r--r-- | cord/tests/de.c | 12 | ||||
-rw-r--r-- | include/private/gc_priv.h | 20 |
3 files changed, 33 insertions, 10 deletions
diff --git a/cord/cordprnt.c b/cord/cordprnt.c index 7eaf3723..70972af8 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 f69edde2..9f554d19 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 ea4d2a8a..22ad7bc0 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). */ |