diff options
author | Tomas Vanek <vanekt@fbl.cz> | 2021-05-16 10:05:02 +0200 |
---|---|---|
committer | Tomas Vanek <vanekt@fbl.cz> | 2021-05-18 09:03:28 +0100 |
commit | d7558e2ed67000afc2fa344e3acf67899fc3cebf (patch) | |
tree | f726ee579fa98852f6b2c2edd6e2964db2c806bd /src/target/armv7m.c | |
parent | bbbfddc3efd4a93b0c9489c2537efbaa117bcfb0 (diff) | |
download | riscv-openocd-d7558e2ed67000afc2fa344e3acf67899fc3cebf.zip riscv-openocd-d7558e2ed67000afc2fa344e3acf67899fc3cebf.tar.gz riscv-openocd-d7558e2ed67000afc2fa344e3acf67899fc3cebf.tar.bz2 |
target/armv7m: fix static analyzer warning
Despite of assert(is_packed) clang static analyser complains on use
of the uninitialized offset variable.
Cross compiling with latest x86_64-w64-mingw32-gcc hits warnings
src/target/armv7m.c: In function ‘armv7m_read_core_reg’:
src/target/armv7m.c:337:54: error: ‘reg32_id’ may be used
uninitialized in this function [-Werror=maybe-uninitialized]
It happens because mingw32 defines assert() without the attribute
"noreturn", whatever NDEBUG is defined or not.
Replace assert(is_packed) by if (is_packed) conditional and call
assert(false) in the else branch.
Change-Id: Id3c7dcccb65106e28be200b9a4d2b642f4d31019
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: http://openocd.zylin.com/6256
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com>
Reviewed-by: Andrzej Sierżęga <asier70@gmail.com>
Diffstat (limited to 'src/target/armv7m.c')
-rw-r--r-- | src/target/armv7m.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/target/armv7m.c b/src/target/armv7m.c index 2bcb8ab..11770b5 100644 --- a/src/target/armv7m.c +++ b/src/target/armv7m.c @@ -329,11 +329,17 @@ static int armv7m_read_core_reg(struct target *target, struct reg *r, if (r->size <= 8) { /* any 8-bit or shorter register is packed */ - uint32_t offset = 0; /* silence false gcc warning */ + uint32_t offset; unsigned int reg32_id; bool is_packed = armv7m_map_reg_packing(num, ®32_id, &offset); - assert(is_packed); + if (!is_packed) { + /* We should not get here as all 8-bit or shorter registers + * are packed */ + assert(false); + /* assert() does nothing if NDEBUG is defined */ + return ERROR_FAIL; + } struct reg *r32 = &armv7m->arm.core_cache->reg_list[reg32_id]; /* Read 32-bit container register if not cached */ @@ -394,11 +400,17 @@ static int armv7m_write_core_reg(struct target *target, struct reg *r, if (r->size <= 8) { /* any 8-bit or shorter register is packed */ - uint32_t offset = 0; /* silence false gcc warning */ + uint32_t offset; unsigned int reg32_id; bool is_packed = armv7m_map_reg_packing(num, ®32_id, &offset); - assert(is_packed); + if (!is_packed) { + /* We should not get here as all 8-bit or shorter registers + * are packed */ + assert(false); + /* assert() does nothing if NDEBUG is defined */ + return ERROR_FAIL; + } struct reg *r32 = &armv7m->arm.core_cache->reg_list[reg32_id]; if (!r32->valid) { |