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>
|
||||
|
||||
* 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 ?
|
||||
" __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",
|
||||
plongest (high_bound - low_bound + 1));
|
||||
fprintf_filtered (stream, (is_vector ? ")))" : "]"));
|
||||
|
|
Loading…
Reference in a new issue