gdb/gdbtypes.h: Fix comparison of uninitialized values

When called with an array type of unknown dimensions,
is_scalar_type_recursive ended up comparing uninitialized values.

This was picked up by the following compiler warning:

  CXX    gdbtypes.o
/binutils-gdb/gdb/gdbtypes.c: In function int is_scalar_type_recursive(type*):
/binutils-gdb/gdb/gdbtypes.c:3670:38: warning: high_bound may be used uninitialized in this function [-Wmaybe-uninitialized]
 3670 |       return high_bound == low_bound && is_scalar_type_recursive (elt_type);
      | ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/binutils-gdb/gdb/gdbtypes.c:3670:38: warning: low_bound may be used uninitialized in this function [-Wmaybe-uninitialized]

This patch makes sure that when dealing with an array of unknown size
(or an array of more than 1 element), is_scalar_type_recursive returns
false.

gdb/ChangeLog:

	* gdbtypes.c (is_scalar_type_recursive): Prevent comparison
	between uninitialized values.

Change-Id: Ifc005ced166aa7a065fef3e652977bae67625bf4
This commit is contained in:
Lancelot SIX
2020-12-24 11:01:21 -05:00
committed by Simon Marchi
parent 99d8bab0c1
commit f867677682
2 changed files with 10 additions and 3 deletions

View File

@ -3665,9 +3665,11 @@ is_scalar_type_recursive (struct type *t)
LONGEST low_bound, high_bound;
struct type *elt_type = check_typedef (TYPE_TARGET_TYPE (t));
get_discrete_bounds (t->index_type (), &low_bound, &high_bound);
return high_bound == low_bound && is_scalar_type_recursive (elt_type);
if (get_discrete_bounds (t->index_type (), &low_bound, &high_bound))
return (high_bound == low_bound
&& is_scalar_type_recursive (elt_type));
else
return 0;
}
/* Are we dealing with a struct with one element? */
else if (t->code () == TYPE_CODE_STRUCT && t->num_fields () == 1)