gdb: Fix sizeof for dynamic types other than arrays
In commit:
commit 37cc0caeca
Date: Wed Jul 18 13:38:35 2018 +0200
[gdb/exp] Interpret size of vla with unknown size as <optimized out>
All dynamic types are treated as arrays in the 'sizeof' code path,
which means that structures can incorrectly be treated as arrays.
This can cause a failure in the gdb.base/vla-datatypes.exp test
script.
This commit adds a check that we do have an array before checking the
array bounds, and I also check that the array index type is dynamic
too. This second check probably isn't strictly necessary, but
shouldn't hurt, a non-dynamic index type shouldn't have undefined high
bound.
gdb/ChangeLog:
* eval.c (evaluate_subexp_for_sizeof): Check for array type before
checking array bounds are defined.
This commit is contained in:
parent
629cfaf1b0
commit
c8f2dc0dc9
2 changed files with 8 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2018-07-30 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* eval.c (evaluate_subexp_for_sizeof): Check for array type before
|
||||
checking array bounds are defined.
|
||||
|
||||
2018-07-30 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* nat/linux-osdata.c (pid_pgid_entry::operator<): Fix
|
||||
|
|
|
@ -3145,7 +3145,9 @@ evaluate_subexp_for_sizeof (struct expression *exp, int *pos,
|
|||
{
|
||||
val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_NORMAL);
|
||||
type = value_type (val);
|
||||
if (TYPE_HIGH_BOUND_UNDEFINED (TYPE_INDEX_TYPE (type)))
|
||||
if (TYPE_CODE (type) == TYPE_CODE_ARRAY
|
||||
&& is_dynamic_type (TYPE_INDEX_TYPE (type))
|
||||
&& TYPE_HIGH_BOUND_UNDEFINED (TYPE_INDEX_TYPE (type)))
|
||||
return allocate_optimized_out_value (size_type);
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Add table
Reference in a new issue