This patch fixes the new -Wparentheses warnings (implemented by the
subsequent patch) that are encountered during bootstrap:

/home/patrick/code/gcc/gcc/omp-low.c: In function ‘void 
scan_sharing_clauses(tree, omp_context*, bool)’:
/home/patrick/code/gcc/gcc/omp-low.c:2381:6: error: suggest explicit braces to 
avoid ambiguous ‘else’ [-Werror=parentheses]
   if (scan_array_reductions)
      ^
/home/patrick/code/gcc/gcc/gimplify.c: In function ‘gimple* 
gimplify_omp_ordered(tree, gimple_seq)’:
/home/patrick/code/gcc/gcc/gimplify.c:9880:6: error: suggest explicit braces to 
avoid ambiguous ‘else’ [-Werror=parentheses]
   if (gimplify_omp_ctxp)
      ^
In file included from /home/patrick/code/gcc/gcc/cp/optimize.c:25:0:
/home/patrick/code/gcc/gcc/cp/optimize.c: In function ‘void 
populate_clone_array(tree, tree_node**)’:
/home/patrick/code/gcc/gcc/cp/cp-tree.h:2529:6: error: suggest explicit braces 
to avoid ambiguous ‘else’ [-Werror=parentheses]
   if (TREE_CODE (FN) == FUNCTION_DECL   \
      ^
/home/patrick/code/gcc/gcc/cp/optimize.c:222:3: note: in expansion of macro 
‘FOR_EACH_CLONE’
   FOR_EACH_CLONE (clone, fn)
   ^~~~~~~~~~~~~~
/home/patrick/code/gcc/gcc/fortran/openmp.c: In function ‘gfc_omp_udr* 
gfc_find_omp_udr(gfc_namespace*, const char*, gfc_typespec*)’:
/home/patrick/code/gcc/gcc/fortran/openmp.c:177:10: error: suggest explicit 
braces to avoid ambiguous ‘else’ [-Werror=parentheses]
       if (st != NULL)
          ^

In each case I think the warning is harmless since the indentation of
the code in question corresponds to how the "else" is actually parsed
so I fixed each case simply by enclosing the entire body of the outer
"if" in braces.

The FOR_EACH_CLONE change resolves the cp/optimize.c warning.  It
adjusts the layout of the macro from

  if (p)
    for (...)

to

  if (!p)
    ;
  else for (...)

so that an "else" encountered in the body of the for-statement can no
longer possibly bind to the outer "if (p)" conditional.

Is this OK to commit after bootstrap + regtesting?

gcc/cp/ChangeLog:

        PR c/70436
        * cp-tree.h (FOR_EACH_CLONE): Restructure macro to avoid
        potentially generating a future -Wparentheses warning in its
        callers.

gcc/fortran/ChangeLog:

        PR c/70436
        * openmp.c (gfc_find_omp_udr): Add explicit braces to resolve a
        future -Wparentheses warning.

gcc/ChangeLog:

        PR c/70436
        * gimplify.c (gimplify_omp_ordered): Add explicit braces to
        resolve a future -Wparentheses warning.
        * omp-low.c (scan_sharing_clauses): Likewise.

gcc/testsuite/ChangeLog:

        PR c/70436
        * g++.dg/plugin/pragma_plugin.c (handle_pragma_sayhello): Add
        explicit braces to resolve a future -Wparentheses warning.
---
 gcc/cp/cp-tree.h                            |  13 ++--
 gcc/fortran/openmp.c                        |  36 +++++-----
 gcc/gimplify.c                              | 108 ++++++++++++++--------------
 gcc/omp-low.c                               |  28 ++++----
 gcc/testsuite/g++.dg/plugin/pragma_plugin.c |  12 ++--
 5 files changed, 103 insertions(+), 94 deletions(-)

diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h
index b7b770f..65f5693 100644
--- a/gcc/cp/cp-tree.h
+++ b/gcc/cp/cp-tree.h
@@ -2526,12 +2526,13 @@ struct GTY(()) lang_decl {
 
   */
 #define FOR_EACH_CLONE(CLONE, FN)                      \
-  if (TREE_CODE (FN) == FUNCTION_DECL                  \
-      && (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (FN)      \
-         || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (FN)))   \
-     for (CLONE = DECL_CHAIN (FN);                     \
-         CLONE && DECL_CLONED_FUNCTION_P (CLONE);      \
-         CLONE = DECL_CHAIN (CLONE))
+  if (!(TREE_CODE (FN) == FUNCTION_DECL                        \
+       && (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (FN)     \
+           || DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P (FN))))\
+    ;                                                  \
+  else for (CLONE = DECL_CHAIN (FN);                   \
+           CLONE && DECL_CLONED_FUNCTION_P (CLONE);    \
+           CLONE = DECL_CHAIN (CLONE))
 
 /* Nonzero if NODE has DECL_DISCRIMINATOR and not DECL_ACCESS.  */
 #define DECL_DISCRIMINATOR_P(NODE)     \
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index a6c39cd..0dd1a92 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -175,24 +175,26 @@ gfc_find_omp_udr (gfc_namespace *ns, const char *name, 
gfc_typespec *ts)
 
       st = gfc_find_symtree (ns->omp_udr_root, name);
       if (st != NULL)
-       for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
-         if (ts == NULL)
-           return omp_udr;
-         else if (gfc_compare_types (&omp_udr->ts, ts))
-           {
-             if (ts->type == BT_CHARACTER)
-               {
-                 if (omp_udr->ts.u.cl->length == NULL)
-                   return omp_udr;
-                 if (ts->u.cl->length == NULL)
-                   continue;
-                 if (gfc_compare_expr (omp_udr->ts.u.cl->length,
-                                       ts->u.cl->length,
-                                       INTRINSIC_EQ) != 0)
-                   continue;
-               }
+       {
+         for (omp_udr = st->n.omp_udr; omp_udr; omp_udr = omp_udr->next)
+           if (ts == NULL)
              return omp_udr;
-           }
+           else if (gfc_compare_types (&omp_udr->ts, ts))
+             {
+               if (ts->type == BT_CHARACTER)
+                 {
+                   if (omp_udr->ts.u.cl->length == NULL)
+                     return omp_udr;
+                   if (ts->u.cl->length == NULL)
+                     continue;
+                   if (gfc_compare_expr (omp_udr->ts.u.cl->length,
+                                         ts->u.cl->length,
+                                         INTRINSIC_EQ) != 0)
+                     continue;
+                 }
+               return omp_udr;
+             }
+       }
 
       /* Don't escape an interface block.  */
       if (ns && !ns->has_import_set
diff --git a/gcc/gimplify.c b/gcc/gimplify.c
index 26b5a10..1c824fa 100644
--- a/gcc/gimplify.c
+++ b/gcc/gimplify.c
@@ -9878,64 +9878,66 @@ gimplify_omp_ordered (tree expr, gimple_seq body)
   tree sink_c = NULL_TREE;
 
   if (gimplify_omp_ctxp)
-    for (c = OMP_ORDERED_CLAUSES (expr); c; c = OMP_CLAUSE_CHAIN (c))
-      if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
-         && gimplify_omp_ctxp->loop_iter_var.is_empty ()
-         && (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK
-             || OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE))
-       {
-         error_at (OMP_CLAUSE_LOCATION (c),
-                   "%<ordered%> construct with %<depend%> clause must be "
-                   "closely nested inside a loop with %<ordered%> clause "
-                   "with a parameter");
-         failures++;
-       }
-      else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
-              && OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK)
-       {
-         bool fail = false;
-         for (decls = OMP_CLAUSE_DECL (c), i = 0;
-              decls && TREE_CODE (decls) == TREE_LIST;
-              decls = TREE_CHAIN (decls), ++i)
-           if (i >= gimplify_omp_ctxp->loop_iter_var.length () / 2)
-             continue;
-           else if (TREE_VALUE (decls)
-                    != gimplify_omp_ctxp->loop_iter_var[2 * i])
+    {
+      for (c = OMP_ORDERED_CLAUSES (expr); c; c = OMP_CLAUSE_CHAIN (c))
+       if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
+           && gimplify_omp_ctxp->loop_iter_var.is_empty ()
+           && (OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK
+               || OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE))
+         {
+           error_at (OMP_CLAUSE_LOCATION (c),
+                     "%<ordered%> construct with %<depend%> clause must be "
+                     "closely nested inside a loop with %<ordered%> clause "
+                     "with a parameter");
+           failures++;
+         }
+       else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
+                && OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SINK)
+         {
+           bool fail = false;
+           for (decls = OMP_CLAUSE_DECL (c), i = 0;
+                decls && TREE_CODE (decls) == TREE_LIST;
+                decls = TREE_CHAIN (decls), ++i)
+             if (i >= gimplify_omp_ctxp->loop_iter_var.length () / 2)
+               continue;
+             else if (TREE_VALUE (decls)
+                      != gimplify_omp_ctxp->loop_iter_var[2 * i])
+               {
+                 error_at (OMP_CLAUSE_LOCATION (c),
+                           "variable %qE is not an iteration "
+                           "of outermost loop %d, expected %qE",
+                           TREE_VALUE (decls), i + 1,
+                           gimplify_omp_ctxp->loop_iter_var[2 * i]);
+                 fail = true;
+                 failures++;
+               }
+             else
+               TREE_VALUE (decls)
+                 = gimplify_omp_ctxp->loop_iter_var[2 * i + 1];
+           if (!fail && i != gimplify_omp_ctxp->loop_iter_var.length () / 2)
+             {
+               error_at (OMP_CLAUSE_LOCATION (c),
+                         "number of variables in %<depend(sink)%> "
+                         "clause does not match number of "
+                         "iteration variables");
+               failures++;
+             }
+           sink_c = c;
+         }
+       else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
+                && OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE)
+         {
+           if (source_c)
              {
                error_at (OMP_CLAUSE_LOCATION (c),
-                         "variable %qE is not an iteration "
-                         "of outermost loop %d, expected %qE",
-                         TREE_VALUE (decls), i + 1,
-                         gimplify_omp_ctxp->loop_iter_var[2 * i]);
-               fail = true;
+                         "more than one %<depend(source)%> clause on an "
+                         "%<ordered%> construct");
                failures++;
              }
            else
