<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 20, 2017 at 9:30 PM, Artem Dergachev <span dir="ltr"><<a href="mailto:noqnoqneo@gmail.com" target="_blank">noqnoqneo@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">These warnings seem reasonable to me, because we can be certain that free() doesn't decrement reference counts - instead it frees the memory (release doesn't imply freeing the memory - something else may still retain). So `bmap' is freed but not released, therefore we have a warning from RetainCountChecker regarding a memory leak *and*, in case 2, a warning from MallocChecker regarding use-after-free.</blockquote><div><br></div><div>Oh, I see. Thank you so much. :) </div><div><br></div><div>Regards,</div><div>Malhar</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
<br>
On 6/20/17 6:55 AM, Malhar Thakkar via cfe-dev wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
Dear all,<br>
<br>
Consider the following hypothetical test cases (using the Integer Set Library objects and annotations) which is passed through the RetainCountChecker.<br>
<br>
<br></span>
*// Case 1*<br>
*#define __isl_give **__attribute__((cf_returns_re<wbr>tained))*<br>
*#define __isl_take __attribute__((cf_consumed))*<br>
*<br>
*<br>
*// Declaration of isl_basic_map_cow(). Definition is in another .c file and hence is not visible to the static analyzer.*<span class=""><br>
__isl_give isl_basic_map *isl_basic_map_cow(__isl_take isl_basic_map *bmap);<br>
<br>
<br></span>
__isl_give isl_basic_map **foo*(__isl_take isl_basic_map *bmap) {<span class=""><br>
isl_basic_map *temp = bmap;<br>
bmap = isl_basic_map_cow(bmap);<br>
free(bmap);<br></span>
return temp; *// Leak warning is raised for 'bmap' here.*<br>
}<br>
<br>
*// Case 2*<br>
*#define __isl_give **__attribute__((cf_returns_re<wbr>tained))*<br>
*#define __isl_take __attribute__((cf_consumed))*<br>
*<br>
*<br>
*// Declaration of isl_basic_map_cow(). **Definition is in another .c file and hence is not visible to the static analyzer.*<span class=""><br>
__isl_give isl_basic_map *isl_basic_map_cow(__isl_take isl_basic_map *bmap);<br>
<br>
<br></span>
__isl_give isl_basic_map **foo*(__isl_take isl_basic_map *bmap) {<span class=""><br>
isl_basic_map *temp = bmap;<br>
bmap = isl_basic_map_cow(bmap);<br>
free(bmap);<br></span>
return bmap; *// Use-after-free warning is raised for 'bmap' here.*<br>
}<br>
<br>
My question:<br>
<br>
  * Looking at the warnings raised in both the cases. could someone<span class=""><br>
    please explain me why is a leak warning being raised in Case 1?<br>
    isl_basic_map_cow() returns an object with a +1 retain count which<br>
    is then freed.<br>
<br>
<br>
Thank you.<br>
<br>
<br>
Regards,<br>
Malhar Thakkar<br>
<br></span>
ᐧ<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-dev</a><br>
</blockquote>
<br>
</blockquote></div><br></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=aaf5f701-8e28-4eb8-879a-b77c29b2fc46"><font color="#ffffff" size="1">ᐧ</font></div>