<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<p>Oh well, will make a few more blind guesses then, with a closer
look at this bot this time. Thanks for helping/reverting!<br>
</p>
<br>
<div class="moz-cite-prefix">04/10/2016 01:12, Vitaly Buka пишет:<br>
</div>
<blockquote
cite="mid:CAPjTjwvAKVOGT50k6FRWEzbUJKjv7T36JKbevarb4eWviLO0xQ@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>Can't reproduce on my Windows.</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Mon, Oct 3, 2016 at 1:31 PM Artem Dergachev
<<a moz-do-not-send="true"
href="mailto:noqnoqneo@gmail.com">noqnoqneo@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
<p class="gmail_msg">I also made a quick blind guess at
r283141
(<a moz-do-not-send="true"
class="m_-2630513323378653476moz-txt-link-freetext
gmail_msg"
href="http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20161003/172390.html"
target="_blank">http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20161003/172390.html</a>)</p>
<p class="gmail_msg">Thanks a lot for trying to help, sorry
for causing problems.<br class="gmail_msg">
</p>
<br class="gmail_msg">
<div class="m_-2630513323378653476moz-cite-prefix gmail_msg">03/10/2016
23:26, Vitaly Buka пишет:<br class="gmail_msg">
</div>
</div>
<div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div dir="ltr" class="gmail_msg">I will look into this and
get back to you. </div>
<br class="gmail_msg">
<div class="gmail_quote gmail_msg">
<div dir="ltr" class="gmail_msg">On Mon, Oct 3, 2016 at
12:12 PM Artem Dergachev <<a moz-do-not-send="true"
href="mailto:noqnoqneo@gmail.com" class="gmail_msg"
target="_blank">noqnoqneo@gmail.com</a>> wrote:<br
class="gmail_msg">
</div>
<blockquote class="gmail_quote gmail_msg"
style="margin:0 0 0 .8ex;border-left:1px #ccc
solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"
class="gmail_msg"> > fatal error C1001: An
internal error has occurred in the compiler.<br
class="gmail_msg">
<br class="gmail_msg">
Ouch. So i managed to *crash* the microsoft compiler
with my code?<br class="gmail_msg">
<br class="gmail_msg">
Could you please somehow have a look if this is
reproducible? If it's reproducible or
hard-to-check-if-reproducible then i'd revert.<br
class="gmail_msg">
<br class="gmail_msg">
I don't think i can debug this, as i don't have
windows, and i have no guesses from looking at the
code.<br class="gmail_msg">
<br class="gmail_msg">
Also, should i have received an email for this
failure? Cause i haven't received an email for this
failure. Hope there aren't more failures.<br
class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
<div
class="m_-2630513323378653476m_-1065106170221421501moz-cite-prefix
gmail_msg">03/10/2016 21:46, Vitaly Buka via
cfe-commits пишет:<br class="gmail_msg">
</div>
</div>
<div bgcolor="#FFFFFF" text="#000000"
class="gmail_msg">
<blockquote type="cite" class="gmail_msg">
<div dir="ltr" class="gmail_msg">This patch breaks
Windows: <a moz-do-not-send="true"
href="http://lab.llvm.org:8011/builders/sanitizer-windows/builds/29769/"
class="gmail_msg" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-windows/builds/29769/</a></div>
<br class="gmail_msg">
<div class="gmail_quote gmail_msg">
<div dir="ltr" class="gmail_msg">On Mon, Oct 3,
2016 at 1:07 AM Artem Dergachev via
cfe-commits <<a moz-do-not-send="true"
href="mailto:cfe-commits@lists.llvm.org"
class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a>>
wrote:<br class="gmail_msg">
</div>
<blockquote class="gmail_quote gmail_msg"
style="margin:0 0 0 .8ex;border-left:1px #ccc
solid;padding-left:1ex">Author: dergachev<br
class="gmail_msg">
Date: Mon Oct 3 02:58:26 2016<br
class="gmail_msg">
New Revision: 283092<br class="gmail_msg">
<br class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project?rev=283092&view=rev"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project?rev=283092&view=rev</a><br
class="gmail_msg">
Log:<br class="gmail_msg">
[analyzer] Extend bug reports with extra notes<br
class="gmail_msg">
<br class="gmail_msg">
These diagnostics are separate from the
path-sensitive engine's path notes,<br
class="gmail_msg">
and can be added manually on top of
path-sensitive or path-insensitive reports.<br
class="gmail_msg">
<br class="gmail_msg">
The new note diagnostics would appear as
note:-diagnostic on console and<br
class="gmail_msg">
as blue bubbles in scan-build. In plist files
they currently do not appear,<br
class="gmail_msg">
because format needs to be discussed with
plist file users.<br class="gmail_msg">
<br class="gmail_msg">
The analyzer option "-analyzer-config
notes-as-events=true" would convert<br
class="gmail_msg">
notes to normal path notes, and put them at
the beginning of the path.<br
class="gmail_msg">
This is a temporary hack to show the new notes
in plist files.<br class="gmail_msg">
<br class="gmail_msg">
A few checkers would be updated in subsequent
commits,<br class="gmail_msg">
including tests for this new feature.<br
class="gmail_msg">
<br class="gmail_msg">
Differential Revision: <a
moz-do-not-send="true"
href="https://reviews.llvm.org/D24278"
rel="noreferrer" class="gmail_msg"
target="_blank">https://reviews.llvm.org/D24278</a><br
class="gmail_msg">
<br class="gmail_msg">
Modified:<br class="gmail_msg">
cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h<br
class="gmail_msg">
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h<br
class="gmail_msg">
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h<br
class="gmail_msg">
cfe/trunk/lib/Rewrite/HTMLRewrite.cpp<br
class="gmail_msg">
cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp<br
class="gmail_msg">
cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp<br
class="gmail_msg">
cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp<br
class="gmail_msg">
cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp<br
class="gmail_msg">
cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp<br
class="gmail_msg">
cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp<br
class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
(original)<br class="gmail_msg">
+++
cfe/trunk/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -266,6 +266,9 @@ private:<br
class="gmail_msg">
/// \sa shouldWidenLoops<br
class="gmail_msg">
Optional<bool> WidenLoops;<br
class="gmail_msg">
<br class="gmail_msg">
+ /// \sa shouldDisplayNotesAsEvents<br
class="gmail_msg">
+ Optional<bool> DisplayNotesAsEvents;<br
class="gmail_msg">
+<br class="gmail_msg">
/// A helper function that retrieves option
for a given full-qualified<br
class="gmail_msg">
/// checker name.<br class="gmail_msg">
/// Options for checkers can be specified
via 'analyzer-config' command-line<br
class="gmail_msg">
@@ -534,6 +537,14 @@ public:<br
class="gmail_msg">
/// This is controlled by the 'widen-loops'
config option.<br class="gmail_msg">
bool shouldWidenLoops();<br
class="gmail_msg">
<br class="gmail_msg">
+ /// Returns true if the bug reporter should
transparently treat extra note<br
class="gmail_msg">
+ /// diagnostic pieces as event diagnostic
pieces. Useful when the diagnostic<br
class="gmail_msg">
+ /// consumer doesn't support the extra note
pieces.<br class="gmail_msg">
+ ///<br class="gmail_msg">
+ /// This is controlled by the
'notes-as-events' option, which defaults<br
class="gmail_msg">
+ /// to false when unset.<br
class="gmail_msg">
+ bool shouldDisplayNotesAsEvents();<br
class="gmail_msg">
+<br class="gmail_msg">
public:<br class="gmail_msg">
AnalyzerOptions() :<br class="gmail_msg">
AnalysisStoreOpt(RegionStoreModel),<br
class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
(original)<br class="gmail_msg">
+++
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -66,6 +66,8 @@ public:<br class="gmail_msg">
typedef
SmallVector<std::unique_ptr<BugReporterVisitor>,
8> VisitorList;<br class="gmail_msg">
typedef VisitorList::iterator
visitor_iterator;<br class="gmail_msg">
typedef SmallVector<StringRef, 2>
ExtraTextList;<br class="gmail_msg">
+ typedef
SmallVector<llvm::IntrusiveRefCntPtr<PathDiagnosticNotePiece>,
4><br class="gmail_msg">
+ NoteList;<br class="gmail_msg">
<br class="gmail_msg">
protected:<br class="gmail_msg">
friend class BugReporter;<br
class="gmail_msg">
@@ -82,7 +84,8 @@ protected:<br
class="gmail_msg">
const ExplodedNode *ErrorNode;<br
class="gmail_msg">
SmallVector<SourceRange, 4> Ranges;<br
class="gmail_msg">
ExtraTextList ExtraText;<br
class="gmail_msg">
-<br class="gmail_msg">
+ NoteList Notes;<br class="gmail_msg">
+<br class="gmail_msg">
typedef llvm::DenseSet<SymbolRef>
Symbols;<br class="gmail_msg">
typedef llvm::DenseSet<const MemRegion
*> Regions;<br class="gmail_msg">
<br class="gmail_msg">
@@ -177,6 +180,18 @@ public:<br
class="gmail_msg">
const BugType& getBugType() const {
return BT; }<br class="gmail_msg">
BugType& getBugType() { return BT; }<br
class="gmail_msg">
<br class="gmail_msg">
+ /// \brief True when the report has an
execution path associated with it.<br
class="gmail_msg">
+ ///<br class="gmail_msg">
+ /// A report is said to be path-sensitive
if it was thrown against a<br
class="gmail_msg">
+ /// particular exploded node in the
path-sensitive analysis graph.<br
class="gmail_msg">
+ /// Path-sensitive reports have their
intermediate path diagnostics<br
class="gmail_msg">
+ /// auto-generated, perhaps with the help
of checker-defined visitors,<br
class="gmail_msg">
+ /// and may contain extra notes.<br
class="gmail_msg">
+ /// Path-insensitive reports consist only
of a single warning message<br
class="gmail_msg">
+ /// in a specific location, and perhaps
extra notes.<br class="gmail_msg">
+ /// Path-sensitive checkers are allowed to
throw path-insensitive reports.<br
class="gmail_msg">
+ bool isPathSensitive() const { return
ErrorNode != nullptr; }<br class="gmail_msg">
+<br class="gmail_msg">
const ExplodedNode *getErrorNode() const {
return ErrorNode; }<br class="gmail_msg">
<br class="gmail_msg">
StringRef getDescription() const { return
Description; }<br class="gmail_msg">
@@ -245,7 +260,27 @@ public:<br
class="gmail_msg">
void setDeclWithIssue(const Decl
*declWithIssue) {<br class="gmail_msg">
DeclWithIssue = declWithIssue;<br
class="gmail_msg">
}<br class="gmail_msg">
-<br class="gmail_msg">
+<br class="gmail_msg">
+ /// Add new item to the list of additional
notes that need to be attached to<br
class="gmail_msg">
+ /// this path-insensitive report. If you
want to add extra notes to a<br
class="gmail_msg">
+ /// path-sensitive report, you need to use
a BugReporterVisitor because it<br
class="gmail_msg">
+ /// allows you to specify where exactly in
the auto-generated path diagnostic<br
class="gmail_msg">
+ /// the extra note should appear.<br
class="gmail_msg">
+ void addNote(StringRef Msg, const
PathDiagnosticLocation &Pos,<br
class="gmail_msg">
+
ArrayRef<SourceRange> Ranges = {}) {<br
class="gmail_msg">
+ PathDiagnosticNotePiece *P =<br
class="gmail_msg">
+ new PathDiagnosticNotePiece(Pos,
Msg);<br class="gmail_msg">
+<br class="gmail_msg">
+ for (const auto &R : Ranges)<br
class="gmail_msg">
+ P->addRange(R);<br class="gmail_msg">
+<br class="gmail_msg">
+ Notes.push_back(P);<br class="gmail_msg">
+ }<br class="gmail_msg">
+<br class="gmail_msg">
+ virtual const NoteList &getNotes() {<br
class="gmail_msg">
+ return Notes;<br class="gmail_msg">
+ }<br class="gmail_msg">
+<br class="gmail_msg">
/// \brief This allows for addition of meta
data to the diagnostic.<br class="gmail_msg">
///<br class="gmail_msg">
/// Currently, only the
HTMLDiagnosticClient knows how to display it.<br
class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
(original)<br class="gmail_msg">
+++
cfe/trunk/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -336,7 +336,7 @@ public:<br
class="gmail_msg">
<br class="gmail_msg">
class PathDiagnosticPiece : public
RefCountedBaseVPTR {<br class="gmail_msg">
public:<br class="gmail_msg">
- enum Kind { ControlFlow, Event, Macro, Call
};<br class="gmail_msg">
+ enum Kind { ControlFlow, Event, Macro,
Call, Note };<br class="gmail_msg">
enum DisplayHint { Above, Below };<br
class="gmail_msg">
<br class="gmail_msg">
private:<br class="gmail_msg">
@@ -452,7 +452,8 @@ public:<br
class="gmail_msg">
void Profile(llvm::FoldingSetNodeID
&ID) const override;<br class="gmail_msg">
<br class="gmail_msg">
static bool classof(const
PathDiagnosticPiece *P) {<br class="gmail_msg">
- return P->getKind() == Event ||
P->getKind() == Macro;<br class="gmail_msg">
+ return P->getKind() == Event ||
P->getKind() == Macro ||<br
class="gmail_msg">
+ P->getKind() == Note;<br
class="gmail_msg">
}<br class="gmail_msg">
};<br class="gmail_msg">
<br class="gmail_msg">
@@ -706,6 +707,23 @@ public:<br
class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
void dump() const override;<br
class="gmail_msg">
+<br class="gmail_msg">
+ void Profile(llvm::FoldingSetNodeID
&ID) const override;<br class="gmail_msg">
+};<br class="gmail_msg">
+<br class="gmail_msg">
+class PathDiagnosticNotePiece: public
PathDiagnosticSpotPiece {<br class="gmail_msg">
+public:<br class="gmail_msg">
+ PathDiagnosticNotePiece(const
PathDiagnosticLocation &Pos, StringRef S,<br
class="gmail_msg">
+ bool
AddPosRange = true)<br class="gmail_msg">
+ : PathDiagnosticSpotPiece(Pos, S, Note,
AddPosRange) {}<br class="gmail_msg">
+<br class="gmail_msg">
+ ~PathDiagnosticNotePiece() override;<br
class="gmail_msg">
+<br class="gmail_msg">
+ static inline bool classof(const
PathDiagnosticPiece *P) {<br class="gmail_msg">
+ return P->getKind() == Note;<br
class="gmail_msg">
+ }<br class="gmail_msg">
+<br class="gmail_msg">
+ void dump() const override;<br
class="gmail_msg">
<br class="gmail_msg">
void Profile(llvm::FoldingSetNodeID
&ID) const override;<br class="gmail_msg">
};<br class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/lib/Rewrite/HTMLRewrite.cpp<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Rewrite/HTMLRewrite.cpp?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Rewrite/HTMLRewrite.cpp?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
--- cfe/trunk/lib/Rewrite/HTMLRewrite.cpp
(original)<br class="gmail_msg">
+++ cfe/trunk/lib/Rewrite/HTMLRewrite.cpp Mon
Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -324,6 +324,7 @@ void
html::AddHeaderFooterInternalBuilti<br
class="gmail_msg">
" .msgT { padding:0x; spacing:0x }\n"<br
class="gmail_msg">
" .msgEvent { background-color:#fff8b4;
color:#000000 }\n"<br class="gmail_msg">
" .msgControl {
background-color:#bbbbbb; color:#000000 }\n"<br
class="gmail_msg">
+ " .msgNote { background-color:#ddeeff;
color:#000000 }\n"<br class="gmail_msg">
" .mrange { background-color:#dfddf3
}\n"<br class="gmail_msg">
" .mrange { border-bottom:1px solid
#6F9DBE }\n"<br class="gmail_msg">
" .PathIndex { font-weight: bold;
padding:0px 5px; "<br class="gmail_msg">
@@ -343,8 +344,12 @@ void
html::AddHeaderFooterInternalBuilti<br
class="gmail_msg">
" border-collapse: collapse;
border-spacing: 0px;\n"<br class="gmail_msg">
" }\n"<br class="gmail_msg">
" td.rowname {\n"<br class="gmail_msg">
- " text-align:right; font-weight:bold;
color:#444444;\n"<br class="gmail_msg">
- " padding-right:2ex; }\n"<br
class="gmail_msg">
+ " text-align: right;\n"<br
class="gmail_msg">
+ " vertical-align: top;\n"<br
class="gmail_msg">
+ " font-weight: bold;\n"<br
class="gmail_msg">
+ " color:#444444;\n"<br
class="gmail_msg">
+ " padding-right:2ex;\n"<br
class="gmail_msg">
+ " }\n"<br class="gmail_msg">
"</style>\n</head>\n<body>";<br
class="gmail_msg">
<br class="gmail_msg">
// Generate header<br class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp
(original)<br class="gmail_msg">
+++
cfe/trunk/lib/StaticAnalyzer/Core/AnalyzerOptions.cpp
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -344,3 +344,10 @@ bool
AnalyzerOptions::shouldWidenLoops()<br
class="gmail_msg">
WidenLoops =
getBooleanOption("widen-loops",
/*Default=*/false);<br class="gmail_msg">
return WidenLoops.getValue();<br
class="gmail_msg">
}<br class="gmail_msg">
+<br class="gmail_msg">
+bool
AnalyzerOptions::shouldDisplayNotesAsEvents()
{<br class="gmail_msg">
+ if (!DisplayNotesAsEvents.hasValue())<br
class="gmail_msg">
+ DisplayNotesAsEvents =<br
class="gmail_msg">
+ getBooleanOption("notes-as-events",
/*Default=*/false);<br class="gmail_msg">
+ return DisplayNotesAsEvents.getValue();<br
class="gmail_msg">
+}<br class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
(original)<br class="gmail_msg">
+++
cfe/trunk/lib/StaticAnalyzer/Core/BugReporter.cpp
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -112,15 +112,15 @@ static void
removeRedundantMsgs(PathPiec<br
class="gmail_msg">
path.pop_front();<br class="gmail_msg">
<br class="gmail_msg">
switch (piece->getKind()) {<br
class="gmail_msg">
- case
clang::ento::PathDiagnosticPiece::Call:<br
class="gmail_msg">
+ case PathDiagnosticPiece::Call:<br
class="gmail_msg">
removeRedundantMsgs(cast<PathDiagnosticCallPiece>(piece)->path);<br
class="gmail_msg">
break;<br class="gmail_msg">
- case
clang::ento::PathDiagnosticPiece::Macro:<br
class="gmail_msg">
+ case PathDiagnosticPiece::Macro:<br
class="gmail_msg">
removeRedundantMsgs(cast<PathDiagnosticMacroPiece>(piece)->subPieces);<br
class="gmail_msg">
break;<br class="gmail_msg">
- case
clang::ento::PathDiagnosticPiece::ControlFlow:<br
class="gmail_msg">
+ case PathDiagnosticPiece::ControlFlow:<br
class="gmail_msg">
break;<br class="gmail_msg">
- case
clang::ento::PathDiagnosticPiece::Event: {<br
class="gmail_msg">
+ case PathDiagnosticPiece::Event: {<br
class="gmail_msg">
if (i == N-1)<br class="gmail_msg">
break;<br class="gmail_msg">
<br class="gmail_msg">
@@ -140,6 +140,8 @@ static void
removeRedundantMsgs(PathPiec<br
class="gmail_msg">
}<br class="gmail_msg">
break;<br class="gmail_msg">
}<br class="gmail_msg">
+ case PathDiagnosticPiece::Note:<br
class="gmail_msg">
+ break;<br class="gmail_msg">
}<br class="gmail_msg">
path.push_back(piece);<br
class="gmail_msg">
}<br class="gmail_msg">
@@ -197,6 +199,9 @@ static bool
removeUnneededCalls(PathPiec<br
class="gmail_msg">
}<br class="gmail_msg">
case PathDiagnosticPiece::ControlFlow:<br
class="gmail_msg">
break;<br class="gmail_msg">
+<br class="gmail_msg">
+ case PathDiagnosticPiece::Note:<br
class="gmail_msg">
+ break;<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
pieces.push_back(piece);<br
class="gmail_msg">
@@ -3403,25 +3408,28 @@ void
BugReporter::FlushReport(BugReport<br
class="gmail_msg">
exampleReport->getUniqueingLocation(),<br
class="gmail_msg">
exampleReport->getUniqueingDecl()));<br
class="gmail_msg">
<br class="gmail_msg">
- MaxBugClassSize =
std::max(bugReports.size(),<br
class="gmail_msg">
-
static_cast<size_t>(MaxBugClassSize));<br
class="gmail_msg">
+ if (exampleReport->isPathSensitive()) {<br
class="gmail_msg">
+ // Generate the full path diagnostic,
using the generation scheme<br
class="gmail_msg">
+ // specified by the
PathDiagnosticConsumer. Note that we have to
generate<br class="gmail_msg">
+ // path diagnostics even for consumers
which do not support paths, because<br
class="gmail_msg">
+ // the BugReporterVisitors may mark this
bug as a false positive.<br class="gmail_msg">
+ assert(!bugReports.empty());<br
class="gmail_msg">
+<br class="gmail_msg">
+ MaxBugClassSize =<br class="gmail_msg">
+ std::max(bugReports.size(),
static_cast<size_t>(MaxBugClassSize));<br
class="gmail_msg">
<br class="gmail_msg">
- // Generate the full path diagnostic, using
the generation scheme<br class="gmail_msg">
- // specified by the PathDiagnosticConsumer.
Note that we have to generate<br
class="gmail_msg">
- // path diagnostics even for consumers
which do not support paths, because<br
class="gmail_msg">
- // the BugReporterVisitors may mark this
bug as a false positive.<br class="gmail_msg">
- if (!bugReports.empty())<br
class="gmail_msg">
if (!generatePathDiagnostic(*D.get(), PD,
bugReports))<br class="gmail_msg">
return;<br class="gmail_msg">
<br class="gmail_msg">
- MaxValidBugClassSize =
std::max(bugReports.size(),<br
class="gmail_msg">
-
static_cast<size_t>(MaxValidBugClassSize));<br
class="gmail_msg">
+ MaxValidBugClassSize =<br
class="gmail_msg">
+ std::max(bugReports.size(),
static_cast<size_t>(MaxValidBugClassSize));<br
class="gmail_msg">
<br class="gmail_msg">
- // Examine the report and see if the last
piece is in a header. Reset the<br
class="gmail_msg">
- // report location to the last piece in the
main source file.<br class="gmail_msg">
- AnalyzerOptions& Opts =
getAnalyzerOptions();<br class="gmail_msg">
- if
(Opts.shouldReportIssuesInMainSourceFile()
&& !Opts.AnalyzeAll)<br
class="gmail_msg">
-
D->resetDiagnosticLocationToMainFile();<br
class="gmail_msg">
+ // Examine the report and see if the last
piece is in a header. Reset the<br
class="gmail_msg">
+ // report location to the last piece in
the main source file.<br class="gmail_msg">
+ AnalyzerOptions &Opts =
getAnalyzerOptions();<br class="gmail_msg">
+ if
(Opts.shouldReportIssuesInMainSourceFile()
&& !Opts.AnalyzeAll)<br
class="gmail_msg">
+
D->resetDiagnosticLocationToMainFile();<br
class="gmail_msg">
+ }<br class="gmail_msg">
<br class="gmail_msg">
// If the path is empty, generate a single
step path with the location<br
class="gmail_msg">
// of the issue.<br class="gmail_msg">
@@ -3434,6 +3442,27 @@ void
BugReporter::FlushReport(BugReport<br
class="gmail_msg">
D->setEndOfPath(std::move(piece));<br
class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
+ PathPieces &Pieces =
D->getMutablePieces();<br class="gmail_msg">
+ if
(getAnalyzerOptions().shouldDisplayNotesAsEvents())
{<br class="gmail_msg">
+ // For path diagnostic consumers that
don't support extra notes,<br
class="gmail_msg">
+ // we may optionally convert those to
path notes.<br class="gmail_msg">
+ for (auto I =
exampleReport->getNotes().rbegin(),<br
class="gmail_msg">
+ E =
exampleReport->getNotes().rend(); I != E;
++I) {<br class="gmail_msg">
+ PathDiagnosticNotePiece *Piece =
I->get();<br class="gmail_msg">
+ PathDiagnosticEventPiece
*ConvertedPiece =<br class="gmail_msg">
+ new
PathDiagnosticEventPiece(Piece->getLocation(),<br
class="gmail_msg">
+
Piece->getString());<br class="gmail_msg">
+ for (const auto &R:
Piece->getRanges())<br class="gmail_msg">
+ ConvertedPiece->addRange(R);<br
class="gmail_msg">
+<br class="gmail_msg">
+ Pieces.push_front(ConvertedPiece);<br
class="gmail_msg">
+ }<br class="gmail_msg">
+ } else {<br class="gmail_msg">
+ for (auto I =
exampleReport->getNotes().rbegin(),<br
class="gmail_msg">
+ E =
exampleReport->getNotes().rend(); I != E;
++I)<br class="gmail_msg">
+ Pieces.push_front(*I);<br
class="gmail_msg">
+ }<br class="gmail_msg">
+<br class="gmail_msg">
// Get the meta data.<br class="gmail_msg">
const BugReport::ExtraTextList &Meta =
exampleReport->getExtraText();<br
class="gmail_msg">
for
(BugReport::ExtraTextList::const_iterator i =
Meta.begin(),<br class="gmail_msg">
@@ -3518,6 +3547,13 @@ LLVM_DUMP_METHOD void
PathDiagnosticMacr<br class="gmail_msg">
// FIXME: Print which macro is being
invoked.<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
+LLVM_DUMP_METHOD void
PathDiagnosticNotePiece::dump() const {<br
class="gmail_msg">
+ llvm::errs() <<
"NOTE\n--------------\n";<br class="gmail_msg">
+ llvm::errs() << getString() <<
"\n";<br class="gmail_msg">
+ llvm::errs() << " ---- at ----\n";<br
class="gmail_msg">
+ getLocation().dump();<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
LLVM_DUMP_METHOD void
PathDiagnosticLocation::dump() const {<br
class="gmail_msg">
if (!isValid()) {<br class="gmail_msg">
llvm::errs() <<
"<INVALID>\n";<br class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
(original)<br class="gmail_msg">
+++
cfe/trunk/lib/StaticAnalyzer/Core/HTMLDiagnostics.cpp
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -152,13 +152,30 @@ void
HTMLDiagnostics::ReportDiag(const P<br
class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
// Process the path.<br class="gmail_msg">
- unsigned n = path.size();<br
class="gmail_msg">
- unsigned max = n;<br class="gmail_msg">
-<br class="gmail_msg">
- for (PathPieces::const_reverse_iterator I =
path.rbegin(),<br class="gmail_msg">
- E = path.rend();<br class="gmail_msg">
- I != E; ++I, --n)<br
class="gmail_msg">
- HandlePiece(R, FID, **I, n, max);<br
class="gmail_msg">
+ // Maintain the counts of extra note pieces
separately.<br class="gmail_msg">
+ unsigned TotalPieces = path.size();<br
class="gmail_msg">
+ unsigned TotalNotePieces =<br
class="gmail_msg">
+ std::count_if(path.begin(), path.end(),<br
class="gmail_msg">
+ [](const
IntrusiveRefCntPtr<PathDiagnosticPiece>
&p) {<br class="gmail_msg">
+ return
isa<PathDiagnosticNotePiece>(p.get());<br
class="gmail_msg">
+ });<br class="gmail_msg">
+<br class="gmail_msg">
+ unsigned TotalRegularPieces = TotalPieces -
TotalNotePieces;<br class="gmail_msg">
+ unsigned NumRegularPieces =
TotalRegularPieces;<br class="gmail_msg">
+ unsigned NumNotePieces = TotalNotePieces;<br
class="gmail_msg">
+<br class="gmail_msg">
+ for (auto I = path.rbegin(), E =
path.rend(); I != E; ++I) {<br
class="gmail_msg">
+ if
(isa<PathDiagnosticNotePiece>(I->get()))
{<br class="gmail_msg">
+ // This adds diagnostic bubbles, but
not navigation.<br class="gmail_msg">
+ // Navigation through note pieces would
be added later,<br class="gmail_msg">
+ // as a separate pass through the piece
list.<br class="gmail_msg">
+ HandlePiece(R, FID, **I, NumNotePieces,
TotalNotePieces);<br class="gmail_msg">
+ --NumNotePieces;<br class="gmail_msg">
+ } else {<br class="gmail_msg">
+ HandlePiece(R, FID, **I,
NumRegularPieces, TotalRegularPieces);<br
class="gmail_msg">
+ --NumRegularPieces;<br
class="gmail_msg">
+ }<br class="gmail_msg">
+ }<br class="gmail_msg">
<br class="gmail_msg">
// Add line numbers, header, footer, etc.<br
class="gmail_msg">
<br class="gmail_msg">
@@ -192,24 +209,38 @@ void
HTMLDiagnostics::ReportDiag(const P<br
class="gmail_msg">
int ColumnNumber =
path.back()->getLocation().asLocation().getExpansionColumnNumber();<br
class="gmail_msg">
<br class="gmail_msg">
// Add the name of the file as an
<h1> tag.<br class="gmail_msg">
-<br class="gmail_msg">
{<br class="gmail_msg">
std::string s;<br class="gmail_msg">
llvm::raw_string_ostream os(s);<br
class="gmail_msg">
<br class="gmail_msg">
os << "<!-- REPORTHEADER
-->\n"<br class="gmail_msg">
- << "<h3>Bug
Summary</h3>\n<table
class=\"simpletable\">\n"<br
class="gmail_msg">
+ << "<h3>Bug
Summary</h3>\n<table
class=\"simpletable\">\n"<br
class="gmail_msg">
"<tr><td
class=\"rowname\">File:</td><td>"<br
class="gmail_msg">
- << html::EscapeText(DirName)<br
class="gmail_msg">
- <<
html::EscapeText(Entry->getName())<br
class="gmail_msg">
- <<
"</td></tr>\n<tr><td
class=\"rowname\">Location:</td><td>"<br
class="gmail_msg">
- "<a href=\"#EndPath\">line "<br
class="gmail_msg">
- << LineNumber<br
class="gmail_msg">
- << ", column "<br
class="gmail_msg">
- << ColumnNumber<br
class="gmail_msg">
- <<
"</a></td></tr>\n"<br
class="gmail_msg">
- "<tr><td
class=\"rowname\">Description:</td><td>"<br
class="gmail_msg">
- << D.getVerboseDescription()
<< "</td></tr>\n";<br
class="gmail_msg">
+ << html::EscapeText(DirName)<br
class="gmail_msg">
+ <<
html::EscapeText(Entry->getName())<br
class="gmail_msg">
+ <<
"</td></tr>\n<tr><td
class=\"rowname\">Warning:</td><td>"<br
class="gmail_msg">
+ "<a href=\"#EndPath\">line "<br
class="gmail_msg">
+ << LineNumber<br
class="gmail_msg">
+ << ", column "<br
class="gmail_msg">
+ << ColumnNumber<br
class="gmail_msg">
+ << "</a><br />"<br
class="gmail_msg">
+ << D.getVerboseDescription()
<< "</td></tr>\n";<br
class="gmail_msg">
+<br class="gmail_msg">
+ // The navigation across the extra notes
pieces.<br class="gmail_msg">
+ unsigned NumExtraPieces = 0;<br
class="gmail_msg">
+ for (const auto &Piece : path) {<br
class="gmail_msg">
+ if (const auto *P =
dyn_cast<PathDiagnosticNotePiece>(Piece.get()))
{<br class="gmail_msg">
+ int LineNumber =<br class="gmail_msg">
+
P->getLocation().asLocation().getExpansionLineNumber();<br
class="gmail_msg">
+ int ColumnNumber =<br
class="gmail_msg">
+
P->getLocation().asLocation().getExpansionColumnNumber();<br
class="gmail_msg">
+ os << "<tr><td
class=\"rowname\">Note:</td><td>"<br
class="gmail_msg">
+ << "<a href=\"#Note"
<< NumExtraPieces << "\">line "<br
class="gmail_msg">
+ << LineNumber << ",
column " << ColumnNumber <<
"</a><br />"<br class="gmail_msg">
+ << P->getString()
<< "</td></tr>";<br
class="gmail_msg">
+ ++NumExtraPieces;<br
class="gmail_msg">
+ }<br class="gmail_msg">
+ }<br class="gmail_msg">
<br class="gmail_msg">
// Output any other meta data.<br
class="gmail_msg">
<br class="gmail_msg">
@@ -385,13 +416,20 @@ void
HTMLDiagnostics::HandlePiece(Rewrit<br
class="gmail_msg">
// Create the html for the message.<br
class="gmail_msg">
<br class="gmail_msg">
const char *Kind = nullptr;<br
class="gmail_msg">
+ bool IsNote = false;<br class="gmail_msg">
+ bool SuppressIndex = (max == 1);<br
class="gmail_msg">
switch (P.getKind()) {<br class="gmail_msg">
case PathDiagnosticPiece::Call:<br
class="gmail_msg">
- llvm_unreachable("Calls should already
be handled");<br class="gmail_msg">
+ llvm_unreachable("Calls and extra notes
should already be handled");<br
class="gmail_msg">
case PathDiagnosticPiece::Event: Kind =
"Event"; break;<br class="gmail_msg">
case PathDiagnosticPiece::ControlFlow: Kind
= "Control"; break;<br class="gmail_msg">
// Setting Kind to "Control" is
intentional.<br class="gmail_msg">
case PathDiagnosticPiece::Macro: Kind =
"Control"; break;<br class="gmail_msg">
+ case PathDiagnosticPiece::Note:<br
class="gmail_msg">
+ Kind = "Note";<br class="gmail_msg">
+ IsNote = true;<br class="gmail_msg">
+ SuppressIndex = true;<br
class="gmail_msg">
+ break;<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
std::string sbuf;<br class="gmail_msg">
@@ -399,7 +437,9 @@ void
HTMLDiagnostics::HandlePiece(Rewrit<br
class="gmail_msg">
<br class="gmail_msg">
os << "\n<tr><td
class=\"num\"></td><td
class=\"line\"><div id=\"";<br
class="gmail_msg">
<br class="gmail_msg">
- if (num == max)<br class="gmail_msg">
+ if (IsNote)<br class="gmail_msg">
+ os << "Note" << num;<br
class="gmail_msg">
+ else if (num == max)<br class="gmail_msg">
os << "EndPath";<br
class="gmail_msg">
else<br class="gmail_msg">
os << "Path" << num;<br
class="gmail_msg">
@@ -461,7 +501,7 @@ void
HTMLDiagnostics::HandlePiece(Rewrit<br
class="gmail_msg">
<br class="gmail_msg">
os << "\">";<br class="gmail_msg">
<br class="gmail_msg">
- if (max > 1) {<br class="gmail_msg">
+ if (!SuppressIndex) {<br class="gmail_msg">
os << "<table
class=\"msgT\"><tr><td
valign=\"top\">";<br class="gmail_msg">
os << "<div class=\"PathIndex";<br
class="gmail_msg">
if (Kind) os << " PathIndex"
<< Kind;<br class="gmail_msg">
@@ -501,7 +541,7 @@ void
HTMLDiagnostics::HandlePiece(Rewrit<br
class="gmail_msg">
<br class="gmail_msg">
os << "':\n";<br class="gmail_msg">
<br class="gmail_msg">
- if (max > 1) {<br class="gmail_msg">
+ if (!SuppressIndex) {<br
class="gmail_msg">
os << "</td>";<br
class="gmail_msg">
if (num < max) {<br
class="gmail_msg">
os << "<td><div
class=\"PathNav\"><a href=\"#";<br
class="gmail_msg">
@@ -523,7 +563,7 @@ void
HTMLDiagnostics::HandlePiece(Rewrit<br
class="gmail_msg">
else {<br class="gmail_msg">
os <<
html::EscapeText(P.getString());<br
class="gmail_msg">
<br class="gmail_msg">
- if (max > 1) {<br class="gmail_msg">
+ if (!SuppressIndex) {<br
class="gmail_msg">
os << "</td>";<br
class="gmail_msg">
if (num < max) {<br
class="gmail_msg">
os << "<td><div
class=\"PathNav\"><a href=\"#";<br
class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
(original)<br class="gmail_msg">
+++
cfe/trunk/lib/StaticAnalyzer/Core/PathDiagnostic.cpp
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -60,6 +60,7 @@
PathDiagnosticEventPiece::~PathDiagnosti<br
class="gmail_msg">
PathDiagnosticCallPiece::~PathDiagnosticCallPiece() {}<br
class="gmail_msg">
PathDiagnosticControlFlowPiece::~PathDiagnosticControlFlowPiece() {}<br
class="gmail_msg">
PathDiagnosticMacroPiece::~PathDiagnosticMacroPiece() {}<br
class="gmail_msg">
+PathDiagnosticNotePiece::~PathDiagnosticNotePiece() {}<br
class="gmail_msg">
<br class="gmail_msg">
void PathPieces::flattenTo(PathPieces
&Primary, PathPieces &Current,<br
class="gmail_msg">
bool
ShouldFlattenMacros) const {<br
class="gmail_msg">
@@ -95,6 +96,7 @@ void
PathPieces::flattenTo(PathPieces &P<br
class="gmail_msg">
}<br class="gmail_msg">
case PathDiagnosticPiece::Event:<br
class="gmail_msg">
case PathDiagnosticPiece::ControlFlow:<br
class="gmail_msg">
+ case PathDiagnosticPiece::Note:<br
class="gmail_msg">
Current.push_back(Piece);<br
class="gmail_msg">
break;<br class="gmail_msg">
}<br class="gmail_msg">
@@ -342,15 +344,16 @@ static
Optional<bool> comparePiece(const<br
class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
switch (X.getKind()) {<br class="gmail_msg">
- case
clang::ento::PathDiagnosticPiece::ControlFlow:<br
class="gmail_msg">
+ case PathDiagnosticPiece::ControlFlow:<br
class="gmail_msg">
return
compareControlFlow(cast<PathDiagnosticControlFlowPiece>(X),<br
class="gmail_msg">
cast<PathDiagnosticControlFlowPiece>(Y));<br
class="gmail_msg">
- case
clang::ento::PathDiagnosticPiece::Event:<br
class="gmail_msg">
+ case PathDiagnosticPiece::Event:<br
class="gmail_msg">
+ case PathDiagnosticPiece::Note:<br
class="gmail_msg">
return None;<br class="gmail_msg">
- case
clang::ento::PathDiagnosticPiece::Macro:<br
class="gmail_msg">
+ case PathDiagnosticPiece::Macro:<br
class="gmail_msg">
return
compareMacro(cast<PathDiagnosticMacroPiece>(X),<br
class="gmail_msg">
cast<PathDiagnosticMacroPiece>(Y));<br
class="gmail_msg">
- case
clang::ento::PathDiagnosticPiece::Call:<br
class="gmail_msg">
+ case PathDiagnosticPiece::Call:<br
class="gmail_msg">
return
compareCall(cast<PathDiagnosticCallPiece>(X),<br
class="gmail_msg">
cast<PathDiagnosticCallPiece>(Y));<br
class="gmail_msg">
}<br class="gmail_msg">
@@ -1098,6 +1101,10 @@ void
PathDiagnosticMacroPiece::Profile(l<br
class="gmail_msg">
ID.Add(**I);<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
+void
PathDiagnosticNotePiece::Profile(llvm::FoldingSetNodeID
&ID) const {<br class="gmail_msg">
+ PathDiagnosticSpotPiece::Profile(ID);<br
class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
void
PathDiagnostic::Profile(llvm::FoldingSetNodeID
&ID) const {<br class="gmail_msg">
ID.Add(getLocation());<br class="gmail_msg">
ID.AddString(BugType);<br class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
(original)<br class="gmail_msg">
+++
cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -281,6 +281,9 @@ static void
ReportPiece(raw_ostream &o,<br
class="gmail_msg">
ReportMacro(o,
cast<PathDiagnosticMacroPiece>(P), FM,
SM, LangOpts,<br class="gmail_msg">
indent, depth);<br
class="gmail_msg">
break;<br class="gmail_msg">
+ case PathDiagnosticPiece::Note:<br
class="gmail_msg">
+ // FIXME: Extend the plist format to
support those.<br class="gmail_msg">
+ break;<br class="gmail_msg">
}<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
Modified:
cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp<br
class="gmail_msg">
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp?rev=283092&r1=283091&r2=283092&view=diff"
rel="noreferrer" class="gmail_msg"
target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp?rev=283092&r1=283091&r2=283092&view=diff</a><br
class="gmail_msg">
==============================================================================<br
class="gmail_msg">
---
cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
(original)<br class="gmail_msg">
+++
cfe/trunk/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
Mon Oct 3 02:58:26 2016<br class="gmail_msg">
@@ -113,16 +113,28 @@ public:<br
class="gmail_msg">
Diag.Report(WarnLoc, WarnID) <<
PD->getShortDescription()<br
class="gmail_msg">
<<
PD->path.back()->getRanges();<br
class="gmail_msg">
<br class="gmail_msg">
+ // First, add extra notes, even if
paths should not be included.<br
class="gmail_msg">
+ for (const auto &Piece :
PD->path) {<br class="gmail_msg">
+ if
(!isa<PathDiagnosticNotePiece>(Piece.get()))<br
class="gmail_msg">
+ continue;<br class="gmail_msg">
+<br class="gmail_msg">
+ SourceLocation NoteLoc =
Piece->getLocation().asLocation();<br
class="gmail_msg">
+ Diag.Report(NoteLoc, NoteID) <<
Piece->getString()<br class="gmail_msg">
+ <<
Piece->getRanges();<br class="gmail_msg">
+ }<br class="gmail_msg">
+<br class="gmail_msg">
if (!IncludePath)<br class="gmail_msg">
continue;<br class="gmail_msg">
<br class="gmail_msg">
+ // Then, add the path notes if
necessary.<br class="gmail_msg">
PathPieces FlatPath =
PD->path.flatten(/*ShouldFlattenMacros=*/true);<br
class="gmail_msg">
- for (PathPieces::const_iterator PI =
FlatPath.begin(),<br class="gmail_msg">
- PE =
FlatPath.end();<br class="gmail_msg">
- PI != PE; ++PI) {<br
class="gmail_msg">
- SourceLocation NoteLoc =
(*PI)->getLocation().asLocation();<br
class="gmail_msg">
- Diag.Report(NoteLoc, NoteID) <<
(*PI)->getString()<br class="gmail_msg">
- <<
(*PI)->getRanges();<br class="gmail_msg">
+ for (const auto &Piece : FlatPath)
{<br class="gmail_msg">
+ if
(isa<PathDiagnosticNotePiece>(Piece.get()))<br
class="gmail_msg">
+ continue;<br class="gmail_msg">
+<br class="gmail_msg">
+ SourceLocation NoteLoc =
Piece->getLocation().asLocation();<br
class="gmail_msg">
+ Diag.Report(NoteLoc, NoteID) <<
Piece->getString()<br class="gmail_msg">
+ <<
Piece->getRanges();<br class="gmail_msg">
}<br class="gmail_msg">
}<br class="gmail_msg">
}<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
cfe-commits mailing list<br class="gmail_msg">
<a moz-do-not-send="true"
href="mailto:cfe-commits@lists.llvm.org"
class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a><br
class="gmail_msg">
<a moz-do-not-send="true"
href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits"
rel="noreferrer" class="gmail_msg"
target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br
class="gmail_msg">
</blockquote>
</div>
<br class="gmail_msg">
<fieldset
class="m_-2630513323378653476m_-1065106170221421501mimeAttachmentHeader
gmail_msg"></fieldset>
<br class="gmail_msg">
<pre class="gmail_msg">_______________________________________________
cfe-commits mailing list
<a moz-do-not-send="true" class="m_-2630513323378653476m_-1065106170221421501moz-txt-link-abbreviated gmail_msg" href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>
<a moz-do-not-send="true" class="m_-2630513323378653476m_-1065106170221421501moz-txt-link-freetext gmail_msg" href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a>
</pre>
</blockquote>
<br class="gmail_msg">
</div>
</blockquote>
</div>
</blockquote>
<br class="gmail_msg">
</div>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>