re PR fortran/64925 (ICE with same names for dummy arg and internal procedure)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Mon, 18 May 2015 19:25:49 +0000 (19:25 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Mon, 18 May 2015 19:25:49 +0000 (19:25 +0000)
2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/64925
* symbol.c(check_conflict):  Check for a conflict between a dummy
argument and an internal procedure name.

2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/64925
* gfortran.dg/pr64925.f90: New test.

From-SVN: r223313

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

index dcdf95e36c341020a2c125d797a8d5459f19dd4b..6913d881b0941e57745b2523f0f09958baa09f6f 100644 (file)
@@ -1,3 +1,9 @@
+2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/64925
+       * symbol.c(check_conflict):  Check for a conflict between a dummy
+       argument and an internal procedure name.
+
 2015-05-16  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/65903
index b18608b9ab226ef4d886d208ccddb0e90c5c416e..e470cb956a717ea9c4fd95da12b4aee500a4bead 100644 (file)
@@ -458,6 +458,11 @@ check_conflict (symbol_attribute *attr, const char *name, locus *where)
        }
     }
 
+  if (attr->dummy && ((attr->function || attr->subroutine) && 
+                       gfc_current_state () == COMP_CONTAINS))
+    gfc_error_now ("internal procedure '%s' at %L conflicts with "
+                  "DUMMY argument", name, where);
+
   conf (dummy, entry);
   conf (dummy, intrinsic);
   conf (dummy, threadprivate);
index c5e67371d11aed87df4d2b24b768ef081cee37f4..593427cdbf085b0ee84cdeb5084d84449b7e1150 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/64925
+       * gfortran.dg/pr64925.f90: New test.
+
 2015-05-18  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        * gfortran.dg/lto/pr41521_0.f90: Move INTERFACE statement in program
diff --git a/gcc/testsuite/gfortran.dg/pr64925.f90 b/gcc/testsuite/gfortran.dg/pr64925.f90
new file mode 100644 (file)
index 0000000..612a9c9
--- /dev/null
@@ -0,0 +1,22 @@
+! { dg-do compile }
+! PR fortran/64925
+! Original test case provided by Bill Long <longb at cray dot com>
+!
+subroutine foo(nnn, aaa, bbb, ccc, ddd)
+  implicit none
+  integer :: nnn, aaa, bbb(nnn)
+  integer :: i
+  do i=1,nnn
+     aaa = aaa + bbb(ccc(i))
+  end do
+  call ddd(aaa)
+contains
+  integer function ccc(i)  ! { dg-error "conflicts with DUMMY" }
+    integer :: i
+    ccc = i
+  end function ccc
+  subroutine ddd(j)        ! { dg-error "conflicts with DUMMY" }
+    integer j
+    j = j + 1 
+  end subroutine ddd
+end subroutine foo