Dear All, This one is trivial. NULL(...) is simply out of context in a transfer statement.
Bootstrapped and regtested on FC17/x86_64. OK for trunk and 4.8? Cheers Paul 2013-11-30 Paul Thomas <pa...@gcc.gnu.org> PR fortran/34547 * resolve.c (resolve_transfer): EXPR_NULL is always in an invalid context in a transfer statement. 2013-11-30 Paul Thomas <pa...@gcc.gnu.org> PR fortran/34547 * gfortran.dg/null_5.f90 : Include new error. * gfortran.dg/null_6.f90 : Include new error.
Index: gcc/fortran/resolve.c =================================================================== *** gcc/fortran/resolve.c (revision 205031) --- gcc/fortran/resolve.c (working copy) *************** resolve_transfer (gfc_code *code) *** 8247,8256 **** && exp->value.op.op == INTRINSIC_PARENTHESES) exp = exp->value.op.op1; ! if (exp && exp->expr_type == EXPR_NULL && exp->ts.type == BT_UNKNOWN) { ! gfc_error ("NULL intrinsic at %L in data transfer statement requires " ! "MOLD=", &exp->where); return; } --- 8247,8257 ---- && exp->value.op.op == INTRINSIC_PARENTHESES) exp = exp->value.op.op1; ! if (exp && exp->expr_type == EXPR_NULL ! && code->ext.dt) { ! gfc_error ("Invalid context for NULL () intrinsic at %L", ! &exp->where); return; } Index: gcc/testsuite/gfortran.dg/null_5.f90 =================================================================== *** gcc/testsuite/gfortran.dg/null_5.f90 (revision 205031) --- gcc/testsuite/gfortran.dg/null_5.f90 (working copy) *************** subroutine test_PR34547_1 () *** 34,40 **** end subroutine test_PR34547_1 subroutine test_PR34547_2 () ! print *, null () ! { dg-error "in data transfer statement requires MOLD" } end subroutine test_PR34547_2 subroutine test_PR34547_3 () --- 34,40 ---- end subroutine test_PR34547_1 subroutine test_PR34547_2 () ! print *, null () ! { dg-error "Invalid context" } end subroutine test_PR34547_2 subroutine test_PR34547_3 () Index: gcc/testsuite/gfortran.dg/null_6.f90 =================================================================== *** gcc/testsuite/gfortran.dg/null_6.f90 (revision 205031) --- gcc/testsuite/gfortran.dg/null_6.f90 (working copy) *************** end subroutine test_PR50375_2 *** 30,34 **** subroutine test_PR34547_3 () integer, allocatable :: i(:) ! print *, NULL(i) end subroutine test_PR34547_3 --- 30,34 ---- subroutine test_PR34547_3 () integer, allocatable :: i(:) ! print *, NULL(i) ! { dg-error "Invalid context for NULL" } end subroutine test_PR34547_3