[cfe-commits] r74525 - in /cfe/trunk/lib/Analysis: Environment.cpp LiveVariables.cpp
Zhongxing Xu
xuzhongxing at gmail.com
Tue Jun 30 19:10:59 PDT 2009
On Wed, Jul 1, 2009 at 3:31 AM, Ted Kremenek<kremenek at apple.com> wrote:
> This looks good to me. One comment inline.
>
> On Jun 30, 2009, at 6:01 AM, Zhongxing Xu wrote:
>
>> Author: zhongxingxu
>> Date: Tue Jun 30 08:00:53 2009
>> New Revision: 74525
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=74525&view=rev
>> Log:
>> Instead of r74522, use another approach to fix
>> xfail_regionstore_wine_crash.c.
>> Mark the super region of the binding of block level expr in the
>> Environment
>> as live.
>>
>> Modified:
>> cfe/trunk/lib/Analysis/Environment.cpp
>> cfe/trunk/lib/Analysis/LiveVariables.cpp
>>
>> Modified: cfe/trunk/lib/Analysis/Environment.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/Environment.cpp?rev=74525&r1=74524&r2=74525&view=diff
>>
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Analysis/Environment.cpp (original)
>> +++ cfe/trunk/lib/Analysis/Environment.cpp Tue Jun 30 08:00:53 2009
>> @@ -143,8 +143,17 @@
>> SVal X = I.getData();
>>
>> // If the block expr's value is a memory region, then mark that
>> region.
>> - if (isa<loc::MemRegionVal>(X))
>> - DRoots.push_back(cast<loc::MemRegionVal>(X).getRegion());
>> + if (isa<loc::MemRegionVal>(X)) {
>> + const MemRegion* R = cast<loc::MemRegionVal>(X).getRegion();
>> + DRoots.push_back(R);
>> + // Mark the super region of the RX as live.
>> + // e.g.: int x; char *y = (char*) &x; if (*y) ...
>> + // 'y' => element region. 'x' is its super region.
>> + // We only add one level super region for now.
>
> Is there a reason we only add one level of super region? If we need to add
> the entire region hierarchy, I'd rather do it now before we forget about it.
> A recursive function should do the trick. At the very least there should
> be a FIXME comment if this is something that needs to be fixed.
I guess one level of super region is sufficient for most cases. I'll
add a fixme here.
>
>> + if (const SubRegion *SR = dyn_cast<SubRegion>(R)) {
>> + DRoots.push_back(SR->getSuperRegion());
>> + }
>> + }
>>
>> // Mark all symbols in the block expr's value live.
>> MarkLiveCallback cb(SymReaper);
>>
>> Modified: cfe/trunk/lib/Analysis/LiveVariables.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/LiveVariables.cpp?rev=74525&r1=74524&r2=74525&view=diff
>>
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Analysis/LiveVariables.cpp (original)
>> +++ cfe/trunk/lib/Analysis/LiveVariables.cpp Tue Jun 30 08:00:53 2009
>> @@ -138,7 +138,6 @@
>> else {
>> // For block-level expressions, mark that they are live.
>> LiveState(S,AD) = Alive;
>> - StmtVisitor<TransferFuncs,void>::Visit(S);
>> }
>> }
>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
More information about the cfe-commits
mailing list