https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104031
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #7 from Jakub Jelinek <jakub at gcc dot gnu.org> --- My guess is that the problem is that when the TARGET_EXPR_SLOT is created using build_local_temp, current_function_decl is NULL, it is in s_op global namespace var initializer. Eventually we add it to ssdf and call in the new r12-6329 spot split_nonconstant_init, which has: 743 if (VAR_P (dest) && !is_local_temp (dest)) 744 { 745 DECL_INITIAL (dest) = init; 746 TREE_READONLY (dest) = 0; 747 } but due to the still unchanged DECL_CONTEXT being NULL is_local_temp returns false and we set DECL_INITIAL instead of what the code expects. The temporary gets DECL_CONTEXT set only during gimplification. So, I think either we should fill in TARGET_EXPR_SLOT's DECL_CONTEXT when we are adding those exprs into ssdf, or the r12-6329 code should ensure the slot has non-NULL DECL_CONTEXT if current_function_decl or something similar.