  Fault injection is a technique to measure the robustness of a program to
errors by introducing faults into the program under test. Following a fault
injection experiment, Error Propagation Analysis (EPA) is deployed to
understand how errors affect a program's execution. EPA typically compares the
traces of a fault-free (golden) run with those from a faulty run of the
program. While this suffices for deterministic programs, EPA approaches are
unsound for multithreaded programs with non-deterministic golden runs. In this
paper, we propose Invariant Propagation Analysis (IPA) as the use of
automatically inferred likely invariants ("invariants" in the following) in
lieu of golden traces for conducting EPA in multithreaded programs. We evaluate
the stability and fault coverage of invariants derived by IPA through fault
injection experiments across six different fault types and six representative
programs that can be executed with varying numbers of threads. We find that
stable invariants can be inferred in all cases, but their fault coverage
depends on the application and the fault type. We also find that fault coverage
for multithreaded executions with IPA can be even higher than for traditional
singlethreaded EPA, which emphasizes that IPA results cannot be trivially
extrapolated from traditional EPA results.
