On 11/28/18 3:42 AM, Jakub Jelinek wrote:
Whenever we need to clone a cdtor (either because the target doesn't support aliases the way we need, e.g. initlist105.C testcase on darwin, where it has been originally reported, or when it has virtual bases, like the made up initlist106.C on x86_64-linux), we rely on DECL_INITIAL of the local variables being unshared, because the tree unsharing gimplify.c performs doesn't unshare DECL_INITIAL. clone_body has some code to recurse on the DECL_INITIAL, but it handles just decls FOR_EACH_LOCAL_DECL walks. I believe it is generally ok that not all temporaries are covered in local decls, the gimplifier should take care of those fine if we don't need debug info for them.
I think any temporaries that have DECL_INITIAL should be pushed so that they end up in local_decls. set_up_extended_ref_temp already adds a DECL_EXPR for it, I guess we need a pushdecl as well. Though the comment for get_temp_regvar suggests that this is problematic somehow.
Jason