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