-
Notifications
You must be signed in to change notification settings - Fork 15k
[clang] [Parse] Avoid mixing enum and non-enum types in ternary expressions. NFC. #159334
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…ssions. NFC.
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.
|
@llvm/pr-subscribers-clang Author: Martin Storsjö (mstorsjo) ChangesThis fixes the following kind of warning when compiled with GCC: Use Full diff: https://github.com/llvm/llvm-project/pull/159334.diff 3 Files Affected:
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.
|
|
Admittedly, this isn't very pretty - the |
|
FYI #159275 |
Oh, what a coincidence. Feel free to go with that PR - but it would be nice to amend that one with the concrete example of a warning that is being avoided. |
|
Duplicate of #159275 |
This fixes the following kind of warning when compiled with GCC:
Use
Scope::NoScopeinstead of literal 0 as fallback in the ternary expressions.