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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
