From: burnus Date: Tue, 3 Jul 2007 08:02:08 +0000 (+0000) Subject: 2007-07-03 Tobias Burnus X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0dc7e13b889bb433dba3f315c6365bb1b4ddd933;p=thirdparty%2Fgcc.git 2007-07-03 Tobias Burnus PR fortran/20888 * resolve.c (resolve_operator): Check for NULL as operand. 2007-07-03 Tobias Burnus PR fortran/20888 * gfortran.dg/null_2.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@126247 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6f0747e723a3..80f1e3c5384f 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2007-07-03 Tobias Burnus + + PR fortran/20888 + * resolve.c (resolve_operator): Check for NULL as operand. + 2007-07-02 Tobias Burnus * gfortran.texi (Fortran 2003): Add ISO Bind C. diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index fde5043403c4..b249f30835c6 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -2583,6 +2583,13 @@ resolve_operator (gfc_expr *e) op2 = e->value.op.op2; dual_locus_error = false; + if ((op1 && op1->expr_type == EXPR_NULL) + || (op2 && op2->expr_type == EXPR_NULL)) + { + sprintf (msg, _("Invalid context for NULL() pointer at %%L")); + goto bad_op; + } + switch (e->value.op.operator) { case INTRINSIC_UPLUS: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4c8dadf1d2b4..1d3db36b61de 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-07-03 Tobias Burnus + + PR fortran/20888 + * gfortran.dg/null_2.f90: New. + 2007-07-03 Uros Bizjak Francois-Xavier Coudert diff --git a/gcc/testsuite/gfortran.dg/null_2.f90 b/gcc/testsuite/gfortran.dg/null_2.f90 new file mode 100644 index 000000000000..3102aad622cd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/null_2.f90 @@ -0,0 +1,15 @@ +! { dg-do compile } +! +! NULL(...) pointer is not allowed as operand +! PR fortran/20888 +! +! Contributed by Joost VandeVondele +! +PROGRAM main + IMPLICIT NONE + REAL, POINTER :: TEST + NULLIFY(TEST) + TEST => -NULL(TEST) ! { dg-error "Invalid context for NULL" } + IF (TEST .EQ. NULL(TEST)) TEST=>NULL() ! { dg-error "Invalid context for NULL" } + IF (NULL(TEST) .EQ. TEST) TEST=>NULL() ! { dg-error "Invalid context for NULL" } +END PROGRAM main