OSDN Git Service

2007-07-03 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jul 2007 08:02:08 +0000 (08:02 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 3 Jul 2007 08:02:08 +0000 (08:02 +0000)
PR fortran/20888
* resolve.c (resolve_operator): Check for NULL as operand.

2007-07-03  Tobias Burnus  <burnus@net-b.de>

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

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/null_2.f90 [new file with mode: 0644]

index 6f0747e..80f1e3c 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-03  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/20888
+       * resolve.c (resolve_operator): Check for NULL as operand.
+
 2007-07-02  Tobias Burnus  <burnus@net-b.de>
 
        * gfortran.texi (Fortran 2003): Add ISO Bind C.
index fde5043..b249f30 100644 (file)
@@ -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:
index 4c8dadf..1d3db36 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-03  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/20888
+       * gfortran.dg/null_2.f90: New.
+
 2007-07-03  Uros Bizjak  <ubizjak@gmail.com>
            Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
 
diff --git a/gcc/testsuite/gfortran.dg/null_2.f90 b/gcc/testsuite/gfortran.dg/null_2.f90
new file mode 100644 (file)
index 0000000..3102aad
--- /dev/null
@@ -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