http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52162
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-02-09 17:17:03 UTC --- a = b The problem is that the LHS is REAL(4) while the RHS is REAL(8). Thus, the expression is not <variable A> = <variable B> but <variable A> = __convert_i8_i4 (<variable B>) But trans-array's gfc_trans_assignment_1 contains: if (gfc_is_reallocatable_lhs (expr1) && !(expr2->expr_type == EXPR_FUNCTION && expr2->value.function.isym != NULL)) lss->is_alloc_lhs = 1; As expr2->value.function.isym is set (expr2->value.function.isym->id == GFC_ISYM_CONVERSION), the is_alloc_lhs is not set. Hence, the bound checking code is inserted.