c-typeck.c (c_finish_omp_clauses): Go to check_dup_generic at the end, unless remove...
authorJakub Jelinek <jakub@redhat.com>
Fri, 1 Nov 2013 12:25:16 +0000 (13:25 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 1 Nov 2013 12:25:16 +0000 (13:25 +0100)
* c-typeck.c (c_finish_omp_clauses) <case OMP_CLAUSE_UNIFORM>: Go to
check_dup_generic at the end, unless remove is true.
(c_finish_omp_clauses) <case OMP_CLAUSE_REDUCTION>: Add break; after
remove = true;.
(c_finish_omp_clauses) <case OMP_CLAUSE_COPYIN>: Likewise.

* semantics.c (finish_omp_clauses) <case OMP_CLAUSE_UNIFORM>: Go to
check_dup_generic at the end, unless remove is true.
(finish_omp_clauses) <case OMP_CLAUSE_LINEAR>: Add break; after
remove = true;.

* gcc.dg/gomp/declare-simd-2.c (f12, f13, f14, f15, f16, f17): New
tests.
* g++.dg/gomp/declare-simd-2.C (f15, f16, f17, f18, f19, f20): New
tests.

From-SVN: r204294

gcc/c/ChangeLog
gcc/c/c-typeck.c
gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/gomp/declare-simd-2.C
gcc/testsuite/gcc.dg/gomp/declare-simd-2.c

index 8f8a245edcf5c6130af8b7857570421aae2b1f50..f009ee9af1e2dee0f234f12f59a35e00bdbf99d4 100644 (file)
@@ -1,3 +1,11 @@
+2013-11-01  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-typeck.c (c_finish_omp_clauses) <case OMP_CLAUSE_UNIFORM>: Go to
+       check_dup_generic at the end, unless remove is true.
+       (c_finish_omp_clauses) <case OMP_CLAUSE_REDUCTION>: Add break; after
+       remove = true;.
+       (c_finish_omp_clauses) <case OMP_CLAUSE_COPYIN>: Likewise.
+
 2013-10-31  Jakub Jelinek  <jakub@redhat.com>
 
        * c-typeck.c (c_finish_omp_clauses): Diagnose aligned clause
index 5a23c843295616f8a7b39586e1056cd4b0371492..8f1d3a4837aa410aeb16dc151d7f9e1fcf109fe9 100644 (file)
@@ -11316,6 +11316,7 @@ c_finish_omp_clauses (tree clauses)
                            "%qE has invalid type for %<reduction(%s)%>",
                            t, r_name);
                  remove = true;
+                 break;
                }
            }
          else if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c) == error_mark_node)
@@ -11323,6 +11324,7 @@ c_finish_omp_clauses (tree clauses)
              error_at (OMP_CLAUSE_LOCATION (c),
                        "user defined reduction not found for %qD", t);
              remove = true;
+             break;
            }
          else if (OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
            {
@@ -11406,6 +11408,7 @@ c_finish_omp_clauses (tree clauses)
              error_at (OMP_CLAUSE_LOCATION (c),
                        "%qE must be %<threadprivate%> for %<copyin%>", t);
              remove = true;
+             break;
            }
          goto check_dup_generic;
 
@@ -11615,8 +11618,9 @@ c_finish_omp_clauses (tree clauses)
                error_at (OMP_CLAUSE_LOCATION (c),
                          "%qE is not an argument in %<uniform%> clause", t);
              remove = true;
+             break;
            }
-         break;
+         goto check_dup_generic;
 
        case OMP_CLAUSE_NOWAIT:
          if (copyprivate_seen)
index e7b1e254318559c1da67319ab6d844e3a61a9b7f..66ef9e3576f0bd4e5ae2671681e01eeb2b4d417c 100644 (file)
@@ -1,3 +1,10 @@
+2013-11-01  Jakub Jelinek  <jakub@redhat.com>
+
+       * semantics.c (finish_omp_clauses) <case OMP_CLAUSE_UNIFORM>: Go to
+       check_dup_generic at the end, unless remove is true.
+       (finish_omp_clauses) <case OMP_CLAUSE_LINEAR>: Add break; after
+       remove = true;.
+
 2013-10-31  Jakub Jelinek  <jakub@redhat.com>
 
        * semantics.c (finish_omp_clauses): Diagnose aligned clause
