https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65028
--- Comment #57 from Jan Hubicka <hubicka at ucw dot cz> --- > Another issue is propagate_constants_accross_call has > > for (; (i < args_count) && (i < parms_count); i++) > { > struct ipa_jump_func *jump_func = ipa_get_ith_jump_func (args, i); > struct ipcp_param_lattices *dest_plats; > > dest_plats = ipa_get_parm_lattices (callee_info, i); > if (availability == AVAIL_INTERPOSABLE) > ret |= set_all_contains_variable (dest_plats); > else > { > ret |= propagate_scalar_accross_jump_function (cs, jump_func, > &dest_plats->itself); > ret |= propagate_context_accross_jump_function (cs, jump_func, i, > > &dest_plats->ctxlat); > ret |= propagate_alignment_accross_jump_function (cs, jump_func, > dest_plats); > ret |= propagate_aggs_accross_jump_function (cs, jump_func, > dest_plats); > } > } > > Even if availability == AVAIL_INTERPOSABLE, alignment from jump_func > is used if the function isn't preempted at run-time. Shouldn't it > call propagate_alignment_accross_jump_function unconditionally? Well, set_all_contains_variable will simply make every INTERPOSABLE function to have all parameters with unknown alignment. This is probably OK because the function is externally visible anyway and thus called from there. I commented on this privately to Martin some time ago. While technically one can find that the functions if not interposed are used one way or another, but because we can't clone these functions (we would need to add runtime check for interposition then), we don't have any use for that anyway. Martin, I just tested firefox with -march=native -flto -O3 and it still segfaults for me at movaps, so it seems that there is still some issue with the code :( (it happens with or withtout the propagation patch I posted) Honza