William Mansky

Learn More
—Systems including human and automated agents require methods for verifying and validating that the roles and responsibilities potentially assignable to the human and automated agents do not lead to unsafe situations. Such analyses must consider the conditions that could impact system safety including human behavior and operational procedures, methods of(More)
The ISO C standard does not specify the semantics of many valid programs that use non-portable idioms such as integer-pointer casts. Recent efforts at formal definitions and verified implementation of the C language inherit this feature. By adopting high-level abstract memory models, they validate common optimizations. On the other hand, this prevents(More)
Compiler optimizations, usually expressed as rewrites on program graphs, are a core part of all modern compilers. However, even production compilers have bugs, and these bugs are difficult to detect and resolve. The problem only becomes more complex when compiling parallel programs; from the choice of graph representation to the possibility of race(More)
Most compiler correctness efforts, whether based on validation or once-and-for-all verification , are tightly tied to the particular language(s) under consideration. Proof techniques may be replicated for other targets, and parts of the compiler chain may be shared for new input or output languages, but the extent to which common elements can be generalized(More)
Formalizations of concurrent memory models often represent memory behavior in terms of sequences of operations, where operations are either reads, writes, or synchronizations. More concrete models of (sequential) memory behavior may include allocation and free operations , but also include details of memory layout or data representation. We present an(More)
In this paper, I demonstrate the implementation of several tools for program analysis in a machine-checked environment. I begin by detailing the implementation of the separation logic for Concurrent C Minor proposed by Hobor, Appel, and Nardelli in the Coq proof assistant. Formalizing the syntax and semantics of CCm and extending the set of semi-automated(More)
Writing race-free concurrent code is notoriously difficult, and data races can result in bugs that are difficult to isolate and reproduce. Dynamic race detection can catch data races that cannot (easily) be detected statically. One approach to dynamic race detection is to instrument the potentially racy code with operations that store and compare metadata,(More)