Skip to content

Commit

Permalink
Document unsafe rules with comments and bug! calls
Browse files Browse the repository at this point in the history
  • Loading branch information
oli-obk committed Dec 4, 2018
1 parent f2ae7b7 commit 906a49e
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions src/librustc_mir/transform/check_unsafety.rs
Original file line number Diff line number Diff line change
Expand Up @@ -284,10 +284,10 @@ impl<'a, 'tcx> UnsafetyChecker<'a, 'tcx> {
unsafe_blocks: &[(ast::NodeId, bool)]) {
let safety = self.source_scope_local_data[self.source_info.scope].safety;
let within_unsafe = match (safety, self.min_const_fn) {
// FIXME: erring on the safe side here and disallowing builtin unsafety in const fn
// Erring on the safe side, pun intended
(Safety::BuiltinUnsafe, true) |
// `unsafe` blocks are required even in `const unsafe fn`
(Safety::FnUnsafe, true) |
// mir building encodes const fn bodies as safe, even for `const unsafe fn`
(Safety::FnUnsafe, true) => bug!("const unsafe fn body treated as inherently unsafe"),
// `unsafe` blocks are required in safe code
(Safety::Safe, _) => {
for violation in violations {
Expand All @@ -305,8 +305,10 @@ impl<'a, 'tcx> UnsafetyChecker<'a, 'tcx> {
}
false
}
// regular `unsafe` function bodies allow unsafe without additional unsafe blocks
(Safety::BuiltinUnsafe, false) | (Safety::FnUnsafe, false) => true,
(Safety::ExplicitUnsafe(node_id), _) => {
// mark unsafe block as used if there are any unsafe operations inside
if !violations.is_empty() {
self.used_unsafe.insert(node_id);
}
Expand All @@ -316,6 +318,7 @@ impl<'a, 'tcx> UnsafetyChecker<'a, 'tcx> {
match violation.kind {
// these are allowed
UnsafetyViolationKind::MinConstFn
// if `#![feature(min_const_unsafe_fn)]` is active
if self.tcx.sess.features_untracked().min_const_unsafe_fn => {},
_ => {
let mut violation = violation.clone();
Expand Down

0 comments on commit 906a49e

Please sign in to comment.