OSDN Git Service

2010-02-03 Tobias Burnus <burnus@net-b.de>
authorburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Feb 2010 08:26:08 +0000 (08:26 +0000)
committerburnus <burnus@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 3 Feb 2010 08:26:08 +0000 (08:26 +0000)
        PR fortran/42936
        * interface.c (compare_parameter): Disable rank-checking
        for NULL().

2010-02-03  Tobias Burnus  <burnus@net-b.de>

        PR fortran/42936
        * gfortran.dg/null_4.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@156461 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 9fff7ca..8a69b42 100644 (file)
@@ -1,3 +1,9 @@
+2010-02-03  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/42936
+       * interface.c (compare_parameter): Disable rank-checking
+       for NULL().
+
 2010-02-02  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/42650
index f27d75c..7bccaa6 100644 (file)
@@ -1449,9 +1449,11 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual,
 
   rank_check = where != NULL && !is_elemental && formal->as
               && (formal->as->type == AS_ASSUMED_SHAPE
-                  || formal->as->type == AS_DEFERRED);
+                  || formal->as->type == AS_DEFERRED)
+              && actual->expr_type != EXPR_NULL;
 
-  if (rank_check || ranks_must_agree || formal->attr.pointer
+  if (rank_check || ranks_must_agree
+      || (formal->attr.pointer && actual->expr_type != EXPR_NULL)
       || (actual->rank != 0 && !(is_elemental || formal->attr.dimension))
       || (actual->rank == 0 && formal->as->type == AS_ASSUMED_SHAPE))
     {
@@ -1493,7 +1495,7 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual,
       else
        return 1;
     }
-  else if (ref == NULL)
+  else if (ref == NULL && actual->expr_type != EXPR_NULL)
     {
       if (where)
        gfc_error ("Rank mismatch in argument '%s' at %L (%d and %d)",
index 3a7499d..85dc692 100644 (file)
@@ -1,3 +1,8 @@
+2010-02-03  Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/42936
+       * gfortran.dg/null_4.f90: New test.
+
 2010-02-02  Jason Merrill  <jason@redhat.com>
 
        PR c++/41090
diff --git a/gcc/testsuite/gfortran.dg/null_4.f90 b/gcc/testsuite/gfortran.dg/null_4.f90
new file mode 100644 (file)
index 0000000..dbbb681
--- /dev/null
@@ -0,0 +1,14 @@
+! { dg-do run }
+!
+! PR fortran/42936
+!
+! Contributed by Mat Cross
+!
+PROGRAM PASSES_NULL
+  CALL SUB(NULL())
+CONTAINS
+  SUBROUTINE SUB(I)
+    INTEGER, POINTER :: I(:,:,:)
+    IF (ASSOCIATED (I)) CALL ABORT ()
+  END SUBROUTINE SUB
+END PROGRAM PASSES_NULL