<div dir="ltr">Dear all,<div><br></div><div>I am currently trying to suppress diagnostics emitted if the function under consideration has a certain annotate attribute ("check_attribute_annotate" in this case).</div><div><br></div><div>Hence, for that, I added the following piece of code to RetainCountChecker.cpp but it is resulting in some assertion failures while performing <font face="monospace, monospace">make -j4 check-clang-analysis</font>.</div><div><br></div><div><br></div><div><div><font face="monospace, monospace"></font></div><br><div><div class="hljs php" style="display:block;overflow-x:auto;padding:0.5em;color:rgb(51,51,51);background:rgb(248,248,248);font-family:monospace"><div><font face="monospace, monospace">diff --git a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp</font></div><div><font face="monospace, monospace">index <span class="hljs-number" style="color:rgb(136,0,0)">89</span>b1291.<span class="hljs-number" style="color:rgb(136,0,0)">.9</span>f367be <span class="hljs-number" style="color:rgb(136,0,0)">100644</span></font></div><div><font face="monospace, monospace">--- a/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp</font></div><div><font face="monospace, monospace">+++ b/lib/StaticAnalyzer/Checkers/RetainCountChecker.cpp</font></div><div><font face="monospace, monospace">@@ <span class="hljs-number" style="color:rgb(136,0,0)">-1894</span>,<span class="hljs-number" style="color:rgb(136,0,0)">6</span> +<span class="hljs-number" style="color:rgb(136,0,0)">1894</span>,<span class="hljs-number" style="color:rgb(136,0,0)">20</span> @@ <span class="hljs-keyword" style="font-weight:bold">static</span> bool isSynthesizedAccessor(<span class="hljs-keyword" style="font-weight:bold">const</span> StackFrameContext *SFC) {</font></div><div><font face="monospace, monospace">   <span class="hljs-keyword" style="font-weight:bold">return</span> SFC->getAnalysisDeclContext()->isBodyAutosynthesized();</font></div><div><font face="monospace, monospace"> }</font></div><div><font face="monospace, monospace"> </font></div><div><font face="monospace, monospace">+bool</font></div><div><font face="monospace, monospace">+isAnnotatedToSkipDiagnostics(<span class="hljs-keyword" style="font-weight:bold">const</span> ExplodedNode *EN) {</font></div><div><font face="monospace, monospace">+  <span class="hljs-keyword" style="font-weight:bold">const</span> FunctionDecl *FD = cast<FunctionDecl>(&EN->getCodeDecl());</font></div><div><font face="monospace, monospace">+  <span class="hljs-keyword" style="font-weight:bold">const</span> IdentifierInfo *II = FD->getIdentifier();</font></div><div><font face="monospace, monospace">+</font></div><div><font face="monospace, monospace">+  <span class="hljs-keyword" style="font-weight:bold">if</span> (II) {</font></div><div><font face="monospace, monospace">+    <span class="hljs-keyword" style="font-weight:bold">for</span> (<span class="hljs-keyword" style="font-weight:bold">const</span> auto *Ann : FD->specific_attrs<AnnotateAttr>()){</font></div><div><font face="monospace, monospace">+      <span class="hljs-keyword" style="font-weight:bold">if</span> (Ann->getAnnotation() == <span class="hljs-string" style="color:rgb(136,0,0)">"check_attribute_annotate"</span>)</font></div><div><font face="monospace, monospace">+        <span class="hljs-keyword" style="font-weight:bold">return</span> <span class="hljs-keyword" style="font-weight:bold">true</span>;</font></div><div><font face="monospace, monospace">+    }</font></div><div><font face="monospace, monospace">+  }</font></div><div><font face="monospace, monospace">+  <span class="hljs-keyword" style="font-weight:bold">return</span> <span class="hljs-keyword" style="font-weight:bold">false</span>;</font></div><div><font face="monospace, monospace">+}</font></div><div><font face="monospace, monospace">+</font></div><div><font face="monospace, monospace"> std::shared_ptr<PathDiagnosticPiece></font></div><div><font face="monospace, monospace"> CFRefReportVisitor::VisitNode(<span class="hljs-keyword" style="font-weight:bold">const</span> ExplodedNode *N, <span class="hljs-keyword" style="font-weight:bold">const</span> ExplodedNode *PrevN,</font></div><div><font face="monospace, monospace">                               BugReporterContext &BRC, BugReport &BR) {</font></div><div><font face="monospace, monospace">@@ <span class="hljs-number" style="color:rgb(136,0,0)">-3345</span>,<span class="hljs-number" style="color:rgb(136,0,0)">11</span> +<span class="hljs-number" style="color:rgb(136,0,0)">3359</span>,<span class="hljs-number" style="color:rgb(136,0,0)">13</span> @@ void RetainCountChecker::processNonLeakError(ProgramStateRef St,</font></div><div><font face="monospace, monospace">   }</font></div><div><font face="monospace, monospace"> </font></div><div><font face="monospace, monospace">   assert(BT);</font></div><div><font face="monospace, monospace">-  auto report = std::unique_ptr<BugReport>(</font></div><div><font face="monospace, monospace">-      <span class="hljs-keyword" style="font-weight:bold">new</span> CFRefReport(*BT, C.getASTContext().getLangOpts(), C.isObjCGCEnabled(),</font></div><div><font face="monospace, monospace">-                      SummaryLog, N, Sym));</font></div><div><font face="monospace, monospace">-  report->addRange(ErrorRange);</font></div><div><font face="monospace, monospace">-  C.emitReport(std::move(report));</font></div><div><font face="monospace, monospace" color="#ff0000">+  <span class="hljs-keyword" style="font-weight:bold">if</span> (!isAnnotatedToSkipDiagnostics(N)){</font></div><div><font face="monospace, monospace" color="#ff0000">+    auto report = std::unique_ptr<BugReport>(</font></div><div><font face="monospace, monospace" color="#ff0000">+        <span class="hljs-keyword" style="font-weight:bold">new</span> CFRefReport(*BT, C.getASTContext().getLangOpts(), C.isObjCGCEnabled(),</font></div><div><font face="monospace, monospace" color="#ff0000">+                        SummaryLog, N, Sym));</font></div><div><font face="monospace, monospace" color="#ff0000">+    report->addRange(ErrorRange);</font></div><div><font face="monospace, monospace" color="#ff0000">+    C.emitReport(std::move(report));</font></div><div><font face="monospace, monospace" color="#ff0000">+  }</font></div><div><font face="monospace, monospace"> }</font></div><div><font face="monospace, monospace"> </font></div><div><font face="monospace, monospace"> <span class="hljs-comment" style="color:rgb(136,136,136)">//===----------------------------------------------------------------------===//</span></font></div></div></div></div><div><br></div><div><font face="arial, helvetica, sans-serif">More specifically, the code highlighted in red above is causing the two assertion failures mentioned below.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">The following test-cases are the unexpected failures:</font></div><ul><li>Analysis/inlining/RetainCountExamples.m<br></li><li>Analysis/properties.m</li></ul><div><b>Note:</b> The above diff is a subset of the code that I have changed. I added the check <font face="monospace, monospace"><b>if (!isAnnotatedToSkipDiagnostics(N))</b> </font><font face="arial, helvetica, sans-serif">before every invocation to </font><font face="monospace, monospace"><b>emitReport</b> </font><font face="arial, helvetica, sans-serif">to suppress raising warnings for functions having the annotate attribute </font><font face="monospace, monospace"><b>check_attribute_annotate</b></font><font face="arial, helvetica, sans-serif">. It seemed to work for manually made test-cases but clearly there is something wrong with my methodology.</font></div><div><br></div><div><br></div><div><font face="arial, helvetica, sans-serif">Could anyone please tell me the reason behind these assertion failures?</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Thank you.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">Regards,</font></div><div><font face="arial, helvetica, sans-serif">Malhar Thakkar</font></div></div><div hspace="streak-pt-mark" style="max-height:1px"><img alt="" style="width:0px;max-height:0px;overflow:hidden" src="https://mailfoogae.appspot.com/t?sender=aY3MxM2IxMDMxQGlpdGguYWMuaW4%3D&type=zerocontent&guid=cef9d21e-6f49-401a-9c2b-4ad4b33fb5fd"><font color="#ffffff" size="1">ᐧ</font></div>