On Wed, Jul 08, 2020 at 12:21:57PM +0200, Thomas Schwinge wrote: > Andrew and I are currently trying to sort out zero-length array sections > behavior in the OpenACC context. From that fell out a testcase that I > created to learn/verify (some of?) the OpenMP behavior. OK to push? > > > Oh, and any thought on this: > > int dev = omp_get_default_device(); > bool shared_mem = false; > #pragma omp target map(alloc:shared_mem) > shared_mem = true; > #if 1 //TODO > /* 'omp_target_is_present' (and a few others) have behavior different from > most others, where 'devicep == NULL' is handled the same as > 'device_num == > GOMP_DEVICE_HOST_FALLBACK'. Is that difference intentional? */ > /* Given that GCC doesn't support shared-memory offload devices, we fake > the > expected thing as follows. */ > if (shared_mem) > dev = omp_get_initial_device(); // GOMP_DEVICE_HOST_FALLBACK > #endif
The difference is in quite unclear cases, where the device is either not valid (outside of range) or the device used to be valid, but has been unloaded already. I don't remember why have I done it that way, we could as well treat also the device == NULL cases as fallback, but any expectations how it will behave in those cases are wrong IMHO. > int *a = malloc(n * sizeof *a); > assert(a); I'd probably just return 0; from the test instead if a is NULL, that is not something invalid. Otherwise LGTM. Jakub