// Return the set of stubs used along the trace public HashSet <string> GetStubs(cba.ErrorTrace trace) { var ret = new HashSet <string>(); GetStubs(trace, ret); return(ret); }
// Returns file and line of the failing assert. Dumps // error trace to disk. public Tuple <string, int> PrintErrorTrace(cba.ErrorTrace trace, string filename, List <Tuple <string, int, string> > eeSlicedSourceLines, string failStatus) { trace = mapBackTrace(trace); if (Driver.printTraceMode == Driver.PRINT_TRACE_MODE.Boogie) { cba.PrintProgramPath.print(input, trace, filename); return(null); } else { // relevant lines cba.PrintSdvPath.relevantLines = null; if (eeSlicedSourceLines != null) { cba.PrintSdvPath.relevantLines = new HashSet <Tuple <string, int> >(); eeSlicedSourceLines.Iter(tup => cba.PrintSdvPath.relevantLines.Add(Tuple.Create(tup.Item1, tup.Item2))); } cba.PrintSdvPath.failingLocation = null; cba.PrintSdvPath.failStatus = failStatus; cba.PrintSdvPath.Print(input.getProgram(), trace, new HashSet <string>(), "", filename + ".tt", filename + "stack.txt"); if (cba.PrintSdvPath.abortMessage != null) { var am = new TokenTextWriter(filename + ".txt"); am.WriteLine(cba.PrintSdvPath.abortMessage); am.Close(); } if (cba.PrintSdvPath.lastDriverLocation == null) { return(null); } cba.PrintSdvPath.failingLocation = Tuple.Create(cba.PrintSdvPath.lastDriverLocation.Item1, cba.PrintSdvPath.lastDriverLocation.Item3); cba.PrintSdvPath.Print(input.getProgram(), trace, new HashSet <string>(), "", filename + ".tt", filename + "stack.txt"); if (cba.PrintSdvPath.abortMessage != null) { var am = new TokenTextWriter(filename + ".txt"); am.WriteLine(cba.PrintSdvPath.abortMessage); am.Close(); } cba.PrintSdvPath.relevantLines = null; cba.PrintSdvPath.failingLocation = null; cba.PrintSdvPath.failStatus = null; return(Tuple.Create(cba.PrintSdvPath.lastDriverLocation.Item1, cba.PrintSdvPath.lastDriverLocation.Item3)); } }
void GetStubs(cba.ErrorTrace trace, HashSet <string> ret) { if (trace == null) { return; } if (programStubs.Contains(trace.procName)) { ret.Add(trace.procName); } trace.Blocks .Iter(blk => blk.Cmds.OfType <cba.CallInstr>() .Iter(cc => GetStubs(cc.calleeTrace, ret))); }
public override cba.ErrorTrace mapBackTrace(cba.ErrorTrace trace) { cba.ErrorTrace ptrace = null; if (!Options.DeepAsserts) { // knock off top-level procedure var OldMainName = (input as PersistentProgram).mainProcName; foreach (var blk in trace.Blocks) { var c = blk.Cmds.OfType <cba.CallInstr>().First(cmd => cmd.callee == OldMainName); if (c == null) { continue; } ptrace = c.calleeTrace; break; } Debug.Assert(ptrace != null); } else { ptrace = da.mapBackTrace(trace); } trace = ptrace; (suppressInfo as IEnumerable <cba.InsertionTrans>) .Reverse().Iter(tinfo => trace = tinfo.mapBackTrace(trace)); trace = assertInstrInfo.mapBackTrace(trace); trace = compressBlocks.mapBackTrace(trace); //trace = printInfo.mapBackTrace(trace); if (sourceInfo != null) { trace = sourceInfo.mapBackTrace(trace); } trace = blanksInfo.mapBackTrace(trace); return(trace); }