-             TREE_VALUE (decls)
-               = gimplify_omp_ctxp->loop_iter_var[2 * i + 1];
-         if (!fail && i != gimplify_omp_ctxp->loop_iter_var.length () / 2)
-           {
-             error_at (OMP_CLAUSE_LOCATION (c),
-                       "number of variables in %<depend(sink)%> "
-                       "clause does not match number of "
-                       "iteration variables");
-             failures++;
-           }
-         sink_c = c;
-       }
-      else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
-              && OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE)
-       {
-         if (source_c)
-           {
-             error_at (OMP_CLAUSE_LOCATION (c),
-                       "more than one %<depend(source)%> clause on an "
-                       "%<ordered%> construct");
-             failures++;
-           }
-         else
-           source_c = c;
-       }
+             source_c = c;
+         }
+    }
   if (source_c && sink_c)
     {
       error_at (OMP_CLAUSE_LOCATION (source_c),
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 3fd6eb3..df328f9 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -2379,19 +2379,21 @@ scan_sharing_clauses (tree clauses, omp_context *ctx,
   gcc_checking_assert (!scan_array_reductions
                       || !is_gimple_omp_oacc (ctx->stmt));
   if (scan_array_reductions)
-    for (c = clauses; c; c = OMP_CLAUSE_CHAIN (c))
-      if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
-         && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
-       {
-         scan_omp (&OMP_CLAUSE_REDUCTION_GIMPLE_INIT (c), ctx);
-         scan_omp (&OMP_CLAUSE_REDUCTION_GIMPLE_MERGE (c), ctx);
-       }
-      else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
-              && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c))
-       scan_omp (&OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c), ctx);
-      else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
-              && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
-       scan_omp (&OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c), ctx);
+    {
+      for (c = clauses; c; c = OMP_CLAUSE_CHAIN (c))
+       if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_REDUCTION
+           && OMP_CLAUSE_REDUCTION_PLACEHOLDER (c))
+         {
+           scan_omp (&OMP_CLAUSE_REDUCTION_GIMPLE_INIT (c), ctx);
+           scan_omp (&OMP_CLAUSE_REDUCTION_GIMPLE_MERGE (c), ctx);
+         }
+       else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
+                && OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c))
+         scan_omp (&OMP_CLAUSE_LASTPRIVATE_GIMPLE_SEQ (c), ctx);
+       else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LINEAR
+                && OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c))
+         scan_omp (&OMP_CLAUSE_LINEAR_GIMPLE_SEQ (c), ctx);
+    }
 }
 
 /* Create a new name for omp child function.  Returns an identifier.  If
diff --git a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c 
b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
index 940c302..6794c95 100644
--- a/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
+++ b/gcc/testsuite/g++.dg/plugin/pragma_plugin.c
@@ -32,14 +32,16 @@ handle_pragma_sayhello (cpp_reader *dummy)
       return;
     }
   if (TREE_STRING_LENGTH (message) > 1)
-    if (cfun)
-      warning (OPT_Wpragmas, 
-             "%<pragma GCCPLUGIN sayhello%> from function %qE: %s",
-             cfun->decl, TREE_STRING_POINTER (message));
+    {
+      if (cfun)
+        warning (OPT_Wpragmas, 
+               "%<pragma GCCPLUGIN sayhello%> from function %qE: %s",
+               cfun->decl, TREE_STRING_POINTER (message));
       else
-       warning (OPT_Wpragmas, 
+        warning (OPT_Wpragmas, 
            "%<pragma GCCPLUGIN sayhello%> outside of function: %s",
            TREE_STRING_POINTER (message));
+    }
 }
 
 /* Plugin callback called during pragma registration */
-- 
2.8.0.rc3.27.gade0865

Reply via email to