[debug] DWARF: add DW_AT_count to zero-length arrays
2018-09-13 Omar Sandoval <osandov@osandov.com> Tom de Vries <tdevries@suse.de> PR debug/86985 * dwarf2out.c (is_c): New function. (add_subscript_info): Add DW_AT_count of 0 for C zero-length arrays. * gcc.dg/guality/zero-length-array.c: New test. Co-Authored-By: Tom de Vries <tdevries@suse.de> From-SVN: r264267
This commit is contained in:
parent
231c52ae41
commit
67295b6837
4 changed files with 58 additions and 2 deletions
|
@ -1,3 +1,10 @@
|
|||
2018-09-13 Omar Sandoval <osandov@osandov.com>
|
||||
Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR debug/86985
|
||||
* dwarf2out.c (is_c): New function.
|
||||
(add_subscript_info): Add DW_AT_count of 0 for C zero-length arrays.
|
||||
|
||||
2018-09-13 Sam Tebbs <sam.tebbs@arm.com>
|
||||
|
||||
PR target/85628
|
||||
|
|
|
@ -3679,6 +3679,7 @@ static const char *get_AT_string (dw_die_ref, enum dwarf_attribute);
|
|||
static int get_AT_flag (dw_die_ref, enum dwarf_attribute);
|
||||
static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute);
|
||||
static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute);
|
||||
static bool is_c (void);
|
||||
static bool is_cxx (void);
|
||||
static bool is_cxx (const_tree);
|
||||
static bool is_fortran (void);
|
||||
|
@ -5443,6 +5444,19 @@ get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind)
|
|||
return a ? AT_file (a) : NULL;
|
||||
}
|
||||
|
||||
/* Return TRUE if the language is C. */
|
||||
|
||||
static inline bool
|
||||
is_c (void)
|
||||
{
|
||||
unsigned int lang = get_AT_unsigned (comp_unit_die (), DW_AT_language);
|
||||
|
||||
return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_C99
|
||||
|| lang == DW_LANG_C11 || lang == DW_LANG_ObjC);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/* Return TRUE if the language is C++. */
|
||||
|
||||
static inline bool
|
||||
|
@ -21000,8 +21014,16 @@ add_subscript_info (dw_die_ref type_die, tree type, bool collapse_p)
|
|||
|
||||
if (!get_AT (subrange_die, DW_AT_lower_bound))
|
||||
add_bound_info (subrange_die, DW_AT_lower_bound, lower, NULL);
|
||||
if (upper && !get_AT (subrange_die, DW_AT_upper_bound))
|
||||
add_bound_info (subrange_die, DW_AT_upper_bound, upper, NULL);
|
||||
if (!get_AT (subrange_die, DW_AT_upper_bound)
|
||||
&& !get_AT (subrange_die, DW_AT_count))
|
||||
{
|
||||
if (upper)
|
||||
add_bound_info (subrange_die, DW_AT_upper_bound, upper, NULL);
|
||||
else if ((is_c () || is_cxx ()) && COMPLETE_TYPE_P (type))
|
||||
/* Zero-length array. */
|
||||
add_bound_info (subrange_die, DW_AT_count,
|
||||
build_int_cst (TREE_TYPE (lower), 0), NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/* Otherwise we have an array type with an unspecified length. The
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2018-09-13 Omar Sandoval <osandov@osandov.com>
|
||||
Tom de Vries <tdevries@suse.de>
|
||||
|
||||
PR debug/86985
|
||||
* gcc.dg/guality/zero-length-array.c: New test.
|
||||
|
||||
2018-09-13 Sam Tebbs <sam.tebbs@arm.com>
|
||||
|
||||
PR target/85628
|
||||
|
|
21
gcc/testsuite/gcc.dg/guality/zero-length-array.c
Normal file
21
gcc/testsuite/gcc.dg/guality/zero-length-array.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
/* PR debug/86985 */
|
||||
/* { dg-do run } */
|
||||
/* { dg-options "-g" } */
|
||||
|
||||
struct {
|
||||
int foo;
|
||||
int bar[0];
|
||||
} zla; /* Zero length array. */
|
||||
|
||||
struct {
|
||||
int foo;
|
||||
int bar[];
|
||||
} fam; /* Flexible array member. */
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
/* { dg-final { gdb-test . "type:zla" "struct { int foo; int bar[0]; }" } } */
|
||||
/* { dg-final { gdb-test . "type:fam" "struct { int foo; int bar[]; }" } } */
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue