[clang] [clang] [Parse] Avoid mixing enum and non-enum types in ternary expressions. NFC. (PR #159334)

Martin Storsjö via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 17 04:48:59 PDT 2025


https://github.com/mstorsjo created https://github.com/llvm/llvm-project/pull/159334

This fixes the following kind of warning when compiled with GCC:

    ../../clang/lib/Parse/ParseStmt.cpp: In member function ‘clang::StmtResult clang::Parser::ParseCXXTryBlockCommon(clang::SourceLocation, bool)’:
    ../../clang/lib/Parse/ParseStmt.cpp:2534:40: warning: enumerated and non-enumerated type in conditional expression [-Wextra]
     2534 |                                 (FnTry ? Scope::FnTryCatchScope : 0)));
          |                                  ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~

Use `Scope::NoScope` instead of literal 0 as fallback in the ternary expressions.

>From 98714ed0f2d84a83829c0b2a8dcf7cafcd3fa881 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin at martin.st>
Date: Wed, 17 Sep 2025 14:31:25 +0300
Subject: [PATCH] [clang] [Parse] Avoid mixing enum and non-enum types in
 ternary expressions. NFC.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This fixes the following kind of warning when compiled with GCC:

    ../../clang/lib/Parse/ParseStmt.cpp: In member function ‘clang::StmtResult clang::Parser::ParseCXXTryBlockCommon(clang::SourceLocation, bool)’:
    ../../clang/lib/Parse/ParseStmt.cpp:2534:40: warning: enumerated and non-enumerated type in conditional expression [-Wextra]
     2534 |                                 (FnTry ? Scope::FnTryCatchScope : 0)));
          |                                  ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~

Use `Scope::NoScope` instead of literal 0 as fallback in the
ternary expressions.
---
 clang/lib/Parse/ParseDecl.cpp | 13 +++++++------
 clang/lib/Parse/ParseObjc.cpp |  6 +++---
 clang/lib/Parse/ParseStmt.cpp | 12 ++++++------
 3 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp
index bbeee2e3e373f..22c01c4e371f3 100644
--- a/clang/lib/Parse/ParseDecl.cpp
+++ b/clang/lib/Parse/ParseDecl.cpp
@@ -6813,10 +6813,10 @@ void Parser::ParseDirectDeclarator(Declarator &D) {
       bool IsFunctionDeclaration = D.isFunctionDeclaratorAFunctionDeclaration();
       // Enter function-declaration scope, limiting any declarators to the
       // function prototype scope, including parameter declarators.
-      ParseScope PrototypeScope(this,
-                                Scope::FunctionPrototypeScope|Scope::DeclScope|
-                                (IsFunctionDeclaration
-                                   ? Scope::FunctionDeclarationScope : 0));
+      ParseScope PrototypeScope(
+          this, Scope::FunctionPrototypeScope | Scope::DeclScope |
+                    (IsFunctionDeclaration ? Scope::FunctionDeclarationScope
+                                           : Scope::NoScope));
 
       // The paren may be part of a C++ direct initializer, eg. "int x(1);".
       // In such a case, check if we actually have a function declarator; if it
@@ -7097,8 +7097,9 @@ void Parser::ParseParenDeclarator(Declarator &D) {
   // function prototype scope, including parameter declarators.
   ParseScope PrototypeScope(this,
                             Scope::FunctionPrototypeScope | Scope::DeclScope |
-                            (D.isFunctionDeclaratorAFunctionDeclaration()
-                               ? Scope::FunctionDeclarationScope : 0));
+                                (D.isFunctionDeclaratorAFunctionDeclaration()
+                                     ? Scope::FunctionDeclarationScope
+                                     : Scope::NoScope));
   ParseFunctionDeclarator(D, attrs, T, false, RequiresArg);
   PrototypeScope.Exit();
 }
diff --git a/clang/lib/Parse/ParseObjc.cpp b/clang/lib/Parse/ParseObjc.cpp
index 291c70e7bad4b..a64fb02294c5a 100644
--- a/clang/lib/Parse/ParseObjc.cpp
+++ b/clang/lib/Parse/ParseObjc.cpp
@@ -3295,9 +3295,9 @@ void Parser::ParseLexedObjCMethodDefs(LexedMethod &LM, bool parseMethod) {
   assert(Tok.isOneOf(tok::l_brace, tok::kw_try, tok::colon) &&
          "Inline objective-c method not starting with '{' or 'try' or ':'");
   // Enter a scope for the method or c-function body.
-  ParseScope BodyScope(this, (parseMethod ? Scope::ObjCMethodScope : 0) |
-                                 Scope::FnScope | Scope::DeclScope |
-                                 Scope::CompoundStmtScope);
+  ParseScope BodyScope(
+      this, (parseMethod ? Scope::ObjCMethodScope : Scope::NoScope) |
+                Scope::FnScope | Scope::DeclScope | Scope::CompoundStmtScope);
   Sema::FPFeaturesStateRAII SaveFPFeatures(Actions);
 
   // Tell the actions module that we have entered a method or c-function definition
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp
index 62361c066a3f3..2e7af1219547e 100644
--- a/clang/lib/Parse/ParseStmt.cpp
+++ b/clang/lib/Parse/ParseStmt.cpp
@@ -2529,9 +2529,9 @@ StmtResult Parser::ParseCXXTryBlockCommon(SourceLocation TryLoc, bool FnTry) {
     return StmtError(Diag(Tok, diag::err_expected) << tok::l_brace);
 
   StmtResult TryBlock(ParseCompoundStatement(
-      /*isStmtExpr=*/false, Scope::DeclScope | Scope::TryScope |
-                                Scope::CompoundStmtScope |
-                                (FnTry ? Scope::FnTryCatchScope : 0)));
+      /*isStmtExpr=*/false,
+      Scope::DeclScope | Scope::TryScope | Scope::CompoundStmtScope |
+          (FnTry ? Scope::FnTryCatchScope : Scope::NoScope)));
   if (TryBlock.isInvalid())
     return TryBlock;
 
@@ -2593,9 +2593,9 @@ StmtResult Parser::ParseCXXCatchBlock(bool FnCatch) {
   // C++ 3.3.2p3:
   // The name in a catch exception-declaration is local to the handler and
   // shall not be redeclared in the outermost block of the handler.
-  ParseScope CatchScope(this, Scope::DeclScope | Scope::ControlScope |
-                                  Scope::CatchScope |
-                                  (FnCatch ? Scope::FnTryCatchScope : 0));
+  ParseScope CatchScope(
+      this, Scope::DeclScope | Scope::ControlScope | Scope::CatchScope |
+                (FnCatch ? Scope::FnTryCatchScope : Scope::NoScope));
 
   // exception-declaration is equivalent to '...' or a parameter-declaration
   // without default arguments.



More information about the cfe-commits mailing list