Description
Affected rules
RULE-25-21
- Likely others, haven't researched
Description
Rule 25-21
requires that the atomic_*_explicit
operations use the memory order memory_order_seq_cst
.
It would probably be overly restrictive to require an explicit inline written memory_order_seq_cst
at the call site. However, it's probably too accepting to merely allow any dynamically computed value. Ideally, we can support basic indirection like variable assignment, parameter values, function calls/returns, and report cases that don't trace back to an acceptable root.
Doing this as a typical flow analysis is backwards. We can easily track flow from memory_order_seq_cst
exprs to atomic_*_explicit
calls, but the existence of such a flow doesn't preclude that invalid values also flow to the call. Alternatively, there are potential performance issues if we consider all exprs which are not memory_order_seq_cst
to be sources in the flow analysis.
Wouldn't be terribly hard to write a library such as TracesToExplicit<T>
that is a very simple global flow analysis made for this purpose, starting from sinks and doing only very obvious backwards tracking of values through function calls and variable assignments. If that doesn't track back to an acceptable value, we can report it. Ideally we can report it as a path-problem
though this makes such a library more complex to implement.