https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105012
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- Built by void gfc_conv_expr_reference (gfc_se * se, gfc_expr * expr, bool add_clobber) { ... else if (add_clobber && expr->ref == NULL) { tree clobber; tree var; /* FIXME: This fails if var is passed by reference, see PR 41453. */ var = expr->symtree->n.sym->backend_decl; clobber = build_clobber (TREE_TYPE (var)); gfc_add_modify (&se->pre, var, clobber); } and the fortran code passes down a function as parameter: FUNCTION ERFCX_R4(X) !-------------------------------------------------------------------- ! ! This subprogram computes approximate values for exp(x*x) * erfc(x). ! (see comments heading CALERF). ! ! Author/date: W. J. Cody, March 30, 1987 ! !-------------------------------------------------------------------- integer, parameter :: rk = r4 ! 8 byte real ! argument real(rk), intent(in) :: X ! return value real(rk) :: ERFCX_R4 ! local variables INTEGER :: JINT = 2 !------------------------------------------------------------------ CALL CALERF_r4(X, ERFCX_R4, JINT) END FUNCTION ERFCX_R4