To support transactions, as well as C and C++ mutexes, I’m proposing the implementation of ‘lock blocks’ to the IR. These would behave like blocks, but come with a sum type tag that specifies the type of synchronisation, eg:
TR synchronized block
TR atomic block (probably just noexcept for now)
C++ scoped lock
C mutex lock
Making the IR support locks in a generic scoped way would help the fuzzer generate hopefully deadlock-free locks, and generalise nicely over both transactions and locks.
To support transactions, as well as C and C++ mutexes, I’m proposing the implementation of ‘lock blocks’ to the IR. These would behave like blocks, but come with a sum type tag that specifies the type of synchronisation, eg:
Making the IR support locks in a generic scoped way would help the fuzzer generate hopefully deadlock-free locks, and generalise nicely over both transactions and locks.