================
@@ -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
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to