aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/cp/semantics.c6
-rw-r--r--gcc/testsuite/c-c++-common/gomp/task-detach-3.c19
2 files changed, 22 insertions, 3 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 4520181..3a6468f 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -6527,7 +6527,7 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
has been seen, -2 if mixed inscan/normal reduction diagnosed. */
int reduction_seen = 0;
bool allocate_seen = false;
- bool detach_seen = false;
+ tree detach_seen = NULL_TREE;
bool mergeable_seen = false;
bitmap_obstack_initialize (NULL);
@@ -7578,7 +7578,7 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
type);
remove = true;
}
- detach_seen = true;
+ detach_seen = c;
cxx_mark_addressable (t);
}
break;
@@ -8548,7 +8548,7 @@ finish_omp_clauses (tree clauses, enum c_omp_region_type ort)
|| OMP_CLAUSE_CODE (c) == OMP_CLAUSE_PRIVATE
|| OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
|| OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE)
- && OMP_CLAUSE_DECL (c) == t)
+ && OMP_CLAUSE_DECL (c) == OMP_CLAUSE_DECL (detach_seen))
{
error_at (OMP_CLAUSE_LOCATION (c),
"the event handle of a %<detach%> clause "
diff --git a/gcc/testsuite/c-c++-common/gomp/task-detach-3.c b/gcc/testsuite/c-c++-common/gomp/task-detach-3.c
new file mode 100644
index 0000000..97e622d
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/gomp/task-detach-3.c
@@ -0,0 +1,19 @@
+/* PR c++/100319 */
+/* { dg-do compile } */
+/* { dg-options "-fopenmp" } */
+
+typedef enum omp_event_handle_t
+{
+ __omp_event_handle_t_max__ = __UINTPTR_MAX__
+} omp_event_handle_t;
+
+extern void omp_fulfill_event (omp_event_handle_t);
+
+void f (omp_event_handle_t x, omp_event_handle_t y, int z)
+{
+ #pragma omp task detach (x) firstprivate (y, z) /* { dg-bogus "the event handle of a 'detach' clause should not be in a data-sharing clause" } */
+ ;
+
+ #pragma omp task detach (x) shared (y) /* { dg-bogus "the event handle of a 'detach' clause should not be in a data-sharing clause" } */
+ ;
+}