1. A method for performing path-sensitive data-flow analysis for use in error checking functions, comprising: identifying at least a first instruction and a second instruction in a control flow graph of a function, wherein the first instruction and the second instruction are connected by at least a first control flow path and a second control flow path; defining a path condition between the first instruction and the second instruction as a complex disjunction comprising a first conjunction of predicates for the first control flow path and a second conjunction of predicates for the second control flow path; converting the path condition into conjunctive normal form to obtain a converted path condition, wherein the converted path condition comprises a disjunction of atomic constraints; generating a simplified path condition by simplifying the disjunction of atomic constraints in the converted path condition to a value, wherein the value is a weaker predicate of the disjunction of atomic constraints; analyzing the function using the simplified path condition to detect an error; and presenting the error.