https://gcc.gnu.org/g:dd14b08e2caba952c0d8ff756a84e15d83aebeff

commit r15-7154-gdd14b08e2caba952c0d8ff756a84e15d83aebeff
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Thu Jan 23 11:13:52 2025 +0100

    c++: Fix weird expression in test for clauses other than 
when/default/otherwise [PR118604]
    
    Some clang analyzer warned about
    if (!strcmp (p, "when") == 0 && !default_p)
    which really looks weird, it is better to use strcmp (p, "when") != 0
    or !!strcmp (p, "when").  Furthermore, as a micro optimization, it is 
cheaper
    to evaluate default_p than calling strcmp, so that can be put first in the 
&&.
    
    The C test for the same thing wasn't that weird, but I think for consistency
    it is better to use the same test rather than trying to be creative.
    
    2025-01-23  Jakub Jelinek  <ja...@redhat.com>
    
            PR c++/118604
    gcc/c/
            * c-parser.cc (c_parser_omp_metadirective): Rewrite
            condition for clauses other than when, default and otherwise.
    gcc/cp/
            * parser.cc (cp_parser_omp_metadirective): Test !default_p
            first and use strcmp () != 0 rather than !strcmp () == 0.

Diff:
---
 gcc/c/c-parser.cc | 2 +-
 gcc/cp/parser.cc  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcc/c/c-parser.cc b/gcc/c/c-parser.cc
index f193329099f5..93da0fbea500 100644
--- a/gcc/c/c-parser.cc
+++ b/gcc/c/c-parser.cc
@@ -29069,7 +29069,7 @@ c_parser_omp_metadirective (c_parser *parser, bool 
*if_p)
          c_parser_skip_to_end_of_block_or_statement (parser, true);
          goto error;
        }
-      if (!(strcmp (p, "when") == 0 || default_p))
+      if (!default_p && strcmp (p, "when") != 0)
        {
          error_at (match_loc, "%qs is not valid for %qs",
                    p, "metadirective");
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index b823a3abd65d..24322817f3ed 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -51340,7 +51340,7 @@ cp_parser_omp_metadirective (cp_parser *parser, 
cp_token *pragma_tok,
          cp_parser_skip_to_end_of_block_or_statement (parser, true);
          goto fail;
        }
-      if (!strcmp (p, "when") == 0 && !default_p)
+      if (!default_p && strcmp (p, "when") != 0)
        {
          error_at (match_loc, "%qs is not valid for %qs",
                    p, "metadirective");

Reply via email to