diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index 054e1b99e5b..b958313c21b 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,3 +1,8 @@ +2016-01-06 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. + 2016-01-04 Jakub Jelinek Update copyright years. diff --git a/libgomp/openacc.h b/libgomp/openacc.h index 45955306c4a..7ea87945839 100644 --- a/libgomp/openacc.h +++ b/libgomp/openacc.h @@ -121,6 +121,7 @@ int acc_set_cuda_stream (int, void *) __GOACC_NOTHROW; /* 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); diff --git a/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c b/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c new file mode 100644 index 00000000000..e5d9c36b107 --- /dev/null +++ b/libgomp/testsuite/libgomp.oacc-c-c++-common/acc-on-device-2.c @@ -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; +}