http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57748
--- Comment #7 from Martin Jambor <jamborm at gcc dot gnu.org> --- (In reply to Bernd Edlinger from comment #6) > hhmm.. > > set_ptr_info_alignment is always called with align=4, > and by the way, the crash goes away if I change this line > (but I cannot tell if the code is correct): No, the comment is a bit misleading but this change is incorrect and would lead to misaligned access traps. The returned alignment is OK because MALLOC_ABI_ALIGNMENT is 32 and the pointer the problematic MEM_REF is based on is a result of calloc. So it is the old value that is incorrect. If MALLOC_ABI_ALIGNMENT is incorrectly low for this target, increasing it to the correct value will make the ICE go away. In any event, it is clear that the code in expand_assignment cannot cope with unaligned tem and non-NULL offset. So currently I'm considering the following patch, although I am not really sure it is enough (it does fix the ICE, though). If you can run the testcase on the platform, would you run it with this patch applied, please? diff --git a/gcc/expr.c b/gcc/expr.c index 2c5f21a..267174b 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -4707,6 +4707,7 @@ expand_assignment (tree to, tree from, bool nontemporal) mode = TYPE_MODE (TREE_TYPE (tem)); if (TREE_CODE (tem) == MEM_REF && mode != BLKmode + && !offset && ((align = get_object_alignment (tem)) < GET_MODE_ALIGNMENT (mode)) && ((icode = optab_handler (movmisalign_optab, mode))