https://gcc.gnu.org/g:8a3721f43a8f0fa8603d6e13e1db0e09cb175914

commit r15-10952-g8a3721f43a8f0fa8603d6e13e1db0e09cb175914
Author: Jerry DeLisle <[email protected]>
Date:   Thu Mar 12 10:23:47 2026 -0700

    Fortran: [PR121743] ICE in build_function_decl.
    
            PR fortran/121743
    
    gcc/fortran/ChangeLog:
    
            * trans-decl.cc (build_function_decl): Adjust the
            gcc_assert condition to avoid the ICE.
    
    gcc/testsuite/ChangeLog:
    
            * gfortran.dg/pr121743.f90: New test.
    
    Co-Authored-By: Gilles Gouaillardet <[email protected]>
    (cherry picked from commit 89efa006922c80b8e9164cf593e0135df08a56a4)

Diff:
---
 gcc/fortran/trans-decl.cc              |  2 ++
 gcc/testsuite/gfortran.dg/pr121743.f90 | 11 +++++++++++
 2 files changed, 13 insertions(+)

diff --git a/gcc/fortran/trans-decl.cc b/gcc/fortran/trans-decl.cc
index 4f2ea7636b77..fd46ffc063de 100644
--- a/gcc/fortran/trans-decl.cc
+++ b/gcc/fortran/trans-decl.cc
@@ -2518,6 +2518,8 @@ build_function_decl (gfc_symbol * sym, bool global)
   /* Allow only one nesting level.  Allow public declarations.  */
   gcc_assert (current_function_decl == NULL_TREE
              || DECL_FILE_SCOPE_P (current_function_decl)
+             || (TREE_CODE (DECL_CONTEXT (current_function_decl))
+                 == FUNCTION_DECL)
              || (TREE_CODE (DECL_CONTEXT (current_function_decl))
                  == NAMESPACE_DECL));
 
diff --git a/gcc/testsuite/gfortran.dg/pr121743.f90 
b/gcc/testsuite/gfortran.dg/pr121743.f90
new file mode 100644
index 000000000000..29a1cdec2ac5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr121743.f90
@@ -0,0 +1,11 @@
+! PR fortran/121743
+! { dg-do compile }
+! { dg-options "-fcoarray=lib" }
+
+program pr121743
+end program pr121743
+subroutine foo ()
+  integer, allocatable, dimension(:), codimension[:] :: s
+  integer :: i
+  i = s(1)[1]
+end

Reply via email to