This fixes an issue related to OpenMP C/C++'s default mapping of pointer variables. (That's 'defaultmap(default:pointer)' – which is possibly surprisingly *not* the same as 'defaultmap(firstprivate:pointer)'). Namely, OpenMP supports the following: int *ptr = malloc(sizeof(int)*5); #pragma omp target enter data map(ptr[:5]) #pragma omp target p[2] = 5; which matches 'firstprivate(p)' + attaching the device address of 'p[:0]' (a zero-sized array), the latter making it possible to use 'p' automatically without the need to add any map clauses at least as long as *p has been mapped before. However, for int *ptr = omp_target_alloc (sizeof(int)*5, dev_num); #pragma omp target p[2] = 5; or for #pragma omp requires unified_shared_memory int pa = &A[0]; #pragma omp target pa[0] = 6; it failed before because neither 'ptr' nor 'pa' were mapped. Solution as a user was either to add a (default)map clause (with map type than 'default'), a firstprivate or an is_device_ptr clause. The problem was that with default mapping, p and pa had the value NULL in the example above on the device. (As required by OpenMP 5.0/5.1). With the commit, they retain the original value avoiding surprises for the code above. (See PR for the reference to the relevant sections of the OpenMP 5.{0,1,2} specifications.) I would love if someone would give a review it; albeit the actual code change in libgomp/target.c is just a changing a single enum value. If there are no comments, I intent to push it next week ... Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955