aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-12-06 11:28:31 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-12-06 11:28:31 +0100
commita126d36172d336ee92f18b5c0fcf60a16690c2f0 (patch)
tree03fb22959a96145fd9a067fb30bfc92fe687b2df
parent6a9025a01fbcf15c7a39b4c7af19cbdf7def8998 (diff)
downloadgcc-a126d36172d336ee92f18b5c0fcf60a16690c2f0.zip
gcc-a126d36172d336ee92f18b5c0fcf60a16690c2f0.tar.gz
gcc-a126d36172d336ee92f18b5c0fcf60a16690c2f0.tar.bz2
re PR fortran/88304 (ICE in use_pointer_in_frame, at tree-nested.c:267)
PR fortran/88304 * tree-nested.c (convert_nonlocal_reference_stmt): Remove clobbers for non-local automatic decls. * gfortran.fortran-torture/compile/pr88304.f90: New test. From-SVN: r266847
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.fortran-torture/compile/pr88304.f9024
-rw-r--r--gcc/tree-nested.c15
4 files changed, 50 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 216f6ee..b60efcf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-12-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/88304
+ * tree-nested.c (convert_nonlocal_reference_stmt): Remove clobbers
+ for non-local automatic decls.
+
2018-12-05 David Edelsohn <dje.gcc@gmail.com>
* config/rs6000/aix72.h (ASM_DEFAULT_SPEC): Match Power7 processor
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 76c44a6..bc5bf67 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-12-06 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/88304
+ * gfortran.fortran-torture/compile/pr88304.f90: New test.
+
2018-12-06 Richard Biener <rguenther@suse.de>
PR middle-end/63184
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr88304.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr88304.f90
new file mode 100644
index 0000000..fb69b8c
--- /dev/null
+++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr88304.f90
@@ -0,0 +1,24 @@
+! PR fortran/88304
+
+module pr88304
+ implicit none
+ type t
+ integer :: b = -1
+ end type t
+contains
+ subroutine f1 (x, y)
+ integer, intent(out) :: x, y
+ x = 5
+ y = 6
+ end subroutine f1
+ subroutine f2 ()
+ type(t) :: x
+ integer :: y
+ call f3
+ if (x%b .ne. 5 .or. y .ne. 6) stop 1
+ contains
+ subroutine f3
+ call f1 (x%b, y)
+ end subroutine f3
+ end subroutine f2
+end module pr88304
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c
index 3ab60a7..ea54246 100644
--- a/gcc/tree-nested.c
+++ b/gcc/tree-nested.c
@@ -1648,6 +1648,21 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p,
*handled_ops_p = false;
return NULL_TREE;
+ case GIMPLE_ASSIGN:
+ if (gimple_clobber_p (stmt))
+ {
+ tree lhs = gimple_assign_lhs (stmt);
+ if (DECL_P (lhs)
+ && !(TREE_STATIC (lhs) || DECL_EXTERNAL (lhs))
+ && decl_function_context (lhs) != info->context)
+ {
+ gsi_replace (gsi, gimple_build_nop (), true);
+ break;
+ }
+ }
+ *handled_ops_p = false;
+ return NULL_TREE;
+
default:
/* For every other statement that we are not interested in
handling here, let the walker traverse the operands. */