On Aug 14, 2012, at 11:40 PM, Anna Zaks <[email protected]> wrote:

> 
> On Aug 14, 2012, at 5:52 PM, Jordan Rose wrote:
> 
>> Author: jrose
>> Date: Tue Aug 14 19:52:00 2012
>> New Revision: 161916
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=161916&view=rev
>> Log:
>> [analyzer] Don't inline dynamic-dispatch methods unless 
>> -analyzer-ipa=dynamic.
>> 
>> Previously we were checking -analyzer-ipa=dynamic-bifurcate only, and
>> unconditionally inlining everything else that had an available definition,
>> even under -analyzer-ipa=inlining (but not under -analyzer-ipa=none).
>> 
> 
> We were not inlining ObjC unless dynamic dispatch or dynamic dispatch 
> bifurcate is turned on due to this check in ExprEngine::inlineCall. It's just 
> not wired for C++.
>  case CE_ObjCMessage:
>    if (!(getAnalysisManager().IPAMode == DynamicDispatch ||
>          getAnalysisManager().IPAMode == DynamicDispatchBifurcate))
>      return false;
> 
> That said, I think checking the flag earlier is better especially since we'll 
> be handing more languages now.

Oops, my fault for not searching for all uses of the flag. I guess there is the 
question of whether a message is always inlineable (i.e. under 
-analyzer-ipa=inlining) if we believe we know the exact class of the object 
(i.e. not a subclass). Right now it is for C++ and isn't for Objective-C. (Then 
again, right now we only make that assumption for C++ in the case where we are 
100% sure -- when the base region is a TypedValueRegion.)

Jordan
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to