re PR fortran/70696 ([Coarray] ICE on EVENT POST of host-associated EVENT_TYPE coarray)

gcc/testsuite/ChangeLog:

2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70696
	* gfortran.dg/coarray/event_3.f08: New test.

gcc/fortran/ChangeLog:

2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70696
	* trans-expr.c (gfc_get_tree_for_caf_expr): Ensure the backend_decl
	is valid before accessing it.

libgfortran/ChangeLog:

2017-01-13  Andre Vehreschild  <vehre@gcc.gnu.org>

	PR fortran/70696
	* caf/single.c (_gfortran_caf_register): Allocate enough memory for
	the event counter.

From-SVN: r244407
This commit is contained in:
Andre Vehreschild 2017-01-13 11:22:21 +01:00
parent d8f43ee6d0
commit 4ccff88b71
6 changed files with 46 additions and 2 deletions

View File

@ -1,3 +1,9 @@
2017-01-13 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/70696
* trans-expr.c (gfc_get_tree_for_caf_expr): Ensure the backend_decl
is valid before accessing it.
2017-01-09 Jakub Jelinek <jakub@redhat.com>
PR translation/79019

View File

@ -1838,6 +1838,10 @@ gfc_get_tree_for_caf_expr (gfc_expr *expr)
"component at %L is not supported", &expr->where);
}
/* 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);
if (expr->symtree->n.sym->ts.type == BT_CLASS)

View File

@ -1,3 +1,8 @@
2017-01-13 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/70696
* gfortran.dg/coarray/event_3.f08: New test.
2017-01-13 Richard Biener <rguenther@suse.de>
PR tree-optimization/77283

View File

@ -0,0 +1,20 @@
! { dg-do run }
!
! Check PR fortran/70696 is fixed.
program global_event
use iso_fortran_env , only : event_type
implicit none
type(event_type) :: x[*]
call exchange
contains
subroutine exchange
integer :: cnt
event post(x[1])
event post(x[1])
call event_query(x, cnt)
if (cnt /= 2) error stop 1
event wait(x, until_count=2)
end subroutine
end

View File

@ -1,3 +1,9 @@
2017-01-13 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/70696
* caf/single.c (_gfortran_caf_register): Allocate enough memory for
the event counter.
2017-01-07 Andre Vehreschild <vehre@gcc.gnu.org>
PR fortran/78781

View File

@ -141,9 +141,12 @@ _gfortran_caf_register (size_t size, caf_register_t type, caf_token_t *token,
caf_single_token_t single_token;
if (type == CAF_REGTYPE_LOCK_STATIC || type == CAF_REGTYPE_LOCK_ALLOC
|| type == CAF_REGTYPE_CRITICAL || type == CAF_REGTYPE_EVENT_STATIC
|| type == CAF_REGTYPE_EVENT_ALLOC)
|| type == CAF_REGTYPE_CRITICAL)
local = calloc (size, sizeof (bool));
else if (type == CAF_REGTYPE_EVENT_STATIC || type == CAF_REGTYPE_EVENT_ALLOC)
/* In the event_(wait|post) function the counter for events is a uint32,
so better allocate enough memory here. */
local = calloc (size, sizeof (uint32_t));
else if (type == CAF_REGTYPE_COARRAY_ALLOC_REGISTER_ONLY)
local = NULL;
else