https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88941
Bug ID: 88941 Summary: [nvptx, openacc, libgomp] Assertion `!s->map->active' failed for empty asynchronous parallel Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: libgomp Assignee: unassigned at gcc dot gnu.org Reporter: vries at gcc dot gnu.org CC: jakub at gcc dot gnu.org Target Milestone: --- Consider test-case: ... $ cat libgomp/testsuite/libgomp.oacc-c-c++-common/empty-async.c /* { dg-do run } */ #include <stdlib.h> int main (void) { #pragma acc parallel async ; /* no #pragma acc wait */ return 0; } ... It fails in execution: ... FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/empty-async.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -O0 execution test FAIL: libgomp.oacc-c/../libgomp.oacc-c-c++-common/empty-async.c -DACC_DEVICE_TYPE_nvidia=1 -DACC_MEM_SHARED=0 -O2 execution test ... because: ... empty-async.exe: libgomp/plugin/plugin-nvptx.c:271: map_fini: Assertion `!s->map->active' failed. ... The following scenario happens: - map_push allocates a struct cuda_map for the kernel launch parameters - the kernel is launched - an event is registered to call the corresponding map_pop after the kernel completes - main reaches return, and atexit processing starts - during atexit processing, fini_streams_for_device is called, which calls map_fini - map_fini asserts, because map_pop hasn't been called. So either: - the kernel hasn't finished yet, or - the kernel has finished, but the event has not been processed