================
@@ -16538,6 +16538,27 @@ void Sema::DiagnoseAlwaysNonNullPointer(Expr *E,
}
}
+ // Complain if we are converting a lambda expression to a boolean value
+ if (auto *MCallExpr = dyn_cast<CXXMemberCallExpr>(E)) {
+ if (MCallExpr->getObjectType()->isRecordType()) {
+ if (auto *MRecordDecl = MCallExpr->getRecordDecl()) {
+ if (MRecordDecl->isLambda()) {
+ std::string Str;
+ llvm::raw_string_ostream S(Str);
+ const unsigned DiagID = diag::warn_impcast_pointer_to_bool;
+ // For lambdas, the pointer type is function, which corresponds to 1.
+ const unsigned FunctionPointerType = 1;
+ // Pretty print the diagnostic for the warning
+ E->printPretty(S, nullptr, getPrintingPolicy());
+ Diag(E->getExprLoc(), DiagID)
+ << FunctionPointerType << S.str() << E->getSourceRange() << Range
+ << IsEqual;
+ return;
----------------
AaronBallman wrote:
```suggestion
Diag(E->getExprLoc(), diag::warn_impcast_pointer_to_bool)
<< /*FunctionPointerType*/ 1 << S.str() << E->getSourceRange() <<
Range
<< IsEqual;
return;
```
Two changes happening here: 1) moves some constant variables inline, 2) removes
the call to `printPretty()`.
(2) is because we expect diagnostic output to all be piped through the
diagnostics engine, so that we can do things like format it differently (e.g.,
perhaps print it as SARIF rather than text)
https://github.com/llvm/llvm-project/pull/83152
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits