diff options
author | Andrew Burgess <andrew.burgess@embecosm.com> | 2018-07-29 22:14:33 +0100 |
---|---|---|
committer | Andrew Burgess <andrew.burgess@embecosm.com> | 2018-07-30 19:51:53 +0100 |
commit | c8f2dc0dc967222673d71a0493958a587c53ae3c (patch) | |
tree | be92ac5554b78d8b4c189d5a1b862fd4dfe804df | |
parent | 629cfaf1b0fbb32a985607c774bd8e7870b9fa94 (diff) | |
download | gdb-c8f2dc0dc967222673d71a0493958a587c53ae3c.zip gdb-c8f2dc0dc967222673d71a0493958a587c53ae3c.tar.gz gdb-c8f2dc0dc967222673d71a0493958a587c53ae3c.tar.bz2 |
gdb: Fix sizeof for dynamic types other than arrays
In commit:
commit 37cc0caeca4c9a8552370040f4cfeaeceaa03369
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.
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/eval.c | 4 |
2 files changed, 8 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 24ffeec..6d5b24c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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 |