Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Zero-initialize object factory structs
Previously these were incrementally populated (assigning each field in turn); the zero init was skipped because it is technically redundant. However, this prevents symex (and perhaps other analyses) from propagating useful information, as the first write appears to be a partial update on top of uninitialised data, and each subsequent write is based on its predecessor. Hence objects produced by the factory end up represented as a stack of WITH operations, ultimately based on an undefined symbol (e.g. dynamic_object1#0). With this change symex becomes able to constant propagate the initial object, reducing equation complexity, and objects that don't have any fields to nondet initialise can potentially be constant- propagated throughout their lifetime.
- Loading branch information