From 28ad563d57d03e0d21936e394061e3380607d83b Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Mon, 3 Aug 2009 14:20:46 -0700 Subject: PR10475: ensure that loc2c can find its array size * loc2c.c (array_stride): iterate DIEs past typedef/const/volatile --- loc2c.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'loc2c.c') diff --git a/loc2c.c b/loc2c.c index f5efccfe..26ca3ba1 100644 --- a/loc2c.c +++ b/loc2c.c @@ -1749,6 +1749,19 @@ array_stride (Dwarf_Die *typedie, struct location *origin) dwarf_diename (typedie) ?: "", dwarf_errmsg (-1)); + int typetag = dwarf_tag(&die_mem); + while (typetag == DW_TAG_typedef || + typetag == DW_TAG_const_type || + typetag == DW_TAG_volatile_type) + { + if (dwarf_attr_integrate (&die_mem, DW_AT_type, &attr_mem) == NULL + || dwarf_formref_die (&attr_mem, &die_mem) == NULL) + FAIL (origin, N_("cannot get inner type of type %s: %s"), + dwarf_diename (&die_mem) ?: "", + dwarf_errmsg (-1)); + typetag = dwarf_tag(&die_mem); + } + if (dwarf_attr_integrate (&die_mem, DW_AT_byte_size, &attr_mem) != NULL) { Dwarf_Word stride; -- cgit