[cfe-commits] r110317 - /cfe/trunk/lib/Checker/GRExprEngine.cpp
Zhongxing Xu
xuzhongxing at gmail.com
Thu Aug 5 17:16:02 PDT 2010
I see. How about this patch to make the check functional.
Index: lib/Checker/GRExprEngine.cpp
===================================================================
--- lib/Checker/GRExprEngine.cpp (版本 110392)
+++ lib/Checker/GRExprEngine.cpp (工作副本)
@@ -206,6 +206,8 @@
unsigned checkersEvaluated = 0;
for (CheckersOrdered::iterator I=CO->begin(), E=CO->end(); I!=E; ++I){
+ if (PrevSet->empty())
+ break;
ExplodedNodeSet *CurrSet = 0;
if (I+1 == E)
CurrSet = &Dst;
On Thu, Aug 5, 2010 at 11:08 PM, Ted Kremenek <kremenek at apple.com> wrote:
> I have reverted this. This is definitely should not be an assertion. Not all of the checkers will be evaluated if one of them generates a sink node. The fact that this assertion doesn't trigger on our test cases means that there is a bug in the caching logic. We probably need to bail out of the above loop when one of the ExplodedNodeSets becomes empty. We don't want to creates a new checker set unless all of the checkers have evaluated; otherwise we won't know if we are leaving some checkers out just because one generated (and only generated) a sink node.
>
> On Aug 5, 2010, at 12:38 AM, Zhongxing Xu wrote:
>
>> Author: zhongxingxu
>> Date: Thu Aug 5 02:38:23 2010
>> New Revision: 110317
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=110317&view=rev
>> Log:
>> Turn the predicate into an assertion. When could the unequal case happen?
>>
>> Modified:
>> cfe/trunk/lib/Checker/GRExprEngine.cpp
>>
>> Modified: cfe/trunk/lib/Checker/GRExprEngine.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Checker/GRExprEngine.cpp?rev=110317&r1=110316&r2=110317&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Checker/GRExprEngine.cpp (original)
>> +++ cfe/trunk/lib/Checker/GRExprEngine.cpp Thu Aug 5 02:38:23 2010
>> @@ -237,8 +237,10 @@
>> // If we built NewCO, check if we called all the checkers. This is important
>> // so that we know that we accurately determined the entire set of checkers
>> // that responds to this callback.
>> - if (NewCO.get() && checkersEvaluated == Checkers.size())
>> + if (NewCO.get()) {
>> + assert(checkersEvaluated == Checkers.size());
>> CO_Ref = NewCO.take();
>> + }
>>
>> // Don't autotransition. The CheckerContext objects should do this
>> // automatically.
>>
>>
>> _______________________________________________
>> 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