1. A method for distinguishing feasible paths in a program by statically tracking one or more execution paths, wherein each execution path is associated with an execution stack, the method comprising: reading one or more program statements in an execution path; adding a location identification for the program statement read to an abstract representation of the execution stack at the time the program statement is executed, in response to determining that the program statement is a procedure call; updating the abstract representations of the execution stack to exclude infeasible execution paths for a possible point in program where the procedure could return or continue, in response to determining that the program statement is a return from a procedure.