On 01/23/2015 01:45 PM, Aldy Hernandez wrote:
It would expect [the flush] to be before free_lang_data and LTO streaming.The reason this wouldn't make a difference is because, as it stands, dwarf for the clones are not generated until final.c: if (!DECL_IGNORED_P (current_function_decl)) debug_hooks->function_decl (current_function_decl); which happens after free_lang_data.
I agree that the current code doesn't have this effect, but we're talking about changing things, right? :)
Unfortunately, this sets DECL_ABSTRACT_P for the "static_p" above, and refuses to unset it after the call to dwarf2out_decl.
Well, that sounds like a bug. Why isn't it being unset? Is it because DECL_ABSTRACT_P was already set for the function, so we don't call set_decl_abstract_flags (decl, 0)? Perhaps a solution to that would be to avoid calling set_decl_abstract_flags (decl, 1) if the function is already marked as abstract. Or to teach set_decl_abstract_flags not to mess with static local variables.
Jason
