protected APC VisitBlock(APC pc, AElement preCondition, out AElement newPrecondition) { var pcHead = pc.FirstInBlock(); newPrecondition = preCondition; APC prePC; while (CFG.HasSinglePredecessor(pc, out prePC)) { // We found the head! if (pc.Equals(pcHead)) { return(pcHead); } // nothing to do, kill search if (this.Mdriver.BasicFacts.IsUnreachable(pc)) { Trace("Killing path as pc is unreachable", newPrecondition); newPrecondition = this.NoCondition; return(pc); } newPrecondition = this.Mdriver.BackwardTransfer(pc, prePC, newPrecondition, this); if (this.IsNoCondition(newPrecondition)) { Trace("Killing path as we the underlyng analysis returned bottom", newPrecondition); return(pc); } pc = prePC; } return(pc); }
bool IEqualityComparer <APC> .Equals(APC x, APC y) { return(x.Equals(y)); }