Great. Makes sense. On Aug 27, 2010, at 4:12 PM, Tom Care wrote:
> Both, in a way. > > The problem is that a checker might place a sink somewhere that breaks this > assumption. This could be due to a valid bug being found by another checker > (eg, null deref). However this can also happen when another checker creates a > sink incorrectly. > > If the sink is correct, then this assertion can trigger when there is a real > bug. If the sink is incorrect, this assertion has the power to reveal it. > > The usual case so far has been this assertion triggering on correct sinks > that happen to break the property. > > On Aug 27, 2010, at 4:02 PM, Ted Kremenek wrote: > >> Bugs in other checkers or bugs found by other checkers? >> >> On Aug 27, 2010, at 3:37 PM, Tom Care wrote: >> >>> Author: tcare >>> Date: Fri Aug 27 17:37:31 2010 >>> New Revision: 112310 >>> >>> URL: http://llvm.org/viewvc/llvm-project?rev=112310&view=rev >>> Log: >>> Remove an assertion in UnreachableCodeChecker that can be triggered by bugs >>> in other checkers. >>> >>> Modified: >>> cfe/trunk/lib/Checker/UnreachableCodeChecker.cpp >>> >>> Modified: cfe/trunk/lib/Checker/UnreachableCodeChecker.cpp >>> URL: >>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Checker/UnreachableCodeChecker.cpp?rev=112310&r1=112309&r2=112310&view=diff >>> ============================================================================== >>> --- cfe/trunk/lib/Checker/UnreachableCodeChecker.cpp (original) >>> +++ cfe/trunk/lib/Checker/UnreachableCodeChecker.cpp Fri Aug 27 17:37:31 >>> 2010 >>> @@ -188,8 +188,11 @@ >>> // There will never be more than one predecessor. >>> bool UnreachableCodeChecker::isInvalidPath(const CFGBlock *CB, >>> const ParentMap &PM) { >>> - // Assert this CFGBlock only has one or zero predecessors >>> - assert(CB->pred_size() == 0 || CB->pred_size() == 1); >>> + // We only expect a predecessor size of 0 or 1. If it is >1, then an >>> external >>> + // condition has broken our assumption (for example, a sink being placed >>> by >>> + // another check). In these cases, we choose not to report. >>> + if (CB->pred_size() > 1) >>> + return true; >>> >>> // If there are no predecessors, then this block is trivially unreachable >>> if (CB->pred_size() == 0) >>> >>> >>> _______________________________________________ >>> 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
