diff options
author | Andre Vehreschild <vehre@gcc.gnu.org> | 2017-01-13 11:22:21 +0100 |
---|---|---|
committer | Andre Vehreschild <vehre@gcc.gnu.org> | 2017-01-13 11:22:21 +0100 |
commit | 4ccff88b71d7988940c736f123071b11fb614d05 (patch) | |
tree | 02a651be289a53ea81ff6fe0d011d7b35f3e8ef2 /libgfortran | |
parent | d8f43ee6d0921b73670e8e123cdd0850dfeb330e (diff) | |
download | gcc-4ccff88b71d7988940c736f123071b11fb614d05.zip gcc-4ccff88b71d7988940c736f123071b11fb614d05.tar.gz gcc-4ccff88b71d7988940c736f123071b11fb614d05.tar.bz2 |
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
Diffstat (limited to 'libgfortran')
-rw-r--r-- | libgfortran/ChangeLog | 6 | ||||
-rw-r--r-- | libgfortran/caf/single.c | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index f07dff1..1a68730 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -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 diff --git a/libgfortran/caf/single.c b/libgfortran/caf/single.c index cf78a1a..8d3bcbf 100644 --- a/libgfortran/caf/single.c +++ b/libgfortran/caf/single.c @@ -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 |