index 49097f7f1b33e122e921083fccb3e38413c5bbba..6c560c660a9dbf40395c035622a3edfc71bb75ff 100644 (file)
@@ -5188,12 +5188,16 @@ finish_omp_clauses (tree clauses)
          if (t == NULL_TREE)
            t = integer_one_node;
          if (t == error_mark_node)
-           remove = true;
+           {
+             remove = true;
+             break;
+           }
          else if (!type_dependent_expression_p (t)
                   && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
            {
              error ("linear step expression must be integral");
              remove = true;
+             break;
            }
          else
            {
@@ -5210,7 +5214,10 @@ finish_omp_clauses (tree clauses)
                                           MINUS_EXPR, sizetype, t,
                                           OMP_CLAUSE_DECL (c));
                      if (t == error_mark_node)
-                       remove = true;
+                       {
+                         remove = true;
+                         break;
+                       }
                    }
                }
              OMP_CLAUSE_LINEAR_STEP (c) = t;
@@ -5626,8 +5633,9 @@ finish_omp_clauses (tree clauses)
              else
                error ("%qE is not an argument in %<uniform%> clause", t);
              remove = true;
+             break;
            }
-         break;
+         goto check_dup_generic;
 
        case OMP_CLAUSE_NOWAIT:
        case OMP_CLAUSE_ORDERED:
index 03ad579ad318fee1c026301b311ba79eb2603b5a..03eb1b3c909fc31308697d253415ac779b4faf56 100644 (file)
@@ -1,3 +1,10 @@
+2013-11-01  Jakub Jelinek  <jakub@redhat.com>
+
+       * gcc.dg/gomp/declare-simd-2.c (f12, f13, f14, f15, f16, f17): New
+       tests.
+       * g++.dg/gomp/declare-simd-2.C (f15, f16, f17, f18, f19, f20): New
+       tests.
+
 2013-11-01  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/57893
index e450a0241c75910a5521bca69539e65e6a2005a2..a6151015bae88cd57705d685daa59926226e590d 100644 (file)
@@ -82,4 +82,17 @@ int fn14 (double &d);
 #pragma omp declare simd aligned (e)   // { dg-error "neither a pointer nor an array" }
 int fn14 (D e);
 
+#pragma omp declare simd linear(a:7) uniform(a)        // { dg-error "appears more than once" }
+int f15 (int a);
+#pragma omp declare simd linear(a) linear(a)   // { dg-error "appears more than once" }
+int f16 (int a);
+#pragma omp declare simd linear(a) linear(a:7) // { dg-error "appears more than once" }
+int f17 (int a);
+#pragma omp declare simd linear(a:6) linear(a:6)// { dg-error "appears more than once" }
+int f18 (int a);
+#pragma omp declare simd uniform(a) uniform(a) // { dg-error "appears more than once" }
+int f19 (int a);
+#pragma omp declare simd uniform(a) aligned (a: 32)
+int f20 (int *a);
+
 // { dg-error "has no member" "" { target *-*-* } 61 }
index 6c7de8b73f9f612e6fde900958f218006ac79301..c0a42a2ef465c67ba11881002921eaff7585c2cf 100644 (file)
@@ -39,3 +39,16 @@ struct D { int d; };
 
 #pragma omp declare simd aligned (e)    /* { dg-error "neither a pointer nor an array" } */
 int fn11 (struct D e);   
+
+#pragma omp declare simd linear(a:7) uniform(a)        /* { dg-error "appears more than once" } */
+int f12 (int a);
+#pragma omp declare simd linear(a) linear(a)   /* { dg-error "appears more than once" } */
+int f13 (int a);
+#pragma omp declare simd linear(a) linear(a:7) /* { dg-error "appears more than once" } */
+int f14 (int a);
+#pragma omp declare simd linear(a:6) linear(a:6)/* { dg-error "appears more than once" } */
+int f15 (int a);
+#pragma omp declare simd uniform(a) uniform(a) /* { dg-error "appears more than once" } */
+int f16 (int a);
+#pragma omp declare simd uniform(a) aligned (a: 32)
+int f17 (int *a);