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