dcoughlin added inline comments.

================
Comment at: lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp:94
+  else if (isa<UnknownSpaceRegion>(RS)) {
+    // FIXME: Presence of an IVar region has priority over this branch, because
+    // ObjC objects are on the heap even if the core doesn't realize this.
----------------
NoQ wrote:
> dcoughlin wrote:
> > It is not clear to me that this FIXME is a good idea. I would remove it so 
> > someone doesn't spend a lot of time trying to address it.
> > 
> > Objective-C objects don't have the strong dis-aliasing guarantee that the 
> > analyzer assumes for heap base regions. In other words, two calls to [[Foo 
> > alloc] init] may yield exactly the same instance.  This is because, unlike 
> > malloc() and C++ global new, ObjC initializers can (and frequently do) 
> > return instances other than the passed-in, freshly-allocated self.
> Hmm, that seems to be exactly the thing i'm looking for: heap-based regions 
> that may alias.
> 
> The property of a region's staying on the heap has little to do with the 
> property of being able to alias.
> 
> I've a feeling that we should have avoided using C++ inheritance in the 
> memregion hierarchy, and instead went for a bunch of constraints. Eg., memory 
> space is essentially a constraint (it may be unknown or get known later 
> through exploring aliasing), region's value type is essentially a constraint 
> (as seen during dynamic type propagation, it may be unknown, it may be 
> partially known, we may get to know it better during the analysis by 
> observing successful dynamic casts), extent is essentially a constraint (that 
> we currently impose on SymbolExtent), offset of a symbolic region inside its 
> true parent region is a constraint, and so on.
> 
> But that's too vague. I've no well-defined idea how to make this better at 
> the moment.
If you feel strongly about this, I would suggest putting the FIXME in the core, 
perhaps in SimpleSValBuilder where the dis-aliasing assumption is introduced or 
perhaps in the declaration of HeapSpaceRegion. This will make it clear to 
future maintainers that it is not a defect in the checker.


================
Comment at: lib/StaticAnalyzer/Checkers/MacOSXAPIChecker.cpp:70
 
   // Check if the first argument is stack allocated.  If so, issue a warning
   // because that's likely to be bad news.
----------------
I guess this comment needs to be updated.


================
Comment at: test/Analysis/dispatch-once.m:26
+  // Use regexps to check that we're NOT suggesting to make this static.
+  dispatch_once(once, ^{}); // expected-warning-re{{{{^Call to 'dispatch_once' 
uses heap-allocated memory for the predicate value.  Using such transient 
memory for the predicate is potentially dangerous$}}}}
+}
----------------
Clever.


================
Comment at: test/Analysis/dispatch-once.m:62
+- (void)test_ivar_struct_from_inside {
+  dispatch_once(&s.once, ^{}); // expected-warning{{Call to 'dispatch_once' 
uses the instance variable 's' for the predicate value.}}
+}
----------------
Interesting. Have you seen this pattern in the wild?

I think this diagnostic is a little bit confusing since the ivar itself isn't 
being used for the predicate value.

Maybe "... uses a subfield of the instance variable 's' for the predicate 
value"? 






https://reviews.llvm.org/D25909



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to