c-parser.c (c_parser_oacc_loop): Update cclauses and clauses when calling c_finish_om...
authorCesar Philippidis <cesar@codesourcery.com>
Wed, 9 Mar 2016 19:39:53 +0000 (11:39 -0800)
committerCesar Philippidis <cesar@gcc.gnu.org>
Wed, 9 Mar 2016 19:39:53 +0000 (11:39 -0800)
gcc/c/
* c-parser.c (c_parser_oacc_loop): Update cclauses and clauses
when calling c_finish_omp_clauses.

gcc/cp/
* parser.c (cp_parser_oacc_loop): Update cclauses and clauses
when calling c_finish_omp_clauses.

gcc/testsuite/
* c-c++-common/goacc/combined-directives-2.c: New test.

From-SVN: r234089

gcc/c/ChangeLog
gcc/c/c-parser.c
gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/goacc/combined-directives-2.c [new file with mode: 0644]

index 2e54e5657e4014b242d76bfff148e92874f41774..95fde9fb0575e9a0184818ea3611c72234c500ff 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-09  Cesar Philippidis  <cesar@codesourcery.com>
+
+       * c-parser.c (c_parser_oacc_loop): Update cclauses and clauses
+       when calling c_finish_omp_clauses.
+
 2016-03-04  Bernd Schmidt  <bschmidt@redhat.com>
 
        PR c/69824
index a7d58270eae995b28f3da0ddfc682c66fb6b82ac..60ec996bf7094a73a648a0df2e4530ef9f677e61 100644 (file)
@@ -13789,9 +13789,9 @@ c_parser_oacc_loop (location_t loc, c_parser *parser, char *p_name,
     {
       clauses = c_oacc_split_loop_clauses (clauses, cclauses);
       if (*cclauses)
-       c_finish_omp_clauses (*cclauses, false);
+       *cclauses = c_finish_omp_clauses (*cclauses, false);
       if (clauses)
-       c_finish_omp_clauses (clauses, false);
+       clauses = c_finish_omp_clauses (clauses, false);
     }
 
   tree block = c_begin_compound_stmt (true);
index 4bb43db6bf1016e385a0735dcd00ade1d465dd04..b4b9b24c87b70f13a4068cb2c39f1764fb3953f5 100644 (file)
@@ -1,3 +1,8 @@
+2016-03-09  Cesar Philippidis  <cesar@codesourcery.com>
+
+       * parser.c (cp_parser_oacc_loop): Update cclauses and clauses
+       when calling c_finish_omp_clauses.
+
 2016-03-08  Jason Merrill  <jason@redhat.com>
 
        * parser.c (cp_parser_diagnose_invalid_type_name): Give helpful
index 726d5fc6a82c8eb73c5424cc1164b399ddbeb3a1..6ae45b0ca1add9b05c92c00e945e2116d6f2688f 100644 (file)
@@ -35346,9 +35346,9 @@ cp_parser_oacc_loop (cp_parser *parser, cp_token *pragma_tok, char *p_name,
     {
       clauses = c_oacc_split_loop_clauses (clauses, cclauses);
       if (*cclauses)
-       finish_omp_clauses (*cclauses, false);
+       *cclauses = finish_omp_clauses (*cclauses, false);
       if (clauses)
-       finish_omp_clauses (clauses, false);
+       clauses = finish_omp_clauses (clauses, false);
     }
 
   tree block = begin_omp_structured_block ();
index 14a2f67c2faff68f24d0b5e5e0652a4b3c1ba568..31dd65e20b7f178339b7b8204824a58a755fe78e 100644 (file)
@@ -1,3 +1,7 @@
+2016-03-09  Cesar Philippidis  <cesar@codesourcery.com>
+
+       * c-c++-common/goacc/combined-directives-2.c: New test.
+
 2016-03-09  David Malcolm  <dmalcolm@redhat.com>
 
        PR c/68473
diff --git a/gcc/testsuite/c-c++-common/goacc/combined-directives-2.c b/gcc/testsuite/c-c++-common/goacc/combined-directives-2.c
new file mode 100644 (file)
index 0000000..c51e2f9
--- /dev/null
@@ -0,0 +1,14 @@
+/* Ensure that bogus clauses aren't propagated in combined loop
+   constructs.  */
+
+int
+main ()
+{
+  int a, i;
+
+#pragma acc parallel loop vector copy(a[0:100]) reduction(+:a) /* { dg-error "'a' does not have pointer or array type" } */
+  for (i = 0; i < 100; i++)
+    a++;
+
+  return a;
+}