From bb9e683e797818425ed3c7bf372455e6aa70c021 Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Tue, 3 Jul 2007 10:02:08 +0200 Subject: re PR fortran/20888 (dereferencing NULL still accepted) 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. From-SVN: r126247 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/resolve.c | 7 +++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/null_2.f90 | 15 +++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/null_2.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 6f0747e..80f1e3c 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 fde5043..b249f30 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 4c8dadf..1d3db36 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 0000000..3102aad --- /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 -- cgit v1.1