If I'm understanding you correctly, you're saying that clang implicitly marks the indirect NSError** parameter with __autoreleasing, so there's no bug here. Is that correct? If so, should Wblock-capture-autoreleasing just not fire on parameters that are already implicitly marked as __autoreleasing?
On Mon, Feb 13, 2017 at 1:54 AM, Akira Hatanaka <ahatan...@apple.com> wrote: > Hi Nico, > > The documentation might confuse people now that the warning is on by > default, but it’s correct as clang still qualifies indirect parameters with > __autoreleasing. We had to add this warning and turn it on by default > because a lot of people capture indirect parameters in their code not > realizing the object assigned might get released by an autorelease pool. > > Perhaps we can change the warning message or the documentation to make it > clear that the parameter has been implicitly marked __autoreleasing > regardless. > > On Feb 11, 2017, at 11:54 AM, Nico Weber <tha...@chromium.org> wrote: > > Hi Akira, > > this fires in internal chrome/ios code like so: > > somefile.m: error: block captures an autoreleasing out-parameter, which > may result in use-after-free bugs [-Werror,-Wblock-capture-autoreleasing] > if (error) { > ^ > somefile.m: note: declare the parameter __autoreleasing explicitly to > suppress this warning > - (NSDictionary *)fooWithError:(NSError **)error { > ^ > __autoreleasing > somefile.m: note: declare the parameter __strong or capture a __block > __strong variable to keep values alive across autorelease pools > > > A colleague points out that http://clang.llvm.org/docs/ > AutomaticReferenceCounting.html#indirect-parameters 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? > > Thanks, > Nico > > On Thu, Jan 26, 2017 at 1:51 PM, Akira Hatanaka via cfe-commits < > cfe-commits@lists.llvm.org> wrote: > >> Author: ahatanak >> Date: Thu Jan 26 12:51:10 2017 >> New Revision: 293199 >> >> URL: http://llvm.org/viewvc/llvm-project?rev=293199&view=rev >> Log: >> Turn on -Wblock-capture-autoreleasing by default. >> >> Turning on the warning by default helps the users as it's a common >> mistake to capture out-parameters in a block without ensuring the object >> assigned doesn't get released. >> >> rdar://problem/30200058 >> >> Modified: >> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> cfe/trunk/test/SemaObjC/arc.m >> >> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ >> Basic/DiagnosticSemaKinds.td?rev=293199&r1=293198&r2=293199&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) >> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Thu Jan 26 >> 12:51:10 2017 >> @@ -5185,7 +5185,7 @@ def err_arc_inconsistent_property_owners >> def warn_block_capture_autoreleasing : Warning< >> "block captures an autoreleasing out-parameter, which may result in " >> "use-after-free bugs">, >> - InGroup<BlockCaptureAutoReleasing>, DefaultIgnore; >> + InGroup<BlockCaptureAutoReleasing>; >> def note_declare_parameter_autoreleasing : Note< >> "declare the parameter __autoreleasing explicitly to suppress this >> warning">; >> def note_declare_parameter_strong : Note< >> >> Modified: cfe/trunk/test/SemaObjC/arc.m >> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/ >> arc.m?rev=293199&r1=293198&r2=293199&view=diff >> ============================================================ >> ================== >> --- cfe/trunk/test/SemaObjC/arc.m (original) >> +++ cfe/trunk/test/SemaObjC/arc.m Thu Jan 26 12:51:10 2017 >> @@ -1,4 +1,4 @@ >> -// 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 >> +// RUN: %clang_cc1 -triple x86_64-apple-darwin11 -fobjc-runtime-has-weak >> -fsyntax-only -fobjc-arc -fblocks -verify -Wno-objc-root-class %s >> >> typedef unsigned long NSUInteger; >> typedef const void * CFTypeRef; >> >> >> _______________________________________________ >> cfe-commits mailing list >> cfe-commits@lists.llvm.org >> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >> > > >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits