@jbz We are fuzzy pattern-matching engines, these aren’t the kind bugs we can easily see. And we don’t need to: We give different things names that are different enough that our fuzzy pattern-matching engines do see it as different things.

physical_size and allocated_size instead of psize and asize.

I agree with everything said about how this would have been caught in Rust (incl. @kornel 's reply), but getting rid of habits formed and based on constraints of the 1970ies would also help.

@jbz This one is even caught by default:

```
warning: value assigned to `psize` is never read
|
| psize <<= ashift;
| ^^^^^
|
= help: maybe it is overwritten before being read?
= note: `#[warn(unused_assignments)]` on by default
```

The seemingly trivial `#[allow(warning)]` annotations have a major impact: they allow the compiler to lint about uncertain problems by default, because false positives can be muted easily and precisely on case-by-case basis.