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
|
@ -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…
Add table
Add a link
Reference in a new issue