Description
Miri can explore some possible behaviors introduced by weak memory, but not all of them. What exactly are our gaps and is it possible to fix them?
Original description
Miri explores a particular interleaving of a concurrent execution, so if a program is buggy only for some executions Miri might miss that bug. Furthermore, Miri will never exhibit "weak" behaviors where the same operation appears to take effect in different order for different threads, which means there is yet another set of executions that Miri will not see and that could be buggy.
It would be great if we could do something about this. However, exploring all interleavings is clearly infeasible. I think one common technique used for such situations in the literature is "(dynamic) partial order reduction", but I am not sure if that technique is applicable to Miri.