### What it does Checks for a read and a write to the same variable where whether the read occurs before or after the write depends on the evaluation order of sub-expressions. ### Why is this bad? It is often confusing to read. As described [here](https://doc.rust-lang.org/reference/expressions.html?highlight=subexpression#evaluation-order-of-operands), the operands of these expressions are evaluated before applying the effects of the expression. ### Known problems Code which intentionally depends on the evaluation order, or which is correct for any evaluation order. ### Example ``` let mut x = 0; let a = { x = 1; 1 } + x; // Unclear whether a is 1 or 2. ``` Use instead: ``` let tmp = { x = 1; 1 }; let a = tmp + x; ```