summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2012-09-07 23:13:11 +0000
committerTed Kremenek <kremenek@apple.com>2012-09-07 23:13:11 +0000
commita11a741e2f89b2f81eb090297388bdec590253f4 (patch)
tree15aa9d86390ddfd6e87ecf614783b611ef66d2b1 /clang
parent767cd03bbe02574cb3a83e208e669d2887ec6fbc (diff)
downloadbcm5719-llvm-a11a741e2f89b2f81eb090297388bdec590253f4.tar.gz
bcm5719-llvm-a11a741e2f89b2f81eb090297388bdec590253f4.zip
Further tweaks to hopefully make the PathDiagnostic emission more deterministic.
llvm-svn: 163430
Diffstat (limited to 'clang')
-rw-r--r--clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp26
1 files changed, 8 insertions, 18 deletions
diff --git a/clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp b/clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
index 15a6635062a..8b0fc8eda7e 100644
--- a/clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
+++ b/clang/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
@@ -217,10 +217,8 @@ static llvm::Optional<bool> comparePiece(PathDiagnosticPiece &X,
}
FullSourceLoc XL = X.getLocation().asLocation();
FullSourceLoc YL = Y.getLocation().asLocation();
- if (XL < YL)
- return true;
- if (YL < XL)
- return false;
+ if (XL != YL)
+ return XL < YL;
const std::string &XS = X.getString();
const std::string &YS = Y.getString();
if (XS != YS)
@@ -229,10 +227,8 @@ static llvm::Optional<bool> comparePiece(PathDiagnosticPiece &X,
}
static bool comparePathPieces(const PathPieces &X, const PathPieces &Y) {
- if (X.size() < Y.size())
- return true;
- if (X.size() > Y.size())
- return false;
+ if (X.size() != Y.size())
+ return X.size() < Y.size();
// Compare individual parts of the path.
assert(X.size() == Y.size());
for (unsigned i = 0, n = X.size(); i < n; ++i) {
@@ -249,26 +245,20 @@ struct CompareDiagnostics {
// First compare by location
const FullSourceLoc &XLoc = X->getLocation().asLocation();
const FullSourceLoc &YLoc = Y->getLocation().asLocation();
- if (XLoc < YLoc)
- return true;
- if (YLoc < XLoc)
- return false;
+ if (XLoc != YLoc)
+ return XLoc < YLoc;
// Next, compare by bug type.
StringRef XBugType = X->getBugType();
StringRef YBugType = Y->getBugType();
- if (XBugType < YBugType)
- return true;
if (XBugType != YBugType)
- return false;
+ return XBugType < YBugType;
// Next, compare by bug description.
StringRef XDesc = X->getVerboseDescription();
StringRef YDesc = Y->getVerboseDescription();
- if (XDesc < YDesc)
- return true;
if (XDesc != YDesc)
- return false;
+ return XDesc < YDesc;
// Fall back to comparing path pieces.
return comparePathPieces(X->path, Y->path);
OpenPOWER on IntegriCloud