aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/clang/Analysis/PathDiagnostic.h2
-rw-r--r--lib/Analysis/PathDiagnostic.cpp15
2 files changed, 16 insertions, 1 deletions
diff --git a/include/clang/Analysis/PathDiagnostic.h b/include/clang/Analysis/PathDiagnostic.h
index f647be9d6d..1481e25bbd 100644
--- a/include/clang/Analysis/PathDiagnostic.h
+++ b/include/clang/Analysis/PathDiagnostic.h
@@ -67,7 +67,7 @@ public:
FullSourceLoc asLocation() const;
SourceRange asRange() const;
- const Stmt *asStmt() const;
+ const Stmt *asStmt() const { return S ? S : 0; }
};
class PathDiagnostic {
diff --git a/lib/Analysis/PathDiagnostic.cpp b/lib/Analysis/PathDiagnostic.cpp
index 1441088e54..dd9a0a8f46 100644
--- a/lib/Analysis/PathDiagnostic.cpp
+++ b/lib/Analysis/PathDiagnostic.cpp
@@ -152,3 +152,18 @@ FullSourceLoc PathDiagnosticLocation::asLocation() const {
return FullSourceLoc(R.getBegin(), const_cast<SourceManager&>(SM));
}
+
+SourceRange PathDiagnosticLocation::asRange() const {
+ // Note that we want a 'switch' here so that the compiler can warn us in
+ // case we add more cases.
+ switch (K) {
+ case SingleLoc:
+ case Range:
+ break;
+ case Statement:
+ return S->getSourceRange();
+ }
+
+ return R;
+}
+