================
@@ -422,22 +456,71 @@ class RawPtrRefCallArgsChecker
BR->emitReport(std::move(Report));
}
- void reportBugOnReceiver(const Expr *CallArg,
+ void reportBugOnReceiver(const NamedDecl *Callee, const Expr *CallArg,
const Decl *DeclWithIssue) const {
assert(CallArg);
const SourceLocation SrcLocToReport = CallArg->getSourceRange().getBegin();
SmallString<100> Buf;
llvm::raw_svector_ostream Os(Buf);
- Os << "Receiver is " << ptrKind() << " and unsafe.";
+ Os << "Receiver";
+ printArgument(Os, CallArg, DeclWithIssue);
+ if (Callee) {
+ Os << " (to ";
+ printQuotedQualifiedName(Os, Callee);
+ Os << ")";
+ }
+ Os << " is a raw pointer to " << typeName();
+ printType(Os, CallArg->getType());
PathDiagnosticLocation BSLoc(SrcLocToReport, BR->getSourceManager());
auto Report = std::make_unique<BasicBugReport>(Bug, Os.str(), BSLoc);
Report->addRange(CallArg->getSourceRange());
Report->setDeclWithIssue(DeclWithIssue);
BR->emitReport(std::move(Report));
}
+
+ void printArgument(llvm::raw_svector_ostream &Os, const Expr *Arg,
+ const Decl *D) const {
+ SmallString<100> Buf;
+ llvm::raw_svector_ostream ArgOs(Buf);
+ Arg->printPretty(ArgOs, /*Helper=*/nullptr,
+ D->getASTContext().getPrintingPolicy());
+ auto ArgCode = ArgOs.str();
+ if (ArgCode.contains('\n'))
+ return;
+ ArgCode = ArgCode.slice(0, 50);
+ if (ArgCode.size() == 50)
+ Os << " '" << ArgCode << "...'";
+ else
+ Os << " '" << ArgCode << "'";
+ }
+
+ enum class PrintDeclKind { Pointee, Pointer };
+ virtual PrintDeclKind printPointer(llvm::raw_svector_ostream &Os,
+ const Type *T) const {
+ T = T->getUnqualifiedDesugaredType();
+ bool IsPtr = isa<PointerType>(T) || isa<ObjCObjectPointerType>(T);
----------------
steakhal wrote:
```suggestion
bool IsPtr = isa<PointerType,ObjCObjectPointerType>(T);
```
https://github.com/llvm/llvm-project/pull/202724
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits