To expand on this, we consider the following changes to be okay or "not really a breaking change" (see also:
https://blog.rust-lang.org/2014/10/30/Stability.html#what-ar...):
- Patching up soundness holes causing previously-unsound code to error (https://github.com/rust-lang/rust/pull/43651 is an example)
- Changing inference in a way that may require new annotations
- Adding types and things to modules which may cause clashes on glob imports (steve's example above)
- Adding methods to types (this may cause code calling trait methods to require disambiguation via the fully qualified UFCS syntax)
- Adding new trait impls (similar disambiguation issues)
- Lint changes (If you `#[deny(lint)]` a lint, this may cause compilation failures). Cargo passes --cap-lints=warn to dependencies so a lint change will at most cause your dependencies to spew extra warnings and cause your code to stop compiling, in a way that's trivial to fix (allow the lint, or fix the warning).
In general for all releases we run cargobomb to look out for breakages, both "okay" ones and not okay ones. Additionally, for the first two kinds of breakages (and other miscellaneous iffy changes) we proactively cargobomb. Even if something is technically allowed by our stability rules we want to make sure that practically speaking it has minimal impact.