On 05/16/2012 05:29 PM, Eric Botcazou wrote:
-         if (cgraph_function_possibly_inlined_p (decl))
+         if (function_possibly_abstracted_p (decl))
            add_AT_unsigned (subr_die, DW_AT_inline, DW_INL_declared_inlined);
          else
            add_AT_unsigned (subr_die, DW_AT_inline, 
DW_INL_declared_not_inlined);
        }
        else
        {
-         if (cgraph_function_possibly_inlined_p (decl))
+         if (function_possibly_abstracted_p (decl))

Why do you need this change? As long as we're setting DW_AT_inline, it shouldn't matter what its value is.

-         if (origin && origin->die_parent)
-           add_child_die (origin->die_parent, die);
+         if (origin)
+           {
+             /* Find the first non-abstract parent instance.  */
+             do
+               origin = origin->die_parent;
+             while (origin
+                    && (origin->die_tag != DW_TAG_subprogram
+                        || get_AT (origin, DW_AT_inline)));
+             if (origin)
+               add_child_die (origin, die);
+             else
+               add_child_die (comp_unit_die (), die);
+           }

If we are looking at the DIE for something from a function in non-unit scope, this will return comp_unit_die() where previously it would have returned the immediate scope of the function, which might be something like a namespace/module or type.

Jason

Reply via email to