class NoteTag : public ProgramPointTag {
public:
using Callback =
- std::function<std::string(BugReporterContext &, BugReport &)>;
+ std::function<std::string(BugReporterContext &,
+ PathSensitiveBugReport &)>;
private:
static int Kind;
}
Optional<std::string> generateMessage(BugReporterContext &BRC,
- BugReport &R) const {
+ PathSensitiveBugReport &R) const {
std::string Msg = Cb(BRC, R);
if (Msg.empty())
return None;
/// @param IsPrunable Whether the note is prunable. It allows BugReporter
/// to omit the note from the report if it would make the displayed
/// bug path significantly shorter.
- const NoteTag *getNoteTag(std::function<std::string(BugReport &)> &&Cb,
- bool IsPrunable = false) {
+ const NoteTag
+ *getNoteTag(std::function<std::string(PathSensitiveBugReport &)> &&Cb,
+ bool IsPrunable = false) {
return getNoteTag(
- [Cb](BugReporterContext &, BugReport &BR) { return Cb(BR); },
+ [Cb](BugReporterContext &,
+ PathSensitiveBugReport &BR) { return Cb(BR); },
IsPrunable);
}
/// bug path significantly shorter.
const NoteTag *getNoteTag(std::function<std::string()> &&Cb,
bool IsPrunable = false) {
- return getNoteTag([Cb](BugReporterContext &, BugReport &) { return Cb(); },
+ return getNoteTag([Cb](BugReporterContext &,
+ PathSensitiveBugReport &) { return Cb(); },
IsPrunable);
}
/// bug path significantly shorter.
const NoteTag *getNoteTag(StringRef Note, bool IsPrunable = false) {
return getNoteTag(
- [Note](BugReporterContext &, BugReport &) { return std::string(Note); },
+ [Note](BugReporterContext &,
+ PathSensitiveBugReport &) { return std::string(Note); },
IsPrunable);
}
ProgramStateRef SelfAssignState = State->bindLoc(Param, ThisVal, LCtx);
const NoteTag *SelfAssignTag =
- C.getNoteTag([MD](BugReport &BR) -> std::string {
+ C.getNoteTag([MD](PathSensitiveBugReport &BR) -> std::string {
SmallString<256> Msg;
llvm::raw_svector_ostream Out(Msg);
Out << "Assuming " << MD->getParamDecl(0)->getName() << " == *this";
ProgramStateRef NonSelfAssignState = State->bindLoc(Param, ParamVal, LCtx);
const NoteTag *NonSelfAssignTag =
- C.getNoteTag([MD](BugReport &BR) -> std::string {
+ C.getNoteTag([MD](PathSensitiveBugReport &BR) -> std::string {
SmallString<256> Msg;
llvm::raw_svector_ostream Out(Msg);
Out << "Assuming " << MD->getParamDecl(0)->getName() << " != *this";
}
const NoteTag *T = nullptr;
if (!Notes.empty()) {
- T = C.getNoteTag(
- [this, Notes{std::move(Notes)}](BugReport &BR) -> std::string {
+ T = C.getNoteTag([this, Notes{std::move(Notes)}](
+ PathSensitiveBugReport &BR) -> std::string {
if (&BR.getBugType() != &UseAfterReleaseBugType &&
&BR.getBugType() != &LeakBugType &&
&BR.getBugType() != &DoubleReleaseBugType)
if (!PVD || State->contains<RefCountedParameters>(PVD))
return;
- const NoteTag *T = C.getNoteTag([this, PVD](BugReport &BR) -> std::string {
- if (&BR.getBugType() != &BT)
- return "";
- SmallString<64> Str;
- llvm::raw_svector_ostream OS(Str);
- OS << "Value passed through parameter '" << PVD->getName()
- << "\' is deallocated";
- return std::string(OS.str());
- });
+ const NoteTag *T =
+ C.getNoteTag([this, PVD](PathSensitiveBugReport &BR) -> std::string {
+ if (&BR.getBugType() != &BT)
+ return "";
+ SmallString<64> Str;
+ llvm::raw_svector_ostream OS(Str);
+ OS << "Value passed through parameter '" << PVD->getName()
+ << "\' is deallocated";
+ return std::string(OS.str());
+ });
C.addTransition(State->set<ReleasedParameter>(true), T);
}
std::string Name = getName(Call);
const NoteTag *CallTag = C.getNoteTag(
- [Name, ExpectedValue](BugReport &) -> std::string {
+ [Name, ExpectedValue](PathSensitiveBugReport &) -> std::string {
SmallString<128> Msg;
llvm::raw_svector_ostream Out(Msg);
if (L.getSrc()->getTerminator().isVirtualBaseBranch() &&
L.getDst() == *L.getSrc()->succ_begin()) {
ProgramPoint P = L.withTag(getNoteTags().makeNoteTag(
- [](BugReporterContext &, BugReport &) -> std::string {
+ [](BugReporterContext &, PathSensitiveBugReport &) -> std::string {
// TODO: Just call out the name of the most derived class
// when we know it.
return "Virtual base initialization skipped because "