diff mbox

[gomp5] Allow use_device_ptr clause on target data without map clauses

Message ID 20170504155255.GT1809@tucnak
State New
Headers show

Commit Message

Jakub Jelinek May 4, 2017, 3:52 p.m. UTC
Hi!

I've created branches/gomp-5_0-branch as a playground for OpenMP 5.0
implementation (so far mostly the TR4 - OpenMP Version 5.0 Preview 1
from last fall, but including later changes too).

This is the first patch - OpenMP 5.0 will allow target data
with just use_device_ptr clauses and no map clauses, which was invalid in
4.5.

Tested on x86_64-linux, committed to gomp-5_0-branch.

2017-05-04  Jakub Jelinek  <jakub@redhat.com>

	* c-parser.c (c_parser_omp_target_data): Allow target data
	with only use_device_ptr clauses.

	* parser.c (cp_parser_omp_target_data): Allow target data
	with only use_device_ptr clauses.

	* c-c++-common/gomp/target-data-1.c: New test.


	Jakub
diff mbox

Patch

--- gcc/c/c-parser.c.jj	2017-05-04 15:05:06.000000000 +0200
+++ gcc/c/c-parser.c	2017-05-04 15:27:33.306131900 +0200
@@ -16091,6 +16091,8 @@  c_parser_omp_target_data (location_t loc
 	    *pc = OMP_CLAUSE_CHAIN (*pc);
 	    continue;
 	  }
+      else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_USE_DEVICE_PTR)
+	map_seen = 3;
       pc = &OMP_CLAUSE_CHAIN (*pc);
     }
 
@@ -16099,7 +16101,7 @@  c_parser_omp_target_data (location_t loc
       if (map_seen == 0)
 	error_at (loc,
 		  "%<#pragma omp target data%> must contain at least "
-		  "one %<map%> clause");
+		  "one %<map%> or %<use_device_ptr%> clause");
       return NULL_TREE;
     }
 
--- gcc/cp/parser.c.jj	2017-05-04 15:05:49.000000000 +0200
+++ gcc/cp/parser.c	2017-05-04 15:28:27.167445027 +0200
@@ -35627,6 +35627,8 @@  cp_parser_omp_target_data (cp_parser *pa
 	    *pc = OMP_CLAUSE_CHAIN (*pc);
 	    continue;
 	  }
+      else if (OMP_CLAUSE_CODE (*pc) == OMP_CLAUSE_USE_DEVICE_PTR)
+	map_seen = 3;
       pc = &OMP_CLAUSE_CHAIN (*pc);
     }
 
@@ -35635,7 +35637,7 @@  cp_parser_omp_target_data (cp_parser *pa
       if (map_seen == 0)
 	error_at (pragma_tok->location,
 		  "%<#pragma omp target data%> must contain at least "
-		  "one %<map%> clause");
+		  "one %<map%> or %<use_device_ptr%> clause");
       return NULL_TREE;
     }
 
--- gcc/testsuite/c-c++-common/gomp/target-data-1.c.jj	2017-05-04 17:30:41.339849938 +0200
+++ gcc/testsuite/c-c++-common/gomp/target-data-1.c	2017-05-04 17:31:48.270000004 +0200
@@ -0,0 +1,18 @@ 
+/* { dg-do compile } */
+
+void
+foo (void)
+{
+  int a[4] = { 1, 2, 3, 4 };
+  #pragma omp target data map(to:a)
+  #pragma omp target data use_device_ptr(a)
+  #pragma omp target is_device_ptr(a)
+  {
+    a[0]++;
+  }
+  #pragma omp target data		/* { dg-error "must contain at least one" } */
+  a[0]++;
+  #pragma omp target data map(to:a)
+  #pragma omp target data use_device_ptr(a) use_device_ptr(a) /* { dg-error "appears more than once in data clauses" } */
+  a[0]++;
+}