Hi Chung-Lin! On Tue, 25 Sep 2018 21:10:47 +0800, Chung-Lin Tang <chunglin_t...@mentor.com> wrote: > void > acc_wait_async (int async1, int async2) > { > + struct goacc_thread *thr = get_goacc_thread (); > > + goacc_aq aq2 = lookup_goacc_asyncqueue (thr, true, async2); > + goacc_aq aq1 = lookup_goacc_asyncqueue (thr, false, async1); > + if (!aq1) > + gomp_fatal ("invalid async 1"); > + if (aq1 == aq2) > + gomp_fatal ("identical parameters"); > > + thr->dev->openacc.async.synchronize_func (aq1); > + thr->dev->openacc.async.serialize_func (aq1, aq2); > }
Invoked as "acc_wait_async ([...], acc_async_sync)" (as used in a test case that I'll soon submit/commit), we'll end up with "aq2 == NULL", and will segfault in the nvptx "openacc.async.serialize_func". Good to fix as follows? commit 448ff855bd954a72b5edb19fc1f3d481833fcb59 Author: Thomas Schwinge <tho...@codesourcery.com> Date: Thu Dec 13 17:43:42 2018 +0100 into async re-work: adjust for test case added in "[PR88484] OpenACC wait directive without wait argument but with async clause" --- libgomp/oacc-async.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git libgomp/oacc-async.c libgomp/oacc-async.c index 7e61b5dc0a05..a38e42781aa0 100644 --- libgomp/oacc-async.c +++ libgomp/oacc-async.c @@ -196,7 +196,8 @@ acc_wait_async (int async1, int async2) gomp_fatal ("identical parameters"); thr->dev->openacc.async.synchronize_func (aq1); - thr->dev->openacc.async.serialize_func (aq1, aq2); + if (aq2) + thr->dev->openacc.async.serialize_func (aq1, aq2); } void Grüße Thomas