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