CONTEXT SENSITIVE ANALYSIS WITH SUMMARIES begin() context = get initial program context analyze(context, false) while c = worklist.remove() analyze(c, true) analyze(newContext, isReanalysis) if (newContext currently being analyzed) return bottom oldResults = resultsMap.get(newContext) if (oldResults != empty && !isReanalysis) return oldResults; newResults = intraprocedural(newContext) if (newResults != oldResults) resultsMap.put(newContext, newResults) for c in dependents.get(newContext) worklist.add(c) return newResults analyzeCallee(currentContext, callInfo) newContext = generate new context(currentContext, callinfo) analyze(newContext) dependents.add(newContext, currentContext) EXAMPLES TO USE baz(int x) { if (*) return x else return baz(x) } main() { baz(2); foo(); baz(3); } foo() { if (*) return 1 else return bar() } bar() { if (*) return 2 else return foo() }