A couple of times now I've tried to use SmallVec as a drop-in replacement for Vec within rustc, and it hasn't worked because SmallVec doesn't have #[may_dangle] annotations. (rust-lang/rust#55525 is one case; rust-lang/rust#56269 is the other.) That annotation is unstable so I think it would have to be behind a feature flag, but that would suffice for my purposes.
I'm not sure about the right way to do this, though. I tried changing this line:
impl<A: Array> Drop for SmallVec {
to this:
unsafe impl<#[may_dangle] A: Array> Drop for SmallVec {
For the current code I'm working on (rust-lang/rust#56269), where Vec works but SmallVec doesn't, this reduced the number of borrow checker errors from 4 to 2. So it helped, but didn't solve things completely. Maybe there's a better way to do it.
A couple of times now I've tried to use
SmallVecas a drop-in replacement forVecwithin rustc, and it hasn't worked becauseSmallVecdoesn't have#[may_dangle]annotations. (rust-lang/rust#55525 is one case; rust-lang/rust#56269 is the other.) That annotation is unstable so I think it would have to be behind a feature flag, but that would suffice for my purposes.I'm not sure about the right way to do this, though. I tried changing this line:
to this:
For the current code I'm working on (rust-lang/rust#56269), where
Vecworks butSmallVecdoesn't, this reduced the number of borrow checker errors from 4 to 2. So it helped, but didn't solve things completely. Maybe there's a better way to do it.