* interface.c (compare_actual_formal): Issue error when attempting
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Oct 2005 18:50:52 +0000 (18:50 +0000)
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 21 Oct 2005 18:50:52 +0000 (18:50 +0000)
to pass an assumed-size array as assumed-shape array argument.

* gfortran.dg/assumed_dummy_2.f90: New test.

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

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

index fb77600..be1b909 100644 (file)
@@ -1,3 +1,8 @@
+2005-10-21  Jakub Jelinek  <jakub@redhat.com>
+
+       * interface.c (compare_actual_formal): Issue error when attempting
+       to pass an assumed-size array as assumed-shape array argument.
+
 2005-10-20  Erik Edelmann  <erik.edelmann@iki.fi>
 
        PR fortran/21625
index 9edbb15..5314d87 100644 (file)
@@ -1235,6 +1235,21 @@ compare_actual_formal (gfc_actual_arglist ** ap,
          return 0;
        }
 
+      if (f->sym->as
+         && f->sym->as->type == AS_ASSUMED_SHAPE
+         && a->expr->expr_type == EXPR_VARIABLE
+         && a->expr->symtree->n.sym->as
+         && a->expr->symtree->n.sym->as->type == AS_ASSUMED_SIZE
+         && (a->expr->ref == NULL
+             || (a->expr->ref->type == REF_ARRAY
+                 && a->expr->ref->u.ar.type == AR_FULL)))
+       {
+         if (where)
+           gfc_error ("Actual argument for '%s' cannot be an assumed-size"
+                      " array at %L", f->sym->name, where);
+         return 0;
+       }
+
       if (a->expr->expr_type != EXPR_NULL
          && compare_pointer (f->sym, a->expr) == 0)
        {
index 21af7c0..741fb74 100644 (file)
@@ -1,3 +1,7 @@
+2005-10-21  Jakub Jelinek  <jakub@redhat.com>
+
+       * gfortran.dg/assumed_dummy_2.f90: New test.
+
 2005-10-21  James E Wilson  <wilson@specifix.com>
 
        PR preprocessor/15220
diff --git a/gcc/testsuite/gfortran.dg/assumed_dummy_2.f90 b/gcc/testsuite/gfortran.dg/assumed_dummy_2.f90
new file mode 100644 (file)
index 0000000..e63fa52
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+
+  double precision :: arr(5, 8)
+  call bar (arr)
+contains
+  subroutine foo (arr)
+    double precision :: arr(:,:)
+    arr(3, 4) = 24
+  end subroutine foo
+  subroutine bar (arr)
+    double precision :: arr(5,*)
+    call foo (arr)     ! { dg-error "cannot be an assumed-size array" }
+    call foo (arr (:, :8))
+  end subroutine
+end