unique_ptrify PathDiagnostic::setEndOfPath's argument
Again, if shared ownership is the right model here (I assume it is, given graph algorithms & such) this could be tidied up (the 'release' call removed in favor of something safer) by having IntrunsiveRefCntPointer constructible from a unique_ptr. (& honestly I'd probably favor taking a page out of shared_ptr's book, allowing implicit construction from a unique_ptr rvalue, and only allow explicit from a raw pointer - currently IntrusiveRefCntPointer can implicitly own from a raw pointer, which seems unsafe) llvm-svn: 216752
This commit is contained in:
parent
d15481ccea
commit
8d05190e1d
|
@ -762,11 +762,11 @@ public:
|
|||
|
||||
bool isWithinCall() const { return !pathStack.empty(); }
|
||||
|
||||
void setEndOfPath(PathDiagnosticPiece *EndPiece) {
|
||||
void setEndOfPath(std::unique_ptr<PathDiagnosticPiece> EndPiece) {
|
||||
assert(!Loc.isValid() && "End location already set!");
|
||||
Loc = EndPiece->getLocation();
|
||||
assert(Loc.isValid() && "Invalid location for end-of-path piece");
|
||||
getActivePath().push_back(EndPiece);
|
||||
getActivePath().push_back(EndPiece.release());
|
||||
}
|
||||
|
||||
void appendToDesc(StringRef S) {
|
||||
|
|
|
@ -3165,7 +3165,7 @@ bool GRBugReporter::generatePathDiagnostic(PathDiagnostic& PD,
|
|||
if (!LastPiece)
|
||||
LastPiece = BugReporterVisitor::getDefaultEndPath(PDB, N, *R);
|
||||
assert(LastPiece);
|
||||
PD.setEndOfPath(LastPiece.release());
|
||||
PD.setEndOfPath(std::move(LastPiece));
|
||||
}
|
||||
|
||||
// Make sure we get a clean location context map so we don't
|
||||
|
@ -3450,13 +3450,13 @@ void BugReporter::FlushReport(BugReport *exampleReport,
|
|||
// of the issue.
|
||||
if (D->path.empty()) {
|
||||
PathDiagnosticLocation L = exampleReport->getLocation(getSourceManager());
|
||||
PathDiagnosticPiece *piece =
|
||||
new PathDiagnosticEventPiece(L, exampleReport->getDescription());
|
||||
auto piece = llvm::make_unique<PathDiagnosticEventPiece>(
|
||||
L, exampleReport->getDescription());
|
||||
BugReport::ranges_iterator Beg, End;
|
||||
std::tie(Beg, End) = exampleReport->getRanges();
|
||||
for ( ; Beg != End; ++Beg)
|
||||
piece->addRange(*Beg);
|
||||
D->setEndOfPath(piece);
|
||||
D->setEndOfPath(std::move(piece));
|
||||
}
|
||||
|
||||
// Get the meta data.
|
||||
|
|
Loading…
Reference in New Issue