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

Reply via email to