<div dir="ltr">Hi Akira,<div><br></div><div>this fires in internal chrome/ios code like so:</div><div><br></div><div><div>somefile.m: error: block captures an autoreleasing out-parameter, which may result in use-after-free bugs [-Werror,-Wblock-capture-autoreleasing]</div><div>          if (error) {</div><div>              ^</div><div>somefile.m: note: declare the parameter __autoreleasing explicitly to suppress this warning</div><div>- (NSDictionary *)fooWithError:(NSError **)error {</div><div>                                                  ^</div><div>                                                  __autoreleasing</div><div>somefile.m: note: declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools</div></div><div><br></div><div><br></div><div>A colleague points out that <a href="http://clang.llvm.org/docs/AutomaticReferenceCounting.html#indirect-parameters">http://clang.llvm.org/docs/AutomaticReferenceCounting.html#indirect-parameters</a> suggests NSError ** should "be implicitly qualified with __autoreleasing." Is that a bug in the implementation of the warning, is AutomaticReferenceCounting.html incorrect, or are we just misunderstanding that document?</div><div><br>Thanks,</div><div>Nico</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jan 26, 2017 at 1:51 PM, Akira Hatanaka via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ahatanak<br>
Date: Thu Jan 26 12:51:10 2017<br>
New Revision: 293199<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=293199&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=293199&view=rev</a><br>
Log:<br>
Turn on -Wblock-capture-autoreleasing by default.<br>
<br>
Turning on the warning by default helps the users as it's a common<br>
mistake to capture out-parameters in a block without ensuring the object<br>
assigned doesn't get released.<br>
<br>
rdar://problem/30200058<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/Basic/<wbr>DiagnosticSemaKinds.td<br>
    cfe/trunk/test/SemaObjC/arc.m<br>
<br>
Modified: cfe/trunk/include/clang/Basic/<wbr>DiagnosticSemaKinds.td<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=293199&r1=293198&r2=293199&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/include/<wbr>clang/Basic/<wbr>DiagnosticSemaKinds.td?rev=<wbr>293199&r1=293198&r2=293199&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/include/clang/Basic/<wbr>DiagnosticSemaKinds.td (original)<br>
+++ cfe/trunk/include/clang/Basic/<wbr>DiagnosticSemaKinds.td Thu Jan 26 12:51:10 2017<br>
@@ -5185,7 +5185,7 @@ def err_arc_inconsistent_property_<wbr>owners<br>
 def warn_block_capture_<wbr>autoreleasing : Warning<<br>
   "block captures an autoreleasing out-parameter, which may result in "<br>
   "use-after-free bugs">,<br>
-  InGroup<<wbr>BlockCaptureAutoReleasing>, DefaultIgnore;<br>
+  InGroup<<wbr>BlockCaptureAutoReleasing>;<br>
 def note_declare_parameter_<wbr>autoreleasing : Note<<br>
   "declare the parameter __autoreleasing explicitly to suppress this warning">;<br>
 def note_declare_parameter_strong : Note<<br>
<br>
Modified: cfe/trunk/test/SemaObjC/arc.m<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc.m?rev=293199&r1=293198&r2=293199&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/cfe/trunk/test/<wbr>SemaObjC/arc.m?rev=293199&r1=<wbr>293198&r2=293199&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/test/SemaObjC/arc.m (original)<br>
+++ cfe/trunk/test/SemaObjC/arc.m Thu Jan 26 12:51:10 2017<br>
@@ -1,4 +1,4 @@<br>
-// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fsyntax-only -fobjc-arc -fblocks -verify -Wno-objc-root-class -Wblock-capture-autoreleasing %s<br>
+// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak -fsyntax-only -fobjc-arc -fblocks -verify -Wno-objc-root-class %s<br>
<br>
 typedef unsigned long NSUInteger;<br>
 typedef const void * CFTypeRef;<br>
<br>
<br>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>