diff options
-rw-r--r-- | clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h | 6 | ||||
-rw-r--r-- | clang/lib/StaticAnalyzer/Core/BugReporter.cpp | 4 |
2 files changed, 9 insertions, 1 deletions
diff --git a/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h b/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h index 95b27e7861c..1c1b985c8f0 100644 --- a/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h +++ b/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h @@ -138,8 +138,12 @@ public: /// /// Ranges are used to highlight regions of interest in the source code. /// They should be at the same source code line as the BugReport location. + /// By default, the source range of the statement corresponding to the error + /// node will be used; add a single invalid range to specify absence of + /// ranges. void addRange(SourceRange R) { - assert(R.isValid()); + assert((R.isValid() || Ranges.empty()) && "Invalid range can only be used " + "to specify that the report does not have a range."); Ranges.push_back(R); } diff --git a/clang/lib/StaticAnalyzer/Core/BugReporter.cpp b/clang/lib/StaticAnalyzer/Core/BugReporter.cpp index fc28c587d21..70efacbd34f 100644 --- a/clang/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/clang/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -1273,6 +1273,10 @@ BugReport::getRanges() { return std::make_pair(ranges_iterator(), ranges_iterator()); } + // User-specified absence of range info. + if (Ranges.size() == 1 && !Ranges.begin()->isValid()) + return std::make_pair(ranges_iterator(), ranges_iterator()); + return std::make_pair(Ranges.begin(), Ranges.end()); } |