vla: print "variable length" for unresolved dynamic bounds
1| void foo (size_t n) { 2| int vla[n]; 3| } Given the following expression (gdb) ptype &vla Gdb evaluates the expression with EVAL_AVOID_SIDE_EFFECTS and thus does not resolve the bounds information and misinterprets the high bound as a constant. The current output is: type = int (*)[1289346] this patch deals with this case and prints: type = int (*)[variable length] instead. * c-typeprint.c (c_type_print_varspec_suffix): Added check for not yet resolved high bound. If unresolved, print "variable length" string to the console instead of random length.
This commit is contained in:
parent
bcd629a44f
commit
b86138fb04
2 changed files with 12 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
2014-04-11 Sanimir Agovic <sanimir.agovic@intel.com>
|
||||||
|
|
||||||
|
* c-typeprint.c (c_type_print_varspec_suffix): Added
|
||||||
|
check for not yet resolved high bound. If unresolved, print
|
||||||
|
"variable length" string to the console instead of random
|
||||||
|
length.
|
||||||
|
|
||||||
2014-04-11 Sanimir Agovic <sanimir.agovic@intel.com>
|
2014-04-11 Sanimir Agovic <sanimir.agovic@intel.com>
|
||||||
|
|
||||||
* ada-lang.c (ada_value_primitive_packed_val): Re-fetch type from value.
|
* ada-lang.c (ada_value_primitive_packed_val): Re-fetch type from value.
|
||||||
|
|
|
@ -689,7 +689,11 @@ c_type_print_varspec_suffix (struct type *type,
|
||||||
|
|
||||||
fprintf_filtered (stream, (is_vector ?
|
fprintf_filtered (stream, (is_vector ?
|
||||||
" __attribute__ ((vector_size(" : "["));
|
" __attribute__ ((vector_size(" : "["));
|
||||||
if (get_array_bounds (type, &low_bound, &high_bound))
|
/* Bounds are not yet resolved, print a bounds placeholder instead. */
|
||||||
|
if (TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCEXPR
|
||||||
|
|| TYPE_HIGH_BOUND_KIND (TYPE_INDEX_TYPE (type)) == PROP_LOCLIST)
|
||||||
|
fprintf_filtered (stream, "variable length");
|
||||||
|
else if (get_array_bounds (type, &low_bound, &high_bound))
|
||||||
fprintf_filtered (stream, "%s",
|
fprintf_filtered (stream, "%s",
|
||||||
plongest (high_bound - low_bound + 1));
|
plongest (high_bound - low_bound + 1));
|
||||||
fprintf_filtered (stream, (is_vector ? ")))" : "]"));
|
fprintf_filtered (stream, (is_vector ? ")))" : "]"));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue