Add debug assertions to some unsafe functions by saethlin · Pull Request #92686 · rust-lang/rust (original) (raw)
As suggested by #51713
Some similar code calls abort()
instead of panic!()
but aborting doesn't work in a const fn
, and the intrinsic for doing dispatch based on whether execution is in a const is unstable.
This picked up some invalid uses of get_unchecked
in the compiler, and fixes them.
I can confirm that they do in fact pick up invalid uses of get_unchecked
in the wild, though the user experience is less-than-awesome:
Running unittests (target/x86_64-unknown-linux-gnu/debug/deps/rle_decode_fast-04b7918da2001b50)
running 6 tests
error: test failed, to rerun pass '--lib'
Caused by:
process didn't exit successfully: `/home/ben/rle-decode-helper/target/x86_64-unknown-linux-gnu/debug/deps/rle_decode_fast-04b7918da2001b50` (signal: 4, SIGILL: illegal instruction)
As best I can tell these changes produce a 6% regression in the runtime of ./x.py test
when [rust] debug = true
is set.
Latest commit (6894d55) brings the additional overhead from this PR down to 0.5%, while also adding a few more assertions. I think this actually covers all the places in core
that it is reasonable to check for safety requirements at runtime.
Thoughts?