aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Vehreschild <vehre@gcc.gnu.org>2017-01-18 19:35:41 +0100
committerAndre Vehreschild <vehre@gcc.gnu.org>2017-01-18 19:35:41 +0100
commit3083fc562eb49c1df94453a17f9dbc37462ab0d0 (patch)
tree7617d8af5a4812df06b8c844823c10cd509ae737
parent9bca63d44bf10ac1341f44b86b1c0f5b1ca5bc1b (diff)
downloadgcc-3083fc562eb49c1df94453a17f9dbc37462ab0d0.zip
gcc-3083fc562eb49c1df94453a17f9dbc37462ab0d0.tar.gz
gcc-3083fc562eb49c1df94453a17f9dbc37462ab0d0.tar.bz2
re PR fortran/70696 ([Coarray] ICE on EVENT POST of host-associated EVENT_TYPE coarray)
gcc/fortran/ChangeLog: 2017-01-17 Andre Vehreschild <vehre@gcc.gnu.org> PR fortran/70696 Missed some parts, here they are: * trans-decl.c (gfc_build_qualified_array): Add static tokens to the parent function's scope. * trans-expr.c (gfc_get_tree_for_caf_expr): Shorten code. Remove unnecessary assert. gcc/testsuite/ChangeLog: 2017-01-17 Andre Vehreschild <vehre@gcc.gnu.org> PR fortran/70696 * gfortran.dg/coarray_event_1.f08: New test. From-SVN: r244587
-rw-r--r--gcc/fortran/ChangeLog9
-rw-r--r--gcc/fortran/trans-decl.c2
-rw-r--r--gcc/fortran/trans-expr.c9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/coarray_event_1.f0815
5 files changed, 35 insertions, 5 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 191bfc8..a10444c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,12 @@
+2017-01-17 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/70696
+ Missed some cases, here they are:
+ * trans-decl.c (gfc_build_qualified_array): Add static tokens to the
+ parent function's scope.
+ * trans-expr.c (gfc_get_tree_for_caf_expr): Shorten code. Remove
+ unnecessary assert.
+
2017-01-13 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/70697
diff --git a/gcc/fortran/trans-decl.c b/gcc/fortran/trans-decl.c
index fffb492..51c23e8 100644
--- a/gcc/fortran/trans-decl.c
+++ b/gcc/fortran/trans-decl.c
@@ -971,6 +971,8 @@ gfc_build_qualified_array (tree decl, gfc_symbol * sym)
DECL_CONTEXT (token) = sym->ns->proc_name->backend_decl;
gfc_module_add_decl (cur_module, token);
}
+ else if (sym->attr.host_assoc)
+ gfc_add_decl_to_parent_function (token);
else
gfc_add_decl_to_function (token);
}
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 01b7dd2..ee8e15d 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -1839,11 +1839,10 @@ gfc_get_tree_for_caf_expr (gfc_expr *expr)
}
/* Make sure the backend_decl is present before accessing it. */
- if (expr->symtree->n.sym->backend_decl == NULL_TREE)
- expr->symtree->n.sym->backend_decl
- = gfc_get_symbol_decl (expr->symtree->n.sym);
- caf_decl = expr->symtree->n.sym->backend_decl;
- gcc_assert (caf_decl);
+ caf_decl = expr->symtree->n.sym->backend_decl == NULL_TREE
+ ? gfc_get_symbol_decl (expr->symtree->n.sym)
+ : expr->symtree->n.sym->backend_decl;
+
if (expr->symtree->n.sym->ts.type == BT_CLASS)
{
if (expr->ref && expr->ref->type == REF_ARRAY)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5b38a56..01e7182 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-01-17 Andre Vehreschild <vehre@gcc.gnu.org>
+
+ PR fortran/70696
+ * gfortran.dg/coarray_event_1.f08: New test.
+
2017-01-18 Jakub Jelinek <jakub@redhat.com>
PR target/77416
diff --git a/gcc/testsuite/gfortran.dg/coarray_event_1.f08 b/gcc/testsuite/gfortran.dg/coarray_event_1.f08
new file mode 100644
index 0000000..51fc54c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/coarray_event_1.f08
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib -lcaf_single" }
+
+! Check that pr70696 is really fixed.
+
+ use iso_fortran_env
+ type(event_type) :: x[*]
+
+ ! exchange must not be called or the link problem before the patch
+ ! does not occur.
+contains
+ subroutine exchange
+ event post (x[1])
+ end subroutine
+end