The return value of acc_set_cuda_stream is unspecified in OpenACC 2.6.
The testsuite changes might be unnecessary with the current async code.
libgomp/
* oacc-cuda.c (acc_set_cuda_stream): Return 0 on error/invalid
arguments.
* testsuite/libgomp.oacc-c-c++-common/lib-84.c: Handle unnumbered
async stream being an alias for a numbered async stream.
* testsuite/libgomp.oacc-c-c++-common/lib-85.c: Likewise.
(cherry picked from openacc-gcc-9-branch commit
6b0f72aad2030b3efa651652d75ad3d3cc9a76f6)
+2019-02-12 Julian Brown <julian@codesourcery.com>
+
+ * oacc-cuda.c (acc_set_cuda_stream): Return 0 on error/invalid
+ arguments.
+ * testsuite/libgomp.oacc-c-c++-common/lib-84.c: Handle unnumbered
+ async stream being an alias for a numbered async stream.
+ * testsuite/libgomp.oacc-c-c++-common/lib-85.c: Likewise.
+
2018-10-02 Thomas Schwinge <thomas@codesourcery.com>
Cesar Philippidis <cesar@codesourcery.com>
return NULL;
}
+/* As of OpenACC 2.6, the return code of this function appears to be
+ unspecified. We choose to return 1 for success, or 0 for failure. */
+
int
acc_set_cuda_stream (int async, void *stream)
{
thr = goacc_thread ();
- int ret = -1;
+ int ret = 0;
if (thr && thr->dev && thr->dev->openacc.cuda.set_stream_func)
{
goacc_aq aq = get_goacc_asyncqueue (async);
if (streams[i] != NULL)
abort ();
+ /* The no-value async may be an alias for a numbered async stream.
+ Skip over setting it below else the above NULL check will fail for
+ the aliased stream. */
+ if (i == acc_async_noval)
+ continue;
+
r = cuStreamCreate (&streams[i], CU_STREAM_DEFAULT);
if (r != CUDA_SUCCESS)
{
if (streams[i] != NULL)
abort ();
+ /* The no-value async may be an alias for a numbered async stream.
+ Skip over setting it below else the above NULL check will fail for
+ the aliased stream. */
+ if (i == acc_async_noval)
+ continue;
+
r = cuStreamCreate (&streams[i], CU_STREAM_DEFAULT);
if (r != CUDA_SUCCESS)
{