diff options
author | Lancelot SIX <lsix@lancelotsix.com> | 2020-12-24 11:01:21 -0500 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2020-12-24 11:02:55 -0500 |
commit | f8676776828c6c0c26da31de0de68c0f4162a8e9 (patch) | |
tree | af0220f4d16694ca6f0220e3ea33227a92958d34 /gdb | |
parent | 99d8bab0c125618005b96cbca9bae94919ae93b7 (diff) | |
download | binutils-gdb-f8676776828c6c0c26da31de0de68c0f4162a8e9.tar.gz |
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
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/gdbtypes.c | 8 |
2 files changed, 10 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 26d7f5837cc..ac4caf05325 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-12-24 Lancelot SIX <lsix@lancelotsix.com> + + * gdbtypes.c (is_scalar_type_recursive): Prevent comparison + between uninitialized values. + 2020-12-23 Andrew Burgess <andrew.burgess@embecosm.com> * expprint.c (print_subexp_standard): Replace uses of diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 569e7a3e659..a6589c4914f 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -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) |