[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