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:
David Blaikie 2014-08-29 18:18:47 +00:00
parent d15481ccea
commit 8d05190e1d
2 changed files with 6 additions and 6 deletions

View File

@ -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) {

View File

@ -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.