mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-20 03:32:52 +00:00
Allow try_to_raw_bytes on u8 array
This commit is contained in:
parent
daaae25022
commit
91e91d83be
@ -80,31 +80,25 @@ impl<'tcx> ValTree<'tcx> {
|
||||
}
|
||||
|
||||
/// Get the values inside the ValTree as a slice of bytes. This only works for
|
||||
/// constants with types &str and &[u8].
|
||||
/// constants with types &str, &[u8], or [u8; _].
|
||||
pub fn try_to_raw_bytes(self, tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> Option<&'tcx [u8]> {
|
||||
match ty.kind() {
|
||||
ty::Ref(_, inner_ty, _) => match inner_ty.kind() {
|
||||
ty::Str => {
|
||||
let leafs = self
|
||||
.unwrap_branch()
|
||||
.into_iter()
|
||||
.map(|v| v.unwrap_leaf().try_to_u8().unwrap());
|
||||
|
||||
return Some(tcx.arena.alloc_from_iter(leafs));
|
||||
}
|
||||
ty::Slice(slice_ty) if *slice_ty == tcx.types.u8 => {
|
||||
let leafs = self
|
||||
.unwrap_branch()
|
||||
.into_iter()
|
||||
.map(|v| v.unwrap_leaf().try_to_u8().unwrap());
|
||||
|
||||
return Some(tcx.arena.alloc_from_iter(leafs));
|
||||
}
|
||||
_ => {}
|
||||
// `&str` can be interpreted as raw bytes
|
||||
ty::Str => {}
|
||||
// `&[u8]` can be interpreted as raw bytes
|
||||
ty::Slice(slice_ty) if *slice_ty == tcx.types.u8 => {}
|
||||
// other `&_` can't be interpreted as raw bytes
|
||||
_ => return None,
|
||||
},
|
||||
_ => {}
|
||||
// `[u8; N]` can be interpreted as raw bytes
|
||||
ty::Array(array_ty, _) if *array_ty == tcx.types.u8 => {}
|
||||
// Otherwise, type cannot be interpreted as raw bytes
|
||||
_ => return None,
|
||||
}
|
||||
|
||||
None
|
||||
Some(tcx.arena.alloc_from_iter(
|
||||
self.unwrap_branch().into_iter().map(|v| v.unwrap_leaf().try_to_u8().unwrap()),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
@ -1452,7 +1452,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||
}
|
||||
},
|
||||
(ty::ValTree::Branch(_), ty::Array(t, _)) if *t == u8_type => {
|
||||
let bytes = valtree.try_to_raw_bytes(self.tcx(), *t).unwrap_or_else(|| {
|
||||
let bytes = valtree.try_to_raw_bytes(self.tcx(), ty).unwrap_or_else(|| {
|
||||
bug!("expected to convert valtree to raw bytes for type {:?}", t)
|
||||
});
|
||||
p!("*");
|
||||
|
12
src/test/mir-opt/issue-99325.rs
Normal file
12
src/test/mir-opt/issue-99325.rs
Normal file
@ -0,0 +1,12 @@
|
||||
#![feature(adt_const_params)]
|
||||
#![allow(incomplete_features)]
|
||||
|
||||
pub fn function_with_bytes<const BYTES: &'static [u8; 4]>() -> &'static [u8] {
|
||||
BYTES
|
||||
}
|
||||
|
||||
// EMIT_MIR issue_99325.main.mir_map.0.mir
|
||||
pub fn main() {
|
||||
assert_eq!(function_with_bytes::<b"AAAA">(), &[0x41, 0x41, 0x41, 0x41]);
|
||||
assert_eq!(function_with_bytes::<{ &[0x41, 0x41, 0x41, 0x41] }>(), b"AAAA");
|
||||
}
|
295
src/test/mir-opt/issue_99325.main.mir_map.0.mir
Normal file
295
src/test/mir-opt/issue_99325.main.mir_map.0.mir
Normal file
@ -0,0 +1,295 @@
|
||||
// MIR for `main` 0 mir_map
|
||||
|
||||
| User Type Annotations
|
||||
| 0: user_ty: Canonical { max_universe: U0, variables: [], value: TypeOf(DefId(0:3 ~ issue_99325[8f58]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: Value(Branch([Leaf(0x41), Leaf(0x41), Leaf(0x41), Leaf(0x41)])) }], user_self_ty: None }) }, span: $DIR/issue-99325.rs:10:16: 10:46, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
|
||||
| 1: user_ty: Canonical { max_universe: U0, variables: [], value: TypeOf(DefId(0:3 ~ issue_99325[8f58]::function_with_bytes), UserSubsts { substs: [Const { ty: &'static [u8; 4], kind: Unevaluated(Unevaluated { def: WithOptConstParam { did: DefId(0:8 ~ issue_99325[8f58]::main::{constant#1}), const_param_did: Some(DefId(0:4 ~ issue_99325[8f58]::function_with_bytes::BYTES)) }, substs: [], promoted: None }) }], user_self_ty: None }) }, span: $DIR/issue-99325.rs:11:16: 11:68, inferred_ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}
|
||||
|
|
||||
fn main() -> () {
|
||||
let mut _0: (); // return place in scope 0 at $DIR/issue-99325.rs:9:15: 9:15
|
||||
let _1: (); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _2: (&&[u8], &&[u8; 4]); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _3: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _4: &[u8]; // in scope 0 at $DIR/issue-99325.rs:10:16: 10:48
|
||||
let mut _5: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _6: &[u8; 4]; // in scope 0 at $DIR/issue-99325.rs:10:50: 10:75
|
||||
let _7: [u8; 4]; // in scope 0 at $DIR/issue-99325.rs:10:51: 10:75
|
||||
let _8: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _9: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _10: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _11: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _12: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _13: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _14: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _16: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _17: core::panicking::AssertKind; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _18: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _19: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _20: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _21: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _22: std::option::Option<std::fmt::Arguments>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _23: (); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _24: (&&[u8], &&[u8; 4]); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _25: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _26: &[u8]; // in scope 0 at $DIR/issue-99325.rs:11:16: 11:70
|
||||
let mut _27: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _28: &[u8; 4]; // in scope 0 at $DIR/issue-99325.rs:11:72: 11:79
|
||||
let _29: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _30: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _31: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _32: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _33: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _34: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _35: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _37: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _38: core::panicking::AssertKind; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _39: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _40: &&[u8]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _41: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _42: &&[u8; 4]; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let mut _43: std::option::Option<std::fmt::Arguments>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
scope 1 {
|
||||
debug left_val => _8; // in scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
debug right_val => _9; // in scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _15: core::panicking::AssertKind; // in scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
scope 2 {
|
||||
debug kind => _15; // in scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
}
|
||||
scope 3 {
|
||||
debug left_val => _29; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
debug right_val => _30; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
let _36: core::panicking::AssertKind; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
scope 4 {
|
||||
debug kind => _36; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
}
|
||||
|
||||
bb0: {
|
||||
StorageLive(_1); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_3); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_4); // scope 0 at $DIR/issue-99325.rs:10:16: 10:48
|
||||
_4 = function_with_bytes::<&*b"AAAA">() -> [return: bb1, unwind: bb19]; // scope 0 at $DIR/issue-99325.rs:10:16: 10:48
|
||||
// mir::Constant
|
||||
// + span: $DIR/issue-99325.rs:10:16: 10:46
|
||||
// + user_ty: UserType(0)
|
||||
// + literal: Const { ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb1: {
|
||||
_3 = &_4; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_5); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_6); // scope 0 at $DIR/issue-99325.rs:10:50: 10:75
|
||||
StorageLive(_7); // scope 0 at $DIR/issue-99325.rs:10:51: 10:75
|
||||
_7 = [const 65_u8, const 65_u8, const 65_u8, const 65_u8]; // scope 0 at $DIR/issue-99325.rs:10:51: 10:75
|
||||
_6 = &_7; // scope 0 at $DIR/issue-99325.rs:10:50: 10:75
|
||||
_5 = &_6; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_2 = (move _3, move _5); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_5); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_3); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
FakeRead(ForMatchedPlace(None), _2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_8); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_8 = (_2.0: &&[u8]); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_9); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_9 = (_2.1: &&[u8; 4]); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_10); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_11); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_12); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_12 = &(*_8); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_13); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_13 = &(*_9); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_11 = <&[u8] as PartialEq<&[u8; 4]>>::eq(move _12, move _13) -> [return: bb2, unwind: bb19]; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// + literal: Const { ty: for<'r, 's> fn(&'r &[u8], &'s &[u8; 4]) -> bool {<&[u8] as PartialEq<&[u8; 4]>>::eq}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb2: {
|
||||
StorageDead(_13); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_12); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_10 = Not(move _11); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_11); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
switchInt(move _10) -> [false: bb4, otherwise: bb3]; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb3: {
|
||||
StorageLive(_15); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_15 = core::panicking::AssertKind::Eq; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
FakeRead(ForLet(None), _15); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_16); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_17); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_17 = move _15; // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_18); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_19); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_19 = &(*_8); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_18 = &(*_19); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_20); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_21); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_21 = &(*_9); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_20 = &(*_21); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_22); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_22 = Option::<Arguments>::None; // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_16 = core::panicking::assert_failed::<&[u8], &[u8; 4]>(move _17, move _18, move _20, move _22) -> bb19; // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// + literal: Const { ty: for<'r, 's, 't0> fn(core::panicking::AssertKind, &'r &[u8], &'s &[u8; 4], Option<Arguments<'t0>>) -> ! {core::panicking::assert_failed::<&[u8], &[u8; 4]>}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb4: {
|
||||
goto -> bb7; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb5: {
|
||||
StorageDead(_22); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_20); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_18); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_17); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_21); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_19); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_16); // scope 2 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_15); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
unreachable; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb6: {
|
||||
goto -> bb8; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb7: {
|
||||
_1 = const (); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
goto -> bb8; // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb8: {
|
||||
StorageDead(_10); // scope 1 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_9); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_8); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
goto -> bb9; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb9: {
|
||||
StorageDead(_7); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_6); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_4); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_2); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_1); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_23); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_24); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_25); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_26); // scope 0 at $DIR/issue-99325.rs:11:16: 11:70
|
||||
_26 = function_with_bytes::<&*b"AAAA">() -> [return: bb10, unwind: bb19]; // scope 0 at $DIR/issue-99325.rs:11:16: 11:70
|
||||
// mir::Constant
|
||||
// + span: $DIR/issue-99325.rs:11:16: 11:68
|
||||
// + user_ty: UserType(1)
|
||||
// + literal: Const { ty: fn() -> &'static [u8] {function_with_bytes::<&*b"AAAA">}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb10: {
|
||||
_25 = &_26; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_27); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_28); // scope 0 at $DIR/issue-99325.rs:11:72: 11:79
|
||||
_28 = const b"AAAA"; // scope 0 at $DIR/issue-99325.rs:11:72: 11:79
|
||||
// mir::Constant
|
||||
// + span: $DIR/issue-99325.rs:11:72: 11:79
|
||||
// + literal: Const { ty: &[u8; 4], val: Value(Scalar(alloc4)) }
|
||||
_27 = &_28; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_24 = (move _25, move _27); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_27); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_25); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
FakeRead(ForMatchedPlace(None), _24); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_29); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_29 = (_24.0: &&[u8]); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_30); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_30 = (_24.1: &&[u8; 4]); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_31); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_33); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_33 = &(*_29); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_34); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_34 = &(*_30); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_32 = <&[u8] as PartialEq<&[u8; 4]>>::eq(move _33, move _34) -> [return: bb11, unwind: bb19]; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// + literal: Const { ty: for<'r, 's> fn(&'r &[u8], &'s &[u8; 4]) -> bool {<&[u8] as PartialEq<&[u8; 4]>>::eq}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb11: {
|
||||
StorageDead(_34); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_33); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_31 = Not(move _32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
switchInt(move _31) -> [false: bb13, otherwise: bb12]; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb12: {
|
||||
StorageLive(_36); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_36 = core::panicking::AssertKind::Eq; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
FakeRead(ForLet(None), _36); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_37); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_38); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_38 = move _36; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_39); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_40); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_40 = &(*_29); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_39 = &(*_40); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_41); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_42); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_42 = &(*_30); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_41 = &(*_42); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageLive(_43); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_43 = Option::<Arguments>::None; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_37 = core::panicking::assert_failed::<&[u8], &[u8; 4]>(move _38, move _39, move _41, move _43) -> bb19; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// mir::Constant
|
||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
// + literal: Const { ty: for<'r, 's, 't0> fn(core::panicking::AssertKind, &'r &[u8], &'s &[u8; 4], Option<Arguments<'t0>>) -> ! {core::panicking::assert_failed::<&[u8], &[u8; 4]>}, val: Value(<ZST>) }
|
||||
}
|
||||
|
||||
bb13: {
|
||||
goto -> bb16; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb14: {
|
||||
StorageDead(_43); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_41); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_39); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_38); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_42); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_40); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_37); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_36); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
unreachable; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb15: {
|
||||
goto -> bb17; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb16: {
|
||||
_23 = const (); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
goto -> bb17; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb17: {
|
||||
StorageDead(_31); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_30); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_29); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
goto -> bb18; // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
}
|
||||
|
||||
bb18: {
|
||||
StorageDead(_28); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_26); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_24); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
StorageDead(_23); // scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||
_0 = const (); // scope 0 at $DIR/issue-99325.rs:9:15: 12:2
|
||||
return; // scope 0 at $DIR/issue-99325.rs:12:2: 12:2
|
||||
}
|
||||
|
||||
bb19 (cleanup): {
|
||||
resume; // scope 0 at $DIR/issue-99325.rs:9:1: 12:2
|
||||
}
|
||||
}
|
||||
|
||||
alloc4 (size: 4, align: 1) {
|
||||
41 41 41 41 │ AAAA
|
||||
}
|
Loading…
Reference in New Issue
Block a user