2016-01-04 Nathan Sidwell * openacc.c (acc_on_device): Add routine pragma for C++ wrapper. * testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c: New. Index: libgomp/openacc.h =================================================================== --- libgomp/openacc.h (revision 232058) +++ libgomp/openacc.h (working copy) @@ -121,6 +121,7 @@ int acc_set_cuda_stream (int, void *) __ /* Forwarding function with correctly typed arg. */ +#pragma acc routine seq inline int acc_on_device (acc_device_t __arg) __GOACC_NOTHROW { return acc_on_device ((int) __arg); Index: libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c =================================================================== --- libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c (revision 0) +++ libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c (working copy) @@ -0,0 +1,23 @@ +/* { dg-additional-options "-O0" } */ + +#include + +/* acc_on_device might not be folded at -O0, but it should work. */ + +int main () +{ + int dev; + +#pragma acc parallel copyout (dev) + { + dev = acc_on_device (acc_device_not_host); + } + + int expect = 1; + +#if ACC_DEVICE_TYPE_host + expect = 0; +#endif + + return dev != expect; +}