[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