From fda36387ebfea914119a1287e6e492a1aa7af3ef Mon Sep 17 00:00:00 2001 From: Per Bothner Date: Fri, 17 Feb 1995 23:20:29 +0000 Subject: [PATCH] * parse.c (follow_types): Given (TYPE[]) (i.e. with no length), create a 0-length array type, and set BOUND_CANNOT_BE_DETERMINED. * valops.c (value_cast): If a cast like (TYPE[])VALUE (i.e. array of unknown length) use sizeof(VALUE)/sizeof(TYPE) as the length. * c-typeprint.c (c_type_print_varspec_suffix): If array length is 0, print it, but not if upper_bound is BOUND_CANNOT_BE_DETERMINED. --- gdb/ChangeLog | 9 +++++++++ gdb/c-typeprint.c | 3 ++- gdb/parse.c | 22 ++++++++++------------ 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9928db6..1bc7ccb 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +Thu Feb 16 15:06:12 1995 Per Bothner + + * parse.c (follow_types): Given (TYPE[]) (i.e. with no length), + create a 0-length array type, and set BOUND_CANNOT_BE_DETERMINED. + * valops.c (value_cast): If a cast like (TYPE[])VALUE (i.e. array + of unknown length) use sizeof(VALUE)/sizeof(TYPE) as the length. + * c-typeprint.c (c_type_print_varspec_suffix): If array length + is 0, print it, but not if upper_bound is BOUND_CANNOT_BE_DETERMINED. + Thu Feb 16 16:06:50 1995 Michael Meissner * dcache.c (insque, remque): Rewrite Linux support. diff --git a/gdb/c-typeprint.c b/gdb/c-typeprint.c index 3968737..aa5b014 100644 --- a/gdb/c-typeprint.c +++ b/gdb/c-typeprint.c @@ -386,7 +386,8 @@ c_type_print_varspec_suffix (type, stream, show, passed_a_ptr, demangled_args) fprintf_filtered (stream, ")"); fprintf_filtered (stream, "["); - if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0) + if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0 + && TYPE_ARRAY_UPPER_BOUND_TYPE(type) != BOUND_CANNOT_BE_DETERMINED) fprintf_filtered (stream, "%d", (TYPE_LENGTH (type) / TYPE_LENGTH (TYPE_TARGET_TYPE (type)))); diff --git a/gdb/parse.c b/gdb/parse.c index dff887e..daa0ae6 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -875,18 +875,16 @@ follow_types (follow_type) break; case tp_array: array_size = pop_type_int (); - if (array_size != -1) - { - range_type = - create_range_type ((struct type *) NULL, - builtin_type_int, 0, - array_size - 1); - follow_type = - create_array_type ((struct type *) NULL, - follow_type, range_type); - } - else - follow_type = lookup_pointer_type (follow_type); + range_type = + create_range_type ((struct type *) NULL, + builtin_type_int, 0, + array_size >= 0 ? array_size - 1 : 0); + follow_type = + create_array_type ((struct type *) NULL, + follow_type, range_type); + if (array_size < 0) + TYPE_ARRAY_UPPER_BOUND_TYPE(follow_type) + = BOUND_CANNOT_BE_DETERMINED; break; case tp_function: follow_type = lookup_function_type (follow_type); -- 2.7.4