Hi,
this patch checks for occurance of oacc offload regions in oacc routines
(which means nested parallelism, which is currently not supported) and
gives an appropriate error message.
Committed to gomp-4_0-branch.
Thanks,
- Tom
Handle oacc region in oacc routine
2015-10-16 Tom de Vries <t...@codesourcery.com>
* omp-low.c (check_omp_nesting_restrictions): Check for oacc region in
oacc routine.
* c-c++-common/goacc/parallel-in-routine.c: New test.
---
gcc/omp-low.c | 9 +++++++++
gcc/testsuite/c-c++-common/goacc/parallel-in-routine.c | 8 ++++++++
2 files changed, 17 insertions(+)
create mode 100644 gcc/testsuite/c-c++-common/goacc/parallel-in-routine.c
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index f27bde7..f7e4afc 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -3204,6 +3204,15 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
}
break;
case GIMPLE_OMP_TARGET:
+ if (is_gimple_omp_offloaded (stmt)
+ && get_oacc_fn_attrib (cfun->decl) != NULL)
+ {
+ error_at (gimple_location (stmt),
+ "OpenACC region inside of OpenACC routine, nested "
+ "parallelism not supported yet");
+ return false;
+ }
+
for (; ctx != NULL; ctx = ctx->outer)
{
if (gimple_code (ctx->stmt) != GIMPLE_OMP_TARGET)
diff --git a/gcc/testsuite/c-c++-common/goacc/parallel-in-routine.c b/gcc/testsuite/c-c++-common/goacc/parallel-in-routine.c
new file mode 100644
index 0000000..b93d63b
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/parallel-in-routine.c
@@ -0,0 +1,8 @@
+#pragma acc routine
+void
+foo (void)
+{
+#pragma acc parallel /* { dg-error "OpenACC region inside of OpenACC routine, nested parallelism not supported yet" } */
+ ;
+}
+
--
1.9.1