Skip to main content

rustc_mir_build/builder/custom/parse/
instruction.rs

1use rustc_abi::{FieldIdx, VariantIdx};
2use rustc_hir::Safety;
3use rustc_middle::mir::interpret::Scalar;
4use rustc_middle::mir::*;
5use rustc_middle::thir::*;
6use rustc_middle::ty;
7use rustc_middle::ty::adjustment::PointerCoercion;
8use rustc_middle::ty::cast::mir_cast_kind;
9use rustc_span::{Span, Spanned};
10
11use super::{PResult, ParseCtxt, parse_by_kind};
12use crate::builder::custom::ParseError;
13use crate::builder::expr::as_constant::as_constant_inner;
14
15impl<'a, 'tcx> ParseCtxt<'a, 'tcx> {
16    pub(crate) fn parse_statement(&self, expr_id: ExprId) -> PResult<StatementKind<'tcx>> {
17        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:17",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(17u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "statement") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_storage_live,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(StatementKind::StorageLive(self.parse_local(args[0])?))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_storage_dead,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(StatementKind::StorageDead(self.parse_local(args[0])?))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_assume,
                            *did)
                    }
                    _ => false,
                }
            } => {
            let op = self.parse_operand(args[0])?;
            Ok(StatementKind::Intrinsic(Box::new(NonDivergingIntrinsic::Assume(op))))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_set_discriminant,
                            *did)
                    }
                    _ => false,
                }
            } => {
            let place = self.parse_place(args[0])?;
            let var = self.parse_integer_literal(args[1])? as u32;
            Ok(StatementKind::SetDiscriminant {
                    place: Box::new(place),
                    variant_index: VariantIdx::from_u32(var),
                })
        }
        ExprKind::Assign { lhs, rhs } => {
            let lhs = self.parse_place(*lhs)?;
            let rhs = self.parse_rvalue(*rhs)?;
            Ok(StatementKind::Assign(Box::new((lhs, rhs))))
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "statement")),
    }
}parse_by_kind!(self, expr_id, _, "statement",
18            @call(mir_storage_live, args) => {
19                Ok(StatementKind::StorageLive(self.parse_local(args[0])?))
20            },
21            @call(mir_storage_dead, args) => {
22                Ok(StatementKind::StorageDead(self.parse_local(args[0])?))
23            },
24            @call(mir_assume, args) => {
25                let op = self.parse_operand(args[0])?;
26                Ok(StatementKind::Intrinsic(Box::new(NonDivergingIntrinsic::Assume(op))))
27            },
28            @call(mir_set_discriminant, args) => {
29                let place = self.parse_place(args[0])?;
30                let var = self.parse_integer_literal(args[1])? as u32;
31                Ok(StatementKind::SetDiscriminant {
32                    place: Box::new(place),
33                    variant_index: VariantIdx::from_u32(var),
34                })
35            },
36            ExprKind::Assign { lhs, rhs } => {
37                let lhs = self.parse_place(*lhs)?;
38                let rhs = self.parse_rvalue(*rhs)?;
39                Ok(StatementKind::Assign(Box::new((lhs, rhs))))
40            },
41        )
42    }
43
44    pub(crate) fn parse_terminator(&self, expr_id: ExprId) -> PResult<TerminatorKind<'tcx>> {
45        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:45",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(45u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "terminator") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let expr = expr;
    match &expr.kind {
        ExprKind::Call { ty, fun: _, args: _args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_return,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(TerminatorKind::Return)
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_goto, *did)
                    }
                    _ => false,
                }
            } => {
            Ok(TerminatorKind::Goto { target: self.parse_block(args[0])? })
        }
        ExprKind::Call { ty, fun: _, args: _args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_unreachable,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(TerminatorKind::Unreachable)
        }
        ExprKind::Call { ty, fun: _, args: _args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_unwind_resume,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(TerminatorKind::UnwindResume)
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_unwind_terminate,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(TerminatorKind::UnwindTerminate(self.parse_unwind_terminate_reason(args[0])?))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_drop, *did)
                    }
                    _ => false,
                }
            } => {
            Ok(TerminatorKind::Drop {
                    place: self.parse_place(args[0])?,
                    target: self.parse_return_to(args[1])?,
                    unwind: self.parse_unwind_action(args[2])?,
                    replace: false,
                    drop: None,
                })
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_call, *did)
                    }
                    _ => false,
                }
            } => {
            self.parse_call(args)
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_tail_call,
                            *did)
                    }
                    _ => false,
                }
            } => {
            self.parse_tail_call(args)
        }
        ExprKind::Match { scrutinee, arms, .. } => {
            let discr = self.parse_operand(*scrutinee)?;
            self.parse_match(arms,
                    expr.span).map(|t|
                    TerminatorKind::SwitchInt { discr, targets: t })
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "terminator")),
    }
}parse_by_kind!(self, expr_id, expr, "terminator",
46            @call(mir_return, _args) => {
47                Ok(TerminatorKind::Return)
48            },
49            @call(mir_goto, args) => {
50                Ok(TerminatorKind::Goto { target: self.parse_block(args[0])? } )
51            },
52            @call(mir_unreachable, _args) => {
53                Ok(TerminatorKind::Unreachable)
54            },
55            @call(mir_unwind_resume, _args) => {
56                Ok(TerminatorKind::UnwindResume)
57            },
58            @call(mir_unwind_terminate, args) => {
59                Ok(TerminatorKind::UnwindTerminate(self.parse_unwind_terminate_reason(args[0])?))
60            },
61            @call(mir_drop, args) => {
62                Ok(TerminatorKind::Drop {
63                    place: self.parse_place(args[0])?,
64                    target: self.parse_return_to(args[1])?,
65                    unwind: self.parse_unwind_action(args[2])?,
66                    replace: false,
67                    drop: None,
68                })
69            },
70            @call(mir_call, args) => {
71                self.parse_call(args)
72            },
73            @call(mir_tail_call, args) => {
74                self.parse_tail_call(args)
75            },
76            ExprKind::Match { scrutinee, arms, .. } => {
77                let discr = self.parse_operand(*scrutinee)?;
78                self.parse_match(arms, expr.span).map(|t| TerminatorKind::SwitchInt { discr, targets: t })
79            },
80        )
81    }
82
83    fn parse_unwind_terminate_reason(&self, expr_id: ExprId) -> PResult<UnwindTerminateReason> {
84        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:84",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(84u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "unwind terminate reason") as
                                                &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_unwind_terminate_reason,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::Abi
            } => {
            Ok(UnwindTerminateReason::Abi)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_unwind_terminate_reason,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::InCleanup
            } => {
            Ok(UnwindTerminateReason::InCleanup)
        }
            #[allow(unreachable_patterns)]
            _ =>
            return Err(self.expr_error(expr_id, "unwind terminate reason")),
    }
}parse_by_kind!(self, expr_id, _, "unwind terminate reason",
85            @variant(mir_unwind_terminate_reason, Abi) => {
86                Ok(UnwindTerminateReason::Abi)
87            },
88            @variant(mir_unwind_terminate_reason, InCleanup) => {
89                Ok(UnwindTerminateReason::InCleanup)
90            },
91        )
92    }
93
94    fn parse_unwind_action(&self, expr_id: ExprId) -> PResult<UnwindAction> {
95        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:95",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(95u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "unwind action") as
                                                &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Call { ty, fun: _, args: _args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_unwind_continue,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(UnwindAction::Continue)
        }
        ExprKind::Call { ty, fun: _, args: _args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_unwind_unreachable,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(UnwindAction::Unreachable)
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_unwind_terminate,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(UnwindAction::Terminate(self.parse_unwind_terminate_reason(args[0])?))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_unwind_cleanup,
                            *did)
                    }
                    _ => false,
                }
            } => {
            Ok(UnwindAction::Cleanup(self.parse_block(args[0])?))
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "unwind action")),
    }
}parse_by_kind!(self, expr_id, _, "unwind action",
96            @call(mir_unwind_continue, _args) => {
97                Ok(UnwindAction::Continue)
98            },
99            @call(mir_unwind_unreachable, _args) => {
100                Ok(UnwindAction::Unreachable)
101            },
102            @call(mir_unwind_terminate, args) => {
103                Ok(UnwindAction::Terminate(self.parse_unwind_terminate_reason(args[0])?))
104            },
105            @call(mir_unwind_cleanup, args) => {
106                Ok(UnwindAction::Cleanup(self.parse_block(args[0])?))
107            },
108        )
109    }
110
111    fn parse_return_to(&self, expr_id: ExprId) -> PResult<BasicBlock> {
112        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:112",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(112u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "return block") as
                                                &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_return_to,
                            *did)
                    }
                    _ => false,
                }
            } => {
            self.parse_block(args[0])
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "return block")),
    }
}parse_by_kind!(self, expr_id, _, "return block",
113            @call(mir_return_to, args) => {
114                self.parse_block(args[0])
115            },
116        )
117    }
118
119    fn parse_match(&self, arms: &[ArmId], span: Span) -> PResult<SwitchTargets> {
120        let Some((otherwise, rest)) = arms.split_last() else {
121            return Err(ParseError {
122                span,
123                item_description: "no arms".to_string(),
124                expected: "at least one arm".to_string(),
125            });
126        };
127
128        let otherwise = &self.thir[*otherwise];
129        let PatKind::Wild = otherwise.pattern.kind else {
130            return Err(ParseError {
131                span: otherwise.span,
132                item_description: ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0:?}", otherwise.pattern.kind))
    })format!("{:?}", otherwise.pattern.kind),
133                expected: "wildcard pattern".to_string(),
134            });
135        };
136        let otherwise = self.parse_block(otherwise.body)?;
137
138        let mut values = Vec::new();
139        let mut targets = Vec::new();
140        for arm in rest {
141            let arm = &self.thir[*arm];
142            let value = match arm.pattern.kind {
143                PatKind::Constant { value } => value,
144                _ => {
145                    return Err(ParseError {
146                        span: arm.pattern.span,
147                        item_description: ::alloc::__export::must_use({
        ::alloc::fmt::format(format_args!("{0:?}", arm.pattern.kind))
    })format!("{:?}", arm.pattern.kind),
148                        expected: "constant pattern".to_string(),
149                    });
150                }
151            };
152            values.push(value.to_leaf().to_bits_unchecked());
153            targets.push(self.parse_block(arm.body)?);
154        }
155
156        Ok(SwitchTargets::new(values.into_iter().zip(targets), otherwise))
157    }
158
159    fn parse_call(&self, args: &[ExprId]) -> PResult<TerminatorKind<'tcx>> {
160        let (destination, call) = {
    let expr_id = self.preparse(args[0]);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:160",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(160u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "function call") as
                                                &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Assign { lhs, rhs } =>
            (*lhs,
                *rhs),
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "function call")),
    }
}parse_by_kind!(self, args[0], _, "function call",
161            ExprKind::Assign { lhs, rhs } => (*lhs, *rhs),
162        );
163        let destination = self.parse_place(destination)?;
164        let target = self.parse_return_to(args[1])?;
165        let unwind = self.parse_unwind_action(args[2])?;
166
167        {
    let expr_id = self.preparse(call);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:167",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(167u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "function call") as
                                                &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Call { fun, args, from_hir_call, fn_span, .. } => {
            let fun = self.parse_operand(*fun)?;
            let args =
                args.iter().map(|arg|
                                Ok(Spanned {
                                        node: self.parse_operand(*arg)?,
                                        span: self.thir.exprs[*arg].span,
                                    })).collect::<PResult<Box<[_]>>>()?;
            Ok(TerminatorKind::Call {
                    func: fun,
                    args,
                    destination,
                    target: Some(target),
                    unwind,
                    call_source: if *from_hir_call {
                        CallSource::Normal
                    } else { CallSource::OverloadedOperator },
                    fn_span: *fn_span,
                })
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "function call")),
    }
}parse_by_kind!(self, call, _, "function call",
168            ExprKind::Call { fun, args, from_hir_call, fn_span, .. } => {
169                let fun = self.parse_operand(*fun)?;
170                let args = args
171                    .iter()
172                    .map(|arg|
173                        Ok(Spanned { node: self.parse_operand(*arg)?, span: self.thir.exprs[*arg].span  } )
174                    )
175                    .collect::<PResult<Box<[_]>>>()?;
176                Ok(TerminatorKind::Call {
177                    func: fun,
178                    args,
179                    destination,
180                    target: Some(target),
181                    unwind,
182                    call_source: if *from_hir_call { CallSource::Normal } else {
183                        CallSource::OverloadedOperator
184                    },
185                    fn_span: *fn_span,
186                })
187            },
188        )
189    }
190
191    fn parse_tail_call(&self, args: &[ExprId]) -> PResult<TerminatorKind<'tcx>> {
192        {
    let expr_id = self.preparse(args[0]);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:192",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(192u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "tail call") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Call { fun, args, fn_span, .. } => {
            let fun = self.parse_operand(*fun)?;
            let args =
                args.iter().map(|arg|
                                Ok(Spanned {
                                        node: self.parse_operand(*arg)?,
                                        span: self.thir.exprs[*arg].span,
                                    })).collect::<PResult<Box<[_]>>>()?;
            Ok(TerminatorKind::TailCall {
                    func: fun,
                    args,
                    fn_span: *fn_span,
                })
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "tail call")),
    }
}parse_by_kind!(self, args[0], _, "tail call",
193            ExprKind::Call { fun, args, fn_span, .. } => {
194                let fun = self.parse_operand(*fun)?;
195                let args = args
196                    .iter()
197                    .map(|arg|
198                        Ok(Spanned { node: self.parse_operand(*arg)?, span: self.thir.exprs[*arg].span  } )
199                    )
200                    .collect::<PResult<Box<[_]>>>()?;
201                Ok(TerminatorKind::TailCall {
202                    func: fun,
203                    args,
204                    fn_span: *fn_span,
205                })
206            },
207        )
208    }
209
210    fn parse_cast_fn_ptr_safety(&self, expr_id: ExprId) -> PResult<Safety> {
211        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:211",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(211u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "function pointer safety") as
                                                &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_fn_ptr_safety,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::Safe
            } => {
            Ok(Safety::Safe)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_fn_ptr_safety,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::Unsafe
            } => {
            Ok(Safety::Unsafe)
        }
            #[allow(unreachable_patterns)]
            _ =>
            return Err(self.expr_error(expr_id, "function pointer safety")),
    }
}parse_by_kind!(self, expr_id, _, "function pointer safety",
212            @variant(mir_cast_fn_ptr_safety, Safe) => {
213                Ok(Safety::Safe)
214            },
215            @variant(mir_cast_fn_ptr_safety, Unsafe) => {
216                Ok(Safety::Unsafe)
217            },
218        )
219    }
220
221    fn parse_cast_pointer_coercion(&self, expr_id: ExprId) -> PResult<PointerCoercion> {
222        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:222",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(222u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "pointer coercion kind") as
                                                &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let expr = expr;
    match &expr.kind {
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_ptr_coercion,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::ReifyFnPointer
            } => {
            let ExprKind::Adt(AdtExpr { fields, .. }) =
                &expr.kind else {
                    {
                        ::core::panicking::panic_fmt(format_args!("internal error: entered unreachable code: {0}",
                                format_args!("already matched")));
                    }
                };
            Ok(PointerCoercion::ReifyFnPointer(self.parse_cast_fn_ptr_safety(fields[0].expr)?))
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_ptr_coercion,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::UnsafeFnPointer
            } => {
            Ok(PointerCoercion::UnsafeFnPointer)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_ptr_coercion,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::ClosureFnPointer
            } => {
            let ExprKind::Adt(AdtExpr { fields, .. }) =
                &expr.kind else {
                    {
                        ::core::panicking::panic_fmt(format_args!("internal error: entered unreachable code: {0}",
                                format_args!("already matched")));
                    }
                };
            Ok(PointerCoercion::ClosureFnPointer(self.parse_cast_fn_ptr_safety(fields[0].expr)?))
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_ptr_coercion,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::MutToConstPointer
            } => {
            Ok(PointerCoercion::MutToConstPointer)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_ptr_coercion,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::ArrayToPointer
            } => {
            Ok(PointerCoercion::ArrayToPointer)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_ptr_coercion,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::UnsizePointee
            } => {
            Ok(PointerCoercion::Unsize)
        }
            #[allow(unreachable_patterns)]
            _ =>
            return Err(self.expr_error(expr_id, "pointer coercion kind")),
    }
}parse_by_kind!(self, expr_id, expr, "pointer coercion kind",
223            @variant(mir_cast_ptr_coercion, ReifyFnPointer) => {
224                let ExprKind::Adt(AdtExpr { fields, .. }) = &expr.kind else {
225                    unreachable!("already matched")
226                };
227                Ok(PointerCoercion::ReifyFnPointer(
228                    self.parse_cast_fn_ptr_safety(fields[0].expr)?,
229                ))
230            },
231            @variant(mir_cast_ptr_coercion, UnsafeFnPointer) => {
232                Ok(PointerCoercion::UnsafeFnPointer)
233            },
234            @variant(mir_cast_ptr_coercion, ClosureFnPointer) => {
235                let ExprKind::Adt(AdtExpr { fields, .. }) = &expr.kind else {
236                    unreachable!("already matched")
237                };
238                Ok(PointerCoercion::ClosureFnPointer(
239                    self.parse_cast_fn_ptr_safety(fields[0].expr)?,
240                ))
241            },
242            @variant(mir_cast_ptr_coercion, MutToConstPointer) => {
243                Ok(PointerCoercion::MutToConstPointer)
244            },
245            @variant(mir_cast_ptr_coercion, ArrayToPointer) => {
246                Ok(PointerCoercion::ArrayToPointer)
247            },
248            @variant(mir_cast_ptr_coercion, UnsizePointee) => {
249                Ok(PointerCoercion::Unsize)
250            },
251        )
252    }
253
254    fn parse_cast_kind(&self, expr_id: ExprId) -> PResult<CastKind> {
255        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:255",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(255u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "cast kind") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let expr = expr;
    match &expr.kind {
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::PointerExposeProvenance
            } => {
            Ok(CastKind::PointerExposeProvenance)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::PointerWithExposedProvenance
            } => {
            Ok(CastKind::PointerWithExposedProvenance)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::IntToInt
            } => {
            Ok(CastKind::IntToInt)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::FloatToInt
            } => {
            Ok(CastKind::FloatToInt)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::FloatToFloat
            } => {
            Ok(CastKind::FloatToFloat)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::IntToFloat
            } => {
            Ok(CastKind::IntToFloat)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::PtrToPtr
            } => {
            Ok(CastKind::PtrToPtr)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::FnPtrToPtr
            } => {
            Ok(CastKind::FnPtrToPtr)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::Transmute
            } => {
            Ok(CastKind::Transmute)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::BoxDerefTransmute
            } => {
            Ok(CastKind::BoxDerefTransmute)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::Subtype
            } => {
            Ok(CastKind::Subtype)
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, .. }) if
            {
                self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_kind,
                        adt_def.did()) &&
                    adt_def.variants()[*variant_index].name ==
                        rustc_span::sym::PointerCoercion
            } => {
            let ExprKind::Adt(AdtExpr { fields, .. }) =
                &expr.kind else {
                    {
                        ::core::panicking::panic_fmt(format_args!("internal error: entered unreachable code: {0}",
                                format_args!("already matched")));
                    }
                };
            Ok(CastKind::PointerCoercion(self.parse_cast_pointer_coercion(fields[0].expr)?,
                    CoercionSource::AsCast))
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "cast kind")),
    }
}parse_by_kind!(self, expr_id, expr, "cast kind",
256            @variant(mir_cast_kind, PointerExposeProvenance) => {
257                Ok(CastKind::PointerExposeProvenance)
258            },
259            @variant(mir_cast_kind, PointerWithExposedProvenance) => {
260                Ok(CastKind::PointerWithExposedProvenance)
261            },
262            @variant(mir_cast_kind, IntToInt) => {
263                Ok(CastKind::IntToInt)
264            },
265            @variant(mir_cast_kind, FloatToInt) => {
266                Ok(CastKind::FloatToInt)
267            },
268            @variant(mir_cast_kind, FloatToFloat) => {
269                Ok(CastKind::FloatToFloat)
270            },
271            @variant(mir_cast_kind, IntToFloat) => {
272                Ok(CastKind::IntToFloat)
273            },
274            @variant(mir_cast_kind, PtrToPtr) => {
275                Ok(CastKind::PtrToPtr)
276            },
277            @variant(mir_cast_kind, FnPtrToPtr) => {
278                Ok(CastKind::FnPtrToPtr)
279            },
280            @variant(mir_cast_kind, Transmute) => {
281                Ok(CastKind::Transmute)
282            },
283            @variant(mir_cast_kind, BoxDerefTransmute) => {
284                Ok(CastKind::BoxDerefTransmute)
285            },
286            @variant(mir_cast_kind, Subtype) => {
287                Ok(CastKind::Subtype)
288            },
289            @variant(mir_cast_kind, PointerCoercion) => {
290                let ExprKind::Adt(AdtExpr { fields, .. }) = &expr.kind else {
291                    unreachable!("already matched")
292                };
293                Ok(CastKind::PointerCoercion(
294                    self.parse_cast_pointer_coercion(fields[0].expr)?,
295                    CoercionSource::AsCast,
296                ))
297            },
298        )
299    }
300
301    fn parse_rvalue(&self, expr_id: ExprId) -> PResult<Rvalue<'tcx>> {
302        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:302",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(302u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "rvalue") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let expr = expr;
    match &expr.kind {
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_discriminant,
                            *did)
                    }
                    _ => false,
                }
            } => self.parse_place(args[0]).map(Rvalue::Discriminant),
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_transmute,
                            *did)
                    }
                    _ => false,
                }
            } => {
            let source = self.parse_operand(args[0])?;
            Ok(Rvalue::Cast(CastKind::Transmute, source, expr.ty))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_ptr_to_ptr,
                            *did)
                    }
                    _ => false,
                }
            } => {
            let source = self.parse_operand(args[0])?;
            Ok(Rvalue::Cast(CastKind::PtrToPtr, source, expr.ty))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast_unsize,
                            *did)
                    }
                    _ => false,
                }
            } => {
            let source = self.parse_operand(args[0])?;
            let kind =
                CastKind::PointerCoercion(ty::adjustment::PointerCoercion::Unsize,
                    CoercionSource::AsCast);
            Ok(Rvalue::Cast(kind, source, expr.ty))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_cast, *did)
                    }
                    _ => false,
                }
            } => {
            let source = self.parse_operand(args[0])?;
            Ok(Rvalue::Cast(self.parse_cast_kind(args[1])?, source, expr.ty))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_checked,
                            *did)
                    }
                    _ => false,
                }
            } => {
            {
                let expr_id = self.preparse(args[0]);
                let expr = &self.thir[expr_id];
                {
                    use ::tracing::__macro_support::Callsite as _;
                    static __CALLSITE: ::tracing::callsite::DefaultCallsite =
                        {
                            static META: ::tracing::Metadata<'static> =
                                {
                                    ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:322",
                                        "rustc_mir_build::builder::custom::parse::instruction",
                                        ::tracing::Level::DEBUG,
                                        ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                                        ::tracing_core::__macro_support::Option::Some(322u32),
                                        ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                                        ::tracing_core::field::FieldSet::new(&["message"],
                                            ::tracing_core::callsite::Identifier(&__CALLSITE)),
                                        ::tracing::metadata::Kind::EVENT)
                                };
                            ::tracing::callsite::DefaultCallsite::new(&META)
                        };
                    let enabled =
                        ::tracing::Level::DEBUG <=
                                    ::tracing::level_filters::STATIC_MAX_LEVEL &&
                                ::tracing::Level::DEBUG <=
                                    ::tracing::level_filters::LevelFilter::current() &&
                            {
                                let interest = __CALLSITE.interest();
                                !interest.is_never() &&
                                    ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                                        interest)
                            };
                    if enabled {
                        (|value_set: ::tracing::field::ValueSet|
                                    {
                                        let meta = __CALLSITE.metadata();
                                        ::tracing::Event::dispatch(meta, &value_set);
                                        ;
                                    })({
                                #[allow(unused_imports)]
                                use ::tracing::field::{debug, display, Value};
                                __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                                    expr.kind, "binary op") as &dyn ::tracing::field::Value))])
                            });
                    } else { ; }
                };
                let _ = expr;
                match &expr.kind {
                    ExprKind::Binary { op, lhs, rhs } => {
                        if let Some(op_with_overflow) = op.wrapping_to_overflowing()
                            {
                            Ok(Rvalue::BinaryOp(op_with_overflow,
                                    Box::new((self.parse_operand(*lhs)?,
                                            self.parse_operand(*rhs)?))))
                        } else {
                            Err(self.expr_error(expr_id,
                                    "No WithOverflow form of this operator"))
                        }
                    }
                        #[allow(unreachable_patterns)]
                        _ => return Err(self.expr_error(expr_id, "binary op")),
                }
            }
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_offset,
                            *did)
                    }
                    _ => false,
                }
            } => {
            let ptr = self.parse_operand(args[0])?;
            let offset = self.parse_operand(args[1])?;
            Ok(Rvalue::BinaryOp(BinOp::Offset, Box::new((ptr, offset))))
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_ptr_metadata,
                            *did)
                    }
                    _ => false,
                }
            } =>
            Ok(Rvalue::UnaryOp(UnOp::PtrMetadata,
                    self.parse_operand(args[0])?)),
        ExprKind::Borrow { borrow_kind, arg } =>
            Ok(Rvalue::Ref(self.tcx.lifetimes.re_erased, *borrow_kind,
                    self.parse_place(*arg)?)),
        ExprKind::RawBorrow { mutability, arg } =>
            Ok(Rvalue::RawPtr((*mutability).into(), self.parse_place(*arg)?)),
        ExprKind::Binary { op, lhs, rhs } =>
            Ok(Rvalue::BinaryOp(*op,
                    Box::new((self.parse_operand(*lhs)?,
                            self.parse_operand(*rhs)?)))),
        ExprKind::Unary { op, arg } =>
            Ok(Rvalue::UnaryOp(*op, self.parse_operand(*arg)?)),
        ExprKind::Repeat { value, count } =>
            Ok(Rvalue::Repeat(self.parse_operand(*value)?, *count)),
        ExprKind::Cast { source } => {
            let source = self.parse_operand(*source)?;
            let source_ty = source.ty(self.body.local_decls(), self.tcx);
            let cast_kind = mir_cast_kind(source_ty, expr.ty);
            Ok(Rvalue::Cast(cast_kind, source, expr.ty))
        }
        ExprKind::Tuple { fields } =>
            Ok(Rvalue::Aggregate(Box::new(AggregateKind::Tuple),
                    fields.iter().map(|e|
                                    self.parse_operand(*e)).collect::<Result<_, _>>()?)),
        ExprKind::Array { fields } => {
            let elem_ty =
                expr.ty.builtin_index().expect("ty must be an array");
            Ok(Rvalue::Aggregate(Box::new(AggregateKind::Array(elem_ty)),
                    fields.iter().map(|e|
                                    self.parse_operand(*e)).collect::<Result<_, _>>()?))
        }
        ExprKind::Adt(AdtExpr { adt_def, variant_index, args, fields, .. }) =>
            {
            let is_union = adt_def.is_union();
            let active_field_index = is_union.then(|| fields[0].name);
            Ok(Rvalue::Aggregate(Box::new(AggregateKind::Adt(adt_def.did(),
                            *variant_index, args, None, active_field_index)),
                    fields.iter().map(|f|
                                    self.parse_operand(f.expr)).collect::<Result<_, _>>()?))
        }
        _ =>
            self.parse_operand(expr_id).map(|op|
                    Rvalue::Use(op,
                        WithRetag::Yes)),
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "rvalue")),
    }
}parse_by_kind!(self, expr_id, expr, "rvalue",
303            @call(mir_discriminant, args) => self.parse_place(args[0]).map(Rvalue::Discriminant),
304            @call(mir_cast_transmute, args) => {
305                let source = self.parse_operand(args[0])?;
306                Ok(Rvalue::Cast(CastKind::Transmute, source, expr.ty))
307            },
308            @call(mir_cast_ptr_to_ptr, args) => {
309                let source = self.parse_operand(args[0])?;
310                Ok(Rvalue::Cast(CastKind::PtrToPtr, source, expr.ty))
311            },
312            @call(mir_cast_unsize, args) => {
313                let source = self.parse_operand(args[0])?;
314                let kind = CastKind::PointerCoercion(ty::adjustment::PointerCoercion::Unsize, CoercionSource::AsCast);
315                Ok(Rvalue::Cast(kind, source, expr.ty))
316            },
317            @call(mir_cast, args) => {
318                let source = self.parse_operand(args[0])?;
319                Ok(Rvalue::Cast(self.parse_cast_kind(args[1])?, source, expr.ty))
320            },
321            @call(mir_checked, args) => {
322                parse_by_kind!(self, args[0], _, "binary op",
323                    ExprKind::Binary { op, lhs, rhs } => {
324                        if let Some(op_with_overflow) = op.wrapping_to_overflowing() {
325                            Ok(Rvalue::BinaryOp(
326                                op_with_overflow, Box::new((self.parse_operand(*lhs)?, self.parse_operand(*rhs)?))
327                            ))
328                        } else {
329                            Err(self.expr_error(expr_id, "No WithOverflow form of this operator"))
330                        }
331                    },
332                )
333            },
334            @call(mir_offset, args) => {
335                let ptr = self.parse_operand(args[0])?;
336                let offset = self.parse_operand(args[1])?;
337                Ok(Rvalue::BinaryOp(BinOp::Offset, Box::new((ptr, offset))))
338            },
339            @call(mir_ptr_metadata, args) => Ok(Rvalue::UnaryOp(UnOp::PtrMetadata, self.parse_operand(args[0])?)),
340            ExprKind::Borrow { borrow_kind, arg } => Ok(
341                Rvalue::Ref(self.tcx.lifetimes.re_erased, *borrow_kind, self.parse_place(*arg)?)
342            ),
343            ExprKind::RawBorrow { mutability, arg } => Ok(
344                Rvalue::RawPtr((*mutability).into(), self.parse_place(*arg)?)
345            ),
346            ExprKind::Binary { op, lhs, rhs } =>  Ok(
347                Rvalue::BinaryOp(*op, Box::new((self.parse_operand(*lhs)?, self.parse_operand(*rhs)?)))
348            ),
349            ExprKind::Unary { op, arg } => Ok(
350                Rvalue::UnaryOp(*op, self.parse_operand(*arg)?)
351            ),
352            ExprKind::Repeat { value, count } => Ok(
353                Rvalue::Repeat(self.parse_operand(*value)?, *count)
354            ),
355            ExprKind::Cast { source } => {
356                let source = self.parse_operand(*source)?;
357                let source_ty = source.ty(self.body.local_decls(), self.tcx);
358                let cast_kind = mir_cast_kind(source_ty, expr.ty);
359                Ok(Rvalue::Cast(cast_kind, source, expr.ty))
360            },
361            ExprKind::Tuple { fields } => Ok(
362                Rvalue::Aggregate(
363                    Box::new(AggregateKind::Tuple),
364                    fields.iter().map(|e| self.parse_operand(*e)).collect::<Result<_, _>>()?
365                )
366            ),
367            ExprKind::Array { fields } => {
368                let elem_ty = expr.ty.builtin_index().expect("ty must be an array");
369                Ok(Rvalue::Aggregate(
370                    Box::new(AggregateKind::Array(elem_ty)),
371                    fields.iter().map(|e| self.parse_operand(*e)).collect::<Result<_, _>>()?
372                ))
373            },
374            ExprKind::Adt(AdtExpr { adt_def, variant_index, args, fields, .. }) => {
375                let is_union = adt_def.is_union();
376                let active_field_index = is_union.then(|| fields[0].name);
377
378                Ok(Rvalue::Aggregate(
379                    Box::new(AggregateKind::Adt(adt_def.did(), *variant_index, args, None, active_field_index)),
380                    fields.iter().map(|f| self.parse_operand(f.expr)).collect::<Result<_, _>>()?
381                ))
382            },
383            _ => self.parse_operand(expr_id).map(|op| Rvalue::Use(op, WithRetag::Yes)),
384        )
385    }
386
387    pub(crate) fn parse_operand(&self, expr_id: ExprId) -> PResult<Operand<'tcx>> {
388        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:388",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(388u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "operand") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let expr = expr;
    match &expr.kind {
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_move, *did)
                    }
                    _ => false,
                }
            } => self.parse_place(args[0]).map(Operand::Move),
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_static,
                            *did)
                    }
                    _ => false,
                }
            } => self.parse_static(args[0]),
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_static_mut,
                            *did)
                    }
                    _ => false,
                }
            } => self.parse_static(args[0]),
        ExprKind::Literal { .. } | ExprKind::NamedConst { .. } |
            ExprKind::NonHirLiteral { .. } | ExprKind::ZstLiteral { .. } |
            ExprKind::ConstParam { .. } | ExprKind::ConstBlock { .. } => {
            Ok(Operand::Constant(Box::new(as_constant_inner(expr, |_| None,
                            self.tcx))))
        }
        _ =>
            self.parse_place(expr_id).map(Operand::Copy),
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "operand")),
    }
}parse_by_kind!(self, expr_id, expr, "operand",
389            @call(mir_move, args) => self.parse_place(args[0]).map(Operand::Move),
390            @call(mir_static, args) => self.parse_static(args[0]),
391            @call(mir_static_mut, args) => self.parse_static(args[0]),
392            ExprKind::Literal { .. }
393            | ExprKind::NamedConst { .. }
394            | ExprKind::NonHirLiteral { .. }
395            | ExprKind::ZstLiteral { .. }
396            | ExprKind::ConstParam { .. }
397            | ExprKind::ConstBlock { .. } => {
398                Ok(Operand::Constant(Box::new(
399                    as_constant_inner(expr, |_| None, self.tcx)
400                )))
401            },
402            _ => self.parse_place(expr_id).map(Operand::Copy),
403        )
404    }
405
406    fn parse_place(&self, expr_id: ExprId) -> PResult<Place<'tcx>> {
407        self.parse_place_inner(expr_id).map(|(x, _)| x)
408    }
409
410    fn parse_place_inner(&self, expr_id: ExprId) -> PResult<(Place<'tcx>, PlaceTy<'tcx>)> {
411        let (parent, proj) = {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:411",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(411u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "place") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let expr = expr;
    match &expr.kind {
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_field,
                            *did)
                    }
                    _ => false,
                }
            } => {
            let (parent, place_ty) = self.parse_place_inner(args[0])?;
            let field =
                FieldIdx::from_u32(self.parse_integer_literal(args[1])? as
                        u32);
            let field_ty =
                PlaceTy::field_ty(self.tcx, place_ty.ty,
                        place_ty.variant_index, field).skip_norm_wip();
            let proj = PlaceElem::Field(field, field_ty);
            let place = parent.project_deeper(&[proj], self.tcx);
            return Ok((place, PlaceTy::from_ty(field_ty)));
        }
        ExprKind::Call { ty, fun: _, args: args, .. } if
            {
                match ty.kind() {
                    ty::FnDef(did, _) => {
                        self.tcx.is_diagnostic_item(rustc_span::sym::mir_variant,
                            *did)
                    }
                    _ => false,
                }
            } => {
            (args[0],
                PlaceElem::Downcast(None,
                    VariantIdx::from_u32(self.parse_integer_literal(args[1])? as
                            u32)))
        }
        ExprKind::Deref { arg } => {
            {
                let expr_id = self.preparse(*arg);
                let expr = &self.thir[expr_id];
                {
                    use ::tracing::__macro_support::Callsite as _;
                    static __CALLSITE: ::tracing::callsite::DefaultCallsite =
                        {
                            static META: ::tracing::Metadata<'static> =
                                {
                                    ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:428",
                                        "rustc_mir_build::builder::custom::parse::instruction",
                                        ::tracing::Level::DEBUG,
                                        ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                                        ::tracing_core::__macro_support::Option::Some(428u32),
                                        ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                                        ::tracing_core::field::FieldSet::new(&["message"],
                                            ::tracing_core::callsite::Identifier(&__CALLSITE)),
                                        ::tracing::metadata::Kind::EVENT)
                                };
                            ::tracing::callsite::DefaultCallsite::new(&META)
                        };
                    let enabled =
                        ::tracing::Level::DEBUG <=
                                    ::tracing::level_filters::STATIC_MAX_LEVEL &&
                                ::tracing::Level::DEBUG <=
                                    ::tracing::level_filters::LevelFilter::current() &&
                            {
                                let interest = __CALLSITE.interest();
                                !interest.is_never() &&
                                    ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                                        interest)
                            };
                    if enabled {
                        (|value_set: ::tracing::field::ValueSet|
                                    {
                                        let meta = __CALLSITE.metadata();
                                        ::tracing::Event::dispatch(meta, &value_set);
                                        ;
                                    })({
                                #[allow(unused_imports)]
                                use ::tracing::field::{debug, display, Value};
                                __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                                    expr.kind, "does not matter") as
                                                            &dyn ::tracing::field::Value))])
                            });
                    } else { ; }
                };
                let _ = expr;
                match &expr.kind {
                    ExprKind::Call { ty, fun: _, args: args, .. } if
                        {
                            match ty.kind() {
                                ty::FnDef(did, _) => {
                                    self.tcx.is_diagnostic_item(rustc_span::sym::mir_make_place,
                                        *did)
                                }
                                _ => false,
                            }
                        } => return self.parse_place_inner(args[0]),
                    _ =>
                        (*arg,
                            PlaceElem::Deref),
                        #[allow(unreachable_patterns)]
                        _ =>
                        return Err(self.expr_error(expr_id, "does not matter")),
                }
            }
        }
        ExprKind::Index { lhs, index } =>
            (*lhs, PlaceElem::Index(self.parse_local(*index)?)),
        ExprKind::Field { lhs, name: field, .. } =>
            (*lhs, PlaceElem::Field(*field, expr.ty)),
        _ => {
            let place = self.parse_local(expr_id).map(Place::from)?;
            return Ok((place, PlaceTy::from_ty(expr.ty)))
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "place")),
    }
}parse_by_kind!(self, expr_id, expr, "place",
412            @call(mir_field, args) => {
413                let (parent, place_ty) = self.parse_place_inner(args[0])?;
414                let field = FieldIdx::from_u32(self.parse_integer_literal(args[1])? as u32);
415                let field_ty = PlaceTy::field_ty(self.tcx, place_ty.ty, place_ty.variant_index, field)
416                    .skip_norm_wip();
417                let proj = PlaceElem::Field(field, field_ty);
418                let place = parent.project_deeper(&[proj], self.tcx);
419                return Ok((place, PlaceTy::from_ty(field_ty)));
420            },
421            @call(mir_variant, args) => {
422                (args[0], PlaceElem::Downcast(
423                    None,
424                    VariantIdx::from_u32(self.parse_integer_literal(args[1])? as u32)
425                ))
426            },
427            ExprKind::Deref { arg } => {
428                parse_by_kind!(self, *arg, _, "does not matter",
429                    @call(mir_make_place, args) => return self.parse_place_inner(args[0]),
430                    _ => (*arg, PlaceElem::Deref),
431                )
432            },
433            ExprKind::Index { lhs, index } => (*lhs, PlaceElem::Index(self.parse_local(*index)?)),
434            ExprKind::Field { lhs, name: field, .. } => (*lhs, PlaceElem::Field(*field, expr.ty)),
435            _ => {
436                let place = self.parse_local(expr_id).map(Place::from)?;
437                return Ok((place, PlaceTy::from_ty(expr.ty)))
438            },
439        );
440        let (parent, ty) = self.parse_place_inner(parent)?;
441        let place = parent.project_deeper(&[proj], self.tcx);
442        let ty = ty.projection_ty(self.tcx, proj);
443        Ok((place, ty))
444    }
445
446    fn parse_local(&self, expr_id: ExprId) -> PResult<Local> {
447        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:447",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(447u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "local") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::VarRef { id } =>
            Ok(self.local_map[id]),
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "local")),
    }
}parse_by_kind!(self, expr_id, _, "local",
448            ExprKind::VarRef { id } => Ok(self.local_map[id]),
449        )
450    }
451
452    fn parse_block(&self, expr_id: ExprId) -> PResult<BasicBlock> {
453        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:453",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(453u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "basic block") as
                                                &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::VarRef { id } =>
            Ok(self.block_map[id]),
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "basic block")),
    }
}parse_by_kind!(self, expr_id, _, "basic block",
454            ExprKind::VarRef { id } => Ok(self.block_map[id]),
455        )
456    }
457
458    fn parse_static(&self, expr_id: ExprId) -> PResult<Operand<'tcx>> {
459        let expr_id = {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:459",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(459u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "static") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let _ = expr;
    match &expr.kind {
        ExprKind::Deref { arg } =>
            *arg,
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "static")),
    }
}parse_by_kind!(self, expr_id, _, "static",
460            ExprKind::Deref { arg } => *arg,
461        );
462
463        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:463",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(463u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "static") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let expr = expr;
    match &expr.kind {
        ExprKind::StaticRef { alloc_id, ty, .. } => {
            let const_val =
                ConstValue::Scalar(Scalar::from_pointer((*alloc_id).into(),
                        &self.tcx));
            let const_ = Const::Val(const_val, *ty);
            Ok(Operand::Constant(Box::new(ConstOperand {
                            span: expr.span,
                            user_ty: None,
                            const_,
                        })))
        }
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "static")),
    }
}parse_by_kind!(self, expr_id, expr, "static",
464            ExprKind::StaticRef { alloc_id, ty, .. } => {
465                let const_val =
466                    ConstValue::Scalar(Scalar::from_pointer((*alloc_id).into(), &self.tcx));
467                let const_ = Const::Val(const_val, *ty);
468
469                Ok(Operand::Constant(Box::new(ConstOperand {
470                    span: expr.span,
471                    user_ty: None,
472                    const_
473                })))
474            },
475        )
476    }
477
478    fn parse_integer_literal(&self, expr_id: ExprId) -> PResult<u128> {
479        {
    let expr_id = self.preparse(expr_id);
    let expr = &self.thir[expr_id];
    {
        use ::tracing::__macro_support::Callsite as _;
        static __CALLSITE: ::tracing::callsite::DefaultCallsite =
            {
                static META: ::tracing::Metadata<'static> =
                    {
                        ::tracing_core::metadata::Metadata::new("event /rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs:479",
                            "rustc_mir_build::builder::custom::parse::instruction",
                            ::tracing::Level::DEBUG,
                            ::tracing_core::__macro_support::Option::Some("/rustc-dev/923c95cdf5ba65cea505aa2ea829f578e1506ed8/compiler/rustc_mir_build/src/builder/custom/parse/instruction.rs"),
                            ::tracing_core::__macro_support::Option::Some(479u32),
                            ::tracing_core::__macro_support::Option::Some("rustc_mir_build::builder::custom::parse::instruction"),
                            ::tracing_core::field::FieldSet::new(&["message"],
                                ::tracing_core::callsite::Identifier(&__CALLSITE)),
                            ::tracing::metadata::Kind::EVENT)
                    };
                ::tracing::callsite::DefaultCallsite::new(&META)
            };
        let enabled =
            ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::STATIC_MAX_LEVEL &&
                    ::tracing::Level::DEBUG <=
                        ::tracing::level_filters::LevelFilter::current() &&
                {
                    let interest = __CALLSITE.interest();
                    !interest.is_never() &&
                        ::tracing::__macro_support::__is_enabled(__CALLSITE.metadata(),
                            interest)
                };
        if enabled {
            (|value_set: ::tracing::field::ValueSet|
                        {
                            let meta = __CALLSITE.metadata();
                            ::tracing::Event::dispatch(meta, &value_set);
                            ;
                        })({
                    #[allow(unused_imports)]
                    use ::tracing::field::{debug, display, Value};
                    __CALLSITE.metadata().fields().value_set_all(&[(::tracing::__macro_support::Option::Some(&format_args!("Trying to parse {0:?} as {1}",
                                                        expr.kind, "constant") as &dyn ::tracing::field::Value))])
                });
        } else { ; }
    };
    let expr = expr;
    match &expr.kind {
        ExprKind::Literal { .. } | ExprKind::NamedConst { .. } |
            ExprKind::NonHirLiteral { .. } | ExprKind::ConstBlock { .. } =>
            Ok({
                    let value = as_constant_inner(expr, |_| None, self.tcx);
                    value.const_.eval_bits(self.tcx, self.typing_env)
                }),
            #[allow(unreachable_patterns)]
            _ => return Err(self.expr_error(expr_id, "constant")),
    }
}parse_by_kind!(self, expr_id, expr, "constant",
480            ExprKind::Literal { .. }
481            | ExprKind::NamedConst { .. }
482            | ExprKind::NonHirLiteral { .. }
483            | ExprKind::ConstBlock { .. } => Ok({
484                let value = as_constant_inner(expr, |_| None, self.tcx);
485                value.const_.eval_bits(self.tcx, self.typing_env)
486            }),
487        )
488    }
489}