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
