From: Ted Kremenek Date: Sat, 8 Sep 2012 01:24:53 +0000 (+0000) Subject: Revert "Further tweaks to hopefully make the PathDiagnostic emission more deterministic." X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=62a456312ad633169528d5fc85063704dc8f5d0f;p=clang Revert "Further tweaks to hopefully make the PathDiagnostic emission more deterministic." git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@163445 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Core/PathDiagnostic.cpp b/lib/StaticAnalyzer/Core/PathDiagnostic.cpp index 8b0fc8eda7..15a6635062 100644 --- a/lib/StaticAnalyzer/Core/PathDiagnostic.cpp +++ b/lib/StaticAnalyzer/Core/PathDiagnostic.cpp @@ -217,8 +217,10 @@ static llvm::Optional comparePiece(PathDiagnosticPiece &X, } FullSourceLoc XL = X.getLocation().asLocation(); FullSourceLoc YL = Y.getLocation().asLocation(); - if (XL != YL) - return XL < YL; + if (XL < YL) + return true; + if (YL < XL) + return false; const std::string &XS = X.getString(); const std::string &YS = Y.getString(); if (XS != YS) @@ -227,8 +229,10 @@ static llvm::Optional comparePiece(PathDiagnosticPiece &X, } static bool comparePathPieces(const PathPieces &X, const PathPieces &Y) { - if (X.size() != Y.size()) - return X.size() < Y.size(); + if (X.size() < Y.size()) + return true; + if (X.size() > Y.size()) + return false; // Compare individual parts of the path. assert(X.size() == Y.size()); for (unsigned i = 0, n = X.size(); i < n; ++i) { @@ -245,20 +249,26 @@ struct CompareDiagnostics { // First compare by location const FullSourceLoc &XLoc = X->getLocation().asLocation(); const FullSourceLoc &YLoc = Y->getLocation().asLocation(); - if (XLoc != YLoc) - return XLoc < YLoc; + if (XLoc < YLoc) + return true; + if (YLoc < XLoc) + return false; // Next, compare by bug type. StringRef XBugType = X->getBugType(); StringRef YBugType = Y->getBugType(); + if (XBugType < YBugType) + return true; if (XBugType != YBugType) - return XBugType < YBugType; + return false; // Next, compare by bug description. StringRef XDesc = X->getVerboseDescription(); StringRef YDesc = Y->getVerboseDescription(); + if (XDesc < YDesc) + return true; if (XDesc != YDesc) - return XDesc < YDesc; + return false; // Fall back to comparing path pieces. return comparePathPieces(X->path, Y->path);