]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
fortran: [PR78718] ICE in gfc_get_symbol_decl, at fortran/trans-decl.c
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 11 Jul 2026 04:47:59 +0000 (21:47 -0700)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Wed, 22 Jul 2026 18:35:25 +0000 (11:35 -0700)
PR fortran/78718

gcc/fortran/ChangeLog:

* resolve.cc (was_declared): Recognize the RESULT attribute so a
function's result variable is not mistaken for a host-associated
symbol of the same name.

gcc/testsuite/ChangeLog:

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

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

index 5f3edb37aa4bbd41205c38b8764ccdb98b772bbe..036da9a939ee048adcbfec3c06488f30c310eaea 100644 (file)
@@ -1655,7 +1655,7 @@ was_declared (gfc_symbol *sym)
   if (a.allocatable || a.dimension || a.dummy || a.external || a.intrinsic
       || a.optional || a.pointer || a.save || a.target || a.volatile_
       || a.value || a.access != ACCESS_UNKNOWN || a.intent != INTENT_UNKNOWN
-      || a.asynchronous || a.codimension || a.subroutine)
+      || a.asynchronous || a.codimension || a.subroutine || a.result)
     return 1;
 
   return 0;
diff --git a/gcc/testsuite/gfortran.dg/func_result_8.f90 b/gcc/testsuite/gfortran.dg/func_result_8.f90
new file mode 100644 (file)
index 0000000..bbe0b25
--- /dev/null
@@ -0,0 +1,17 @@
+! { dg-do run }
+!
+! PR fortran/78718
+program p
+   integer :: n, m
+   n = 1
+   if (f() /= 1) stop 1
+contains
+   function f() result(m)
+      call s(n, m)
+   end function
+end program
+
+subroutine s(a, b)
+   integer :: a, b
+   b = a
+end subroutine