1 // Copyright 2016 Amanieu d'Antras
2 //
3 // Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
4 // http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
5 // http://opensource.org/licenses/MIT>, at your option. This file may not be
6 // copied, modified, or distributed except according to those terms.
7 
8 // Option::unchecked_unwrap
9 pub trait UncheckedOptionExt<T> {
unchecked_unwrap(self) -> T10     unsafe fn unchecked_unwrap(self) -> T;
11 }
12 
13 impl<T> UncheckedOptionExt<T> for Option<T> {
14     #[inline]
unchecked_unwrap(self) -> T15     unsafe fn unchecked_unwrap(self) -> T {
16         match self {
17             Some(x) => x,
18             None => unreachable(),
19         }
20     }
21 }
22 
23 // Equivalent to intrinsics::unreachable() in release mode
24 #[inline]
unreachable() -> !25 unsafe fn unreachable() -> ! {
26     if cfg!(debug_assertions) {
27         unreachable!();
28     } else {
29         enum Void {}
30         match *(1 as *const Void) {}
31     }
32 }
33