https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114021
anlauf at gcc dot gnu.org changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |anlauf at gcc dot gnu.org --- Comment #3 from anlauf at gcc dot gnu.org --- The assignment generates very interesting code: { logical(kind=4) D.4914; struct y D.4915; integer(kind=8) D.4916; integer(kind=8) D.4917; void * restrict D.4918; D.4914 = f () == x; D.4915 = *x; *x = *f (); if (D.4914) { (void) 0; } else { if ((void *) f ()->x1.data != 0B) { D.4916 = (f ()->x1.dim[0].ubound - f ()->x1.dim[0].lbound) + 1; ... We likely need to either generate a temporary or save the function result otherwise.