On the topic of #[deny(warnings)], the easiest solution here would be to make a new lint, called either “unsound” or “future_incompatible”. This lint might even default to error to give it some more oomph. Using a true lint means it would give us the “cap lints” behavior for free, which is cool.
One question is whether it’s worth ensuring that you ALWAYS get some sort of warning for a “future_incompatible”, or if we should allow people to do `#[allow(future_incompatible)]". I guess it’s not a big thing to ensure you always get a warning for this particular lint.
I would then rewrite all the calls to warn to be calls to add-lint.