On 05/27/2015 08:39 AM, Jason Merrill wrote:
On 05/20/2015 11:50 AM, Aldy Hernandez wrote:

+  /* Fill in the size of variable-length fields in late dwarf.  */
+  if (TREE_ASM_WRITTEN (type)
+      && !early_dwarf_dumping)
+    {
+      tree member;
+      for (member = TYPE_FIELDS (type); member; member = DECL_CHAIN
(member))
+    fill_variable_array_bounds (TREE_TYPE (member));
+      return;
+    }

Why is this happening in late dwarf?  I'm concerned that front-end
information that is necessary to do this might be lost by that point.

I thought only after the optimizations had run their course would we be guaranteed to have accurate bound information. At least, that's what my experience showed.

Do you have something else in mind?


+      /* Variable-length types may be incomplete even if
+     TREE_ASM_WRITTEN.  For such types, fall through to
+     gen_array_type_die() and possibly fill in
+     DW_AT_{upper,lower}_bound attributes.  */
+      if ((TREE_CODE (type) != ARRAY_TYPE
+       && TREE_CODE (type) != RECORD_TYPE
+       && TREE_CODE (type) != UNION_TYPE
+       && TREE_CODE (type) != QUAL_UNION_TYPE)
+      || (TYPE_SIZE (type)
+          && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST))

Similarly, why check for INTEGER_CST here?

The INTEGER_CST check was supposed to mean "we have bound information already, no need to look further".

I guess we could have a variable length bound that does not decay to a constant. Perhaps I could check the presence of a cached DIE with a type DIE containing a DW_TAG_subrange_type *and* DW_AT_{lower,upper}_bound ??. Basically I just want to add bound information, if available and not already present.

Suggestions?

Aldy

Reply via email to