[PATCH] [ObjC] New warning: circular containers

AlexDenisov 1101.debian at gmail.com
Wed Mar 4 06:50:06 PST 2015


> No. I meant add expected-note which will point to the declaration as part of the diagnostic.
Got it. New patch attached.

> You mean you cannot add it after checkRetainCycles(Result); as in:
I can, but then it would be skipped for non-arc code, which still has this problem (not retain cycle, but ‘corruption’ at runtime).
-- 
AlexDenisov
Software Engineer, http://alexdenisov.github.io

On 3 Mar 2015 at 22:27:09, jahanian (fjahanian at apple.com) wrote:


On Mar 3, 2015, at 12:33 PM, AlexDenisov <1101.debian at gmail.com> wrote:

> Provide a note where receiver/argument has been declared.
Do you mean ‘add comments’?

No. I meant add expected-note which will point to the declaration as part of the diagnostic.


> Place CheckObjCCircularContainer(Result) right after checkRetainCycles(Result).
It still causes weird behaviour even without ARC. Of course there is no retain cycle anymore, but app still hangs with recursion/crash.


You mean you cannot add it after checkRetainCycles(Result); 
as in:

checkRetainCycles(Result);
CheckObjCCircularContainer(Result) ;

if (!isImplicit && Method) {
      if (const ObjCPropertyDecl *Prop = Method->findPropertyDecl()) {
        bool IsWeak =
          Prop->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_weak;
        if (!IsWeak && Sel.isUnarySelector())
          IsWeak = ReturnType.getObjCLifetime() & Qualifiers::OCL_Weak;
        if (IsWeak &&
            !Diags.isIgnored(diag::warn_arc_repeated_use_of_weak, LBracLoc))
          getCurFunction()->recordUseOfWeak(Result, Prop);
      }
    }
  }

 return MaybeBindToTemporary(Result);
}
 


> This patch does not address the general case of same expression used as receiver and addObject argument.
> Is this something that you care enough to address?
Do you mean something like ’[self.array addObject:self.array]’?
If so, then it doesn’t really makes sense, because we can’t ensure that returned objects are the same, there’ll be false positives.

Ok,
- Fariborz

-- 
AlexDenisov
Software Engineer, http://alexdenisov.github.io

On 3 Mar 2015 at 20:46:15, jahanian (fjahanian at apple.com) wrote:


On Mar 3, 2015, at 11:02 AM, jahanian <fjahanian at apple.com> wrote:

Patch looks good with couple of minors.
Provide a note where receiver/argument has been declared.
Place CheckObjCCircularContainer(Result) right after checkRetainCycles(Result).

This patch does not address the general case of same expression used as receiver and addObject argument.
Is this something that you care enough to address? Need not be in this patch though.


- Fariborz



_______________________________________________ 
cfe-commits mailing list 
cfe-commits at cs.uiuc.edu 
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150304/c7be2c1d/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: objc_circular_container.patch
Type: application/octet-stream
Size: 25738 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150304/c7be2c1d/attachment.obj>


More information about the cfe-commits mailing list