[gcc r10-9444] tree-nested: Update assert for Fortran module vars [PR97927]

Tobias Burnus burnus@gcc.gnu.org
Mon Mar 15 14:44:49 GMT 2021


https://gcc.gnu.org/g:a14691e924ea4a8277ea36df08b2f5359082bf62

commit r10-9444-ga14691e924ea4a8277ea36df08b2f5359082bf62
Author: Tobias Burnus <tobias@codesourcery.com>
Date:   Mon Mar 8 13:05:48 2021 +0100

    tree-nested: Update assert for Fortran module vars [PR97927]
    
    gcc/ChangeLog:
    
            PR fortran/97927
            * tree-nested.c (convert_local_reference_stmt): Avoid calling
            lookup_field_for_decl for Fortran module (= namespace context).
    
    gcc/testsuite/ChangeLog:
    
            PR fortran/97927
            * gfortran.dg/module_variable_3.f90: New test.
    
    (cherry picked from commit 8a6a62614a8ae4544770420416d1632d6c3d3f6e)

Diff:
---
 gcc/testsuite/gfortran.dg/module_variable_3.f90 | 37 +++++++++++++++++++++++++
 gcc/tree-nested.c                               |  1 +
 2 files changed, 38 insertions(+)

diff --git a/gcc/testsuite/gfortran.dg/module_variable_3.f90 b/gcc/testsuite/gfortran.dg/module_variable_3.f90
new file mode 100644
index 00000000000..0dae6d5bdd5
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/module_variable_3.f90
@@ -0,0 +1,37 @@
+! { dg-do compile }
+! { dg-additional-options "-fdump-tree-original" }
+!
+! PR fortran/97927
+!
+! Did ICE due to the in tree-nested.c due to {clobber}
+!
+
+module mpi2
+ interface
+   subroutine MPI_Allreduce(i)
+     implicit none
+     INTEGER, OPTIONAL, INTENT(OUT) :: i
+   end subroutine MPI_Allreduce
+ end interface
+end module
+
+module modmpi
+  implicit none
+  integer ierror  ! module variable = context NAMESPACE_DECL
+end module
+
+subroutine exxengy
+  use modmpi
+  use mpi2, only: mpi_allreduce
+  implicit none
+
+  ! intent(out) implies: ierror = {clobber}
+  call mpi_allreduce(ierror)
+
+contains
+  subroutine zrho2
+    return
+  end subroutine
+end subroutine
+
+! { dg-final { scan-tree-dump "ierror = {CLOBBER};" "original" } }
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index fd2165b8bdb..0507d9afaf4 100644
--- a/gcc/tree-nested.c
+++ b/gcc/tree-nested.c
@@ -2404,6 +2404,7 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
 	{
 	  tree lhs = gimple_assign_lhs (stmt);
 	  if (DECL_P (lhs)
+	      && decl_function_context (lhs) == info->context
 	      && !use_pointer_in_frame (lhs)
 	      && lookup_field_for_decl (info, lhs, NO_INSERT))
 	    {


More information about the Gcc-cvs mailing list