  With an increasing number of value-flow properties to check, existing static
program analysis still tends to have scalability issues when high precision is
required. We observe that the key design flaw behind the scalability problem is
that the core static analysis engine is oblivious of the mutual synergies among
different properties being checked and, thus, inevitably loses many
optimization opportunities. Our approach is inter-property-aware and able to
capture possible overlaps and inconsistencies among different properties. Thus,
before analyzing a program, we can make optimization plans which decide how to
reuse the specific analysis results of a property to speed up checking other
properties. Such a synergistic interaction among the properties significantly
improves the analysis performance. We have evaluated our approach by checking
twenty value-flow properties in standard benchmark programs and ten real-world
software systems. The results demonstrate that our approach is more than 8x
faster than existing ones but consumes only 1/7 memory. Such a substantial
improvement in analysis efficiency is not achieved by sacrificing the
effectiveness: at the time of writing, 39 bugs found by our approach have been
fixed by developers and four of them have been assigned CVE IDs due to their
security impact.
