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>
This commit is contained in:
Tomas Vanek 2021-05-16 10:05:02 +02:00
parent bbbfddc3ef
commit d7558e2ed6
1 changed files with 16 additions and 4 deletions

View File

@ -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, &reg32_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, &reg32_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) {