### 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;
```