]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fortran: fix ICE on bad use of statement function [PR107995]
authorSteve Kargl <kargl@gcc.gnu.org>
Sat, 10 Dec 2022 21:17:15 +0000 (22:17 +0100)
committerHarald Anlauf <anlauf@gmx.de>
Sun, 11 Dec 2022 19:34:17 +0000 (20:34 +0100)
gcc/fortran/ChangeLog:

PR fortran/107995
* interface.cc (gfc_check_dummy_characteristics): Reject statement
function dummy arguments.

gcc/testsuite/ChangeLog:

PR fortran/107995
* gfortran.dg/pr107995.f90: New test.

gcc/fortran/interface.cc
gcc/testsuite/gfortran.dg/pr107995.f90 [new file with mode: 0644]

index 73799c175b7a11c5a92e7493bc3063afa1c710c5..7d8eeda5a990090fa748076fbaef30216f6d5469 100644 (file)
@@ -1334,6 +1334,12 @@ gfc_check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
   if (s1 == NULL || s2 == NULL)
     return s1 == s2 ? true : false;
 
+  if (s1->attr.proc == PROC_ST_FUNCTION || s2->attr.proc == PROC_ST_FUNCTION)
+    {
+      strncpy (errmsg, "Statement function", err_len);
+      return false;
+    }
+
   /* Check type and rank.  */
   if (type_must_agree)
     {
diff --git a/gcc/testsuite/gfortran.dg/pr107995.f90 b/gcc/testsuite/gfortran.dg/pr107995.f90
new file mode 100644 (file)
index 0000000..22e8786
--- /dev/null
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! PR fortran/107995
+! Contributed by G.Steinmetz
+
+program p
+  implicit none
+  integer :: n  ! { dg-error "Self-referential argument" }
+  n(n) = 1      ! { dg-warning "Statement function" }
+  print *, n(n) ! { dg-error "Statement function" }
+end