address review again
This commit is contained in:
parent
ba00189d8e
commit
6af8fb7936
20 changed files with 119 additions and 520 deletions
86
Cargo.lock
86
Cargo.lock
|
@ -288,7 +288,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cargo"
|
name = "cargo"
|
||||||
version = "0.65.0"
|
version = "0.66.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"atty",
|
"atty",
|
||||||
|
@ -299,7 +299,6 @@ dependencies = [
|
||||||
"cargo-util",
|
"cargo-util",
|
||||||
"clap",
|
"clap",
|
||||||
"crates-io",
|
"crates-io",
|
||||||
"crossbeam-utils",
|
|
||||||
"curl",
|
"curl",
|
||||||
"curl-sys",
|
"curl-sys",
|
||||||
"env_logger 0.9.0",
|
"env_logger 0.9.0",
|
||||||
|
@ -323,7 +322,6 @@ dependencies = [
|
||||||
"libgit2-sys",
|
"libgit2-sys",
|
||||||
"log",
|
"log",
|
||||||
"memchr",
|
"memchr",
|
||||||
"num_cpus",
|
|
||||||
"opener",
|
"opener",
|
||||||
"openssl",
|
"openssl",
|
||||||
"os_info",
|
"os_info",
|
||||||
|
@ -383,6 +381,7 @@ dependencies = [
|
||||||
name = "cargo-miri"
|
name = "cargo-miri"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"cargo_metadata 0.15.0",
|
||||||
"directories",
|
"directories",
|
||||||
"rustc-workspace-hack",
|
"rustc-workspace-hack",
|
||||||
"rustc_version",
|
"rustc_version",
|
||||||
|
@ -431,6 +430,7 @@ dependencies = [
|
||||||
"termcolor",
|
"termcolor",
|
||||||
"toml_edit",
|
"toml_edit",
|
||||||
"url",
|
"url",
|
||||||
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1003,16 +1003,6 @@ dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "ctor"
|
|
||||||
version = "0.1.22"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f877be4f7c9f246b183111634f75baa039715e3f46ce860677d3b19a69fb229c"
|
|
||||||
dependencies = [
|
|
||||||
"quote",
|
|
||||||
"syn",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "curl"
|
name = "curl"
|
||||||
version = "0.4.43"
|
version = "0.4.43"
|
||||||
|
@ -1570,9 +1560,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "git2"
|
name = "git2"
|
||||||
version = "0.14.4"
|
version = "0.15.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d0155506aab710a86160ddb504a480d2964d7ab5b9e62419be69e0032bc5931c"
|
checksum = "2994bee4a3a6a51eb90c218523be382fd7ea09b16380b9312e9dbe955ff7c7d1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -1585,9 +1575,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "git2-curl"
|
name = "git2-curl"
|
||||||
version = "0.15.0"
|
version = "0.16.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1ee51709364c341fbb6fe2a385a290fb9196753bdde2fc45447d27cd31b11b13"
|
checksum = "ed817a00721e2f8037ba722e60358d4956dae9cca10315fc982f967907d3b0cd"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"curl",
|
"curl",
|
||||||
"git2",
|
"git2",
|
||||||
|
@ -1945,10 +1935,29 @@ dependencies = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libgit2-sys"
|
name = "libffi"
|
||||||
version = "0.13.4+1.4.2"
|
version = "3.0.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d0fa6563431ede25f5cc7f6d803c6afbc1c5d3ad3d4925d12c882bf2b526f5d1"
|
checksum = "1e454b3efb16fba3b17810ae5e41df02b649e564ab3c5a34b3b93ed07ad287e6"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"libffi-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libffi-sys"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ab4106b7f09d7b87d021334d5618fac1dfcfb824d4c5fe111ff0074dfd242e15"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "libgit2-sys"
|
||||||
|
version = "0.14.0+1.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "47a00859c70c8a4f7218e6d1cc32875c4b55f6799445b842b0d8ed5e4c3d959b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -2238,6 +2247,8 @@ dependencies = [
|
||||||
"getrandom 0.2.0",
|
"getrandom 0.2.0",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"libc",
|
"libc",
|
||||||
|
"libffi",
|
||||||
|
"libloading",
|
||||||
"log",
|
"log",
|
||||||
"measureme",
|
"measureme",
|
||||||
"rand 0.8.5",
|
"rand 0.8.5",
|
||||||
|
@ -2410,15 +2421,6 @@ version = "6.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
|
checksum = "8e22443d1643a904602595ba1cd8f7d896afe56d26712531c5ff73a15b2fbf64"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "output_vt100"
|
|
||||||
version = "0.1.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "628223faebab4e3e40667ee0b2336d34a5b960ff60ea743ddfdbcf7770bcfb66"
|
|
||||||
dependencies = [
|
|
||||||
"winapi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "owo-colors"
|
name = "owo-colors"
|
||||||
version = "3.4.0"
|
version = "3.4.0"
|
||||||
|
@ -2660,18 +2662,6 @@ version = "0.1.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pretty_assertions"
|
|
||||||
version = "1.3.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "a25e9bcb20aa780fd0bb16b72403a9064d6b3f22f026946029acb941a50af755"
|
|
||||||
dependencies = [
|
|
||||||
"ctor",
|
|
||||||
"diff",
|
|
||||||
"output_vt100",
|
|
||||||
"yansi",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pretty_env_logger"
|
name = "pretty_env_logger"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
|
@ -4550,9 +4540,9 @@ checksum = "da73c8f77aebc0e40c300b93f0a5f1bece7a248a36eee287d4e095f35c7b7d6e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "snapbox"
|
name = "snapbox"
|
||||||
version = "0.2.10"
|
version = "0.3.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "767a1d5da232b6959cd1bd5c9e8db8a7cce09c3038e89deedb49a549a2aefd93"
|
checksum = "44d199ccf8f606592df2d145db26f2aa45344e23c64b074cc5a4047f1d99b0f7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"concolor",
|
"concolor",
|
||||||
"content_inspector",
|
"content_inspector",
|
||||||
|
@ -4568,9 +4558,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "snapbox-macros"
|
name = "snapbox-macros"
|
||||||
version = "0.2.1"
|
version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c01dea7e04cbb27ef4c86e9922184608185f7cd95c1763bc30d727cda4a5e930"
|
checksum = "8a253e6f894cfa440cba00600a249fa90869d8e0ec45ab274a456e043a0ce8f2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "socket2"
|
name = "socket2"
|
||||||
|
@ -5049,14 +5039,16 @@ checksum = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ui_test"
|
name = "ui_test"
|
||||||
version = "0.1.0"
|
version = "0.3.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7d1f546a5883ae78da735bba529ec1116661e2f73582f23920d994dc97da3a22"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo_metadata 0.15.0",
|
"cargo_metadata 0.15.0",
|
||||||
"color-eyre",
|
"color-eyre",
|
||||||
"colored",
|
"colored",
|
||||||
"crossbeam",
|
"crossbeam",
|
||||||
|
"diff",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"pretty_assertions",
|
|
||||||
"regex",
|
"regex",
|
||||||
"rustc_version",
|
"rustc_version",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
|
@ -38,6 +38,16 @@ where
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn renumber_regions_in_mir_constant<'tcx>(
|
||||||
|
infcx: &InferCtxt<'_, 'tcx>,
|
||||||
|
value: ConstantKind<'tcx>,
|
||||||
|
) -> ConstantKind<'tcx> {
|
||||||
|
infcx.tcx.super_fold_regions(value, |_region, _depth| {
|
||||||
|
let origin = NllRegionVariableOrigin::Existential { from_forall: false };
|
||||||
|
infcx.next_nll_region_var(origin)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
struct NllVisitor<'a, 'tcx> {
|
struct NllVisitor<'a, 'tcx> {
|
||||||
infcx: &'a InferCtxt<'a, 'tcx>,
|
infcx: &'a InferCtxt<'a, 'tcx>,
|
||||||
}
|
}
|
||||||
|
@ -49,6 +59,13 @@ impl<'a, 'tcx> NllVisitor<'a, 'tcx> {
|
||||||
{
|
{
|
||||||
renumber_regions(self.infcx, value)
|
renumber_regions(self.infcx, value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn renumber_regions_in_mir_constant(
|
||||||
|
&mut self,
|
||||||
|
value: ConstantKind<'tcx>,
|
||||||
|
) -> ConstantKind<'tcx> {
|
||||||
|
renumber_regions_in_mir_constant(self.infcx, value)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx> MutVisitor<'tcx> for NllVisitor<'a, 'tcx> {
|
impl<'a, 'tcx> MutVisitor<'tcx> for NllVisitor<'a, 'tcx> {
|
||||||
|
@ -81,29 +98,7 @@ impl<'a, 'tcx> MutVisitor<'tcx> for NllVisitor<'a, 'tcx> {
|
||||||
#[instrument(skip(self), level = "debug")]
|
#[instrument(skip(self), level = "debug")]
|
||||||
fn visit_constant(&mut self, constant: &mut Constant<'tcx>, _location: Location) {
|
fn visit_constant(&mut self, constant: &mut Constant<'tcx>, _location: Location) {
|
||||||
let literal = constant.literal;
|
let literal = constant.literal;
|
||||||
debug!("{:#?}", literal);
|
constant.literal = self.renumber_regions_in_mir_constant(literal);
|
||||||
|
|
||||||
match literal {
|
|
||||||
ConstantKind::Ty(ct) => {
|
|
||||||
let ct = self.renumber_regions(ct);
|
|
||||||
debug!("renumbered ct {:#?}", ct);
|
|
||||||
|
|
||||||
constant.literal = ConstantKind::Ty(ct);
|
|
||||||
}
|
|
||||||
ConstantKind::Unevaluated(uv, ty) => {
|
|
||||||
debug!("uv: {:#?}, ty: {:#?}", uv, ty);
|
|
||||||
let uv = self.renumber_regions(uv);
|
|
||||||
debug!("uv: {:#?}", uv);
|
|
||||||
let ty = self.renumber_regions(ty);
|
|
||||||
debug!("{:#?}", ty);
|
|
||||||
constant.literal = ConstantKind::Unevaluated(uv, ty);
|
|
||||||
}
|
|
||||||
ConstantKind::Val(val, ty) => {
|
|
||||||
let ty = self.renumber_regions(ty);
|
|
||||||
constant.literal = ConstantKind::Val(val, ty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
debug!("constant: {:#?}", constant);
|
debug!("constant: {:#?}", constant);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -354,7 +354,9 @@ impl<'a, 'b, 'tcx> Visitor<'tcx> for TypeVerifier<'a, 'b, 'tcx> {
|
||||||
let tcx = self.tcx();
|
let tcx = self.tcx();
|
||||||
let maybe_uneval = match constant.literal {
|
let maybe_uneval = match constant.literal {
|
||||||
ConstantKind::Ty(ct) => match ct.kind() {
|
ConstantKind::Ty(ct) => match ct.kind() {
|
||||||
ty::ConstKind::Unevaluated(uv) => Some(uv.expand()),
|
ty::ConstKind::Unevaluated(_) => {
|
||||||
|
bug!("should not encounter unevaluated ConstantKind::Ty here, got {:?}", ct)
|
||||||
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
},
|
},
|
||||||
ConstantKind::Unevaluated(uv, _) => Some(uv),
|
ConstantKind::Unevaluated(uv, _) => Some(uv),
|
||||||
|
|
|
@ -121,25 +121,7 @@ pub(crate) fn codegen_constant<'tcx>(
|
||||||
ConstKind::Value(valtree) => {
|
ConstKind::Value(valtree) => {
|
||||||
(fx.tcx.valtree_to_const_val((const_.ty(), valtree)), const_.ty())
|
(fx.tcx.valtree_to_const_val((const_.ty(), valtree)), const_.ty())
|
||||||
}
|
}
|
||||||
ConstKind::Unevaluated(ty::Unevaluated { def, substs, promoted })
|
ConstKind::Unevaluated(_) => bug!("expected constant to be evaluated at this stage"),
|
||||||
if fx.tcx.is_static(def.did) =>
|
|
||||||
{
|
|
||||||
assert!(substs.is_empty());
|
|
||||||
assert_eq!(promoted, ());
|
|
||||||
return codegen_static_ref(fx, def.did, fx.layout_of(const_.ty())).to_cvalue(fx);
|
|
||||||
}
|
|
||||||
ConstKind::Unevaluated(unevaluated) => {
|
|
||||||
match fx.tcx.const_eval_resolve(ParamEnv::reveal_all(), unevaluated.expand(), None)
|
|
||||||
{
|
|
||||||
Ok(const_val) => (const_val, const_.ty()),
|
|
||||||
Err(_) => {
|
|
||||||
span_bug!(
|
|
||||||
constant.span,
|
|
||||||
"erroneous constant not captured by required_consts"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ConstKind::Param(_)
|
ConstKind::Param(_)
|
||||||
| ConstKind::Infer(_)
|
| ConstKind::Infer(_)
|
||||||
| ConstKind::Bound(_, _)
|
| ConstKind::Bound(_, _)
|
||||||
|
|
|
@ -564,8 +564,16 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
throw_inval!(AlreadyReported(reported))
|
throw_inval!(AlreadyReported(reported))
|
||||||
}
|
}
|
||||||
ty::ConstKind::Unevaluated(uv) => {
|
ty::ConstKind::Unevaluated(uv) => {
|
||||||
|
// NOTE: We evaluate to a `ValTree` here as a check to ensure
|
||||||
|
// we're working with valid constants, even though we never need it.
|
||||||
let instance = self.resolve(uv.def, uv.substs)?;
|
let instance = self.resolve(uv.def, uv.substs)?;
|
||||||
Ok(self.eval_to_allocation(GlobalId { instance, promoted: None })?.into())
|
let cid = GlobalId { instance, promoted: None };
|
||||||
|
let _valtree = self
|
||||||
|
.tcx
|
||||||
|
.eval_to_valtree(self.param_env.and(cid))?
|
||||||
|
.unwrap_or_else(|| bug!("unable to create ValTree for {:?}", uv));
|
||||||
|
|
||||||
|
Ok(self.eval_to_allocation(cid)?.into())
|
||||||
}
|
}
|
||||||
ty::ConstKind::Bound(..) | ty::ConstKind::Infer(..) => {
|
ty::ConstKind::Bound(..) | ty::ConstKind::Infer(..) => {
|
||||||
span_bug!(self.cur_span(), "const_to_op: Unexpected ConstKind {:?}", c)
|
span_bug!(self.cur_span(), "const_to_op: Unexpected ConstKind {:?}", c)
|
||||||
|
@ -578,16 +586,6 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tries to evaluate an unevaluated constant from the MIR (and not the type-system).
|
|
||||||
#[inline]
|
|
||||||
pub fn uneval_to_op(
|
|
||||||
&self,
|
|
||||||
uneval: &ty::Unevaluated<'tcx>,
|
|
||||||
) -> InterpResult<'tcx, OpTy<'tcx, M::Provenance>> {
|
|
||||||
let instance = self.resolve(uneval.def, uneval.substs)?;
|
|
||||||
Ok(self.eval_to_allocation(GlobalId { instance, promoted: uneval.promoted })?.into())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn mir_const_to_op(
|
pub fn mir_const_to_op(
|
||||||
&self,
|
&self,
|
||||||
val: &mir::ConstantKind<'tcx>,
|
val: &mir::ConstantKind<'tcx>,
|
||||||
|
@ -596,7 +594,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> {
|
||||||
match val {
|
match val {
|
||||||
mir::ConstantKind::Ty(ct) => self.const_to_op(*ct, layout),
|
mir::ConstantKind::Ty(ct) => self.const_to_op(*ct, layout),
|
||||||
mir::ConstantKind::Val(val, ty) => self.const_val_to_op(*val, *ty, layout),
|
mir::ConstantKind::Val(val, ty) => self.const_val_to_op(*val, *ty, layout),
|
||||||
mir::ConstantKind::Unevaluated(uv, _) => self.uneval_to_op(uv),
|
mir::ConstantKind::Unevaluated(uv, _) => {
|
||||||
|
let instance = self.resolve(uv.def, uv.substs)?;
|
||||||
|
Ok(self.eval_to_allocation(GlobalId { instance, promoted: uv.promoted })?.into())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -346,6 +346,8 @@ where
|
||||||
};
|
};
|
||||||
|
|
||||||
// Check the qualifs of the value of `const` items.
|
// Check the qualifs of the value of `const` items.
|
||||||
|
// FIXME(valtrees): check whether const qualifs should behave the same
|
||||||
|
// way for type and mir constants.
|
||||||
let uneval = match constant.literal {
|
let uneval = match constant.literal {
|
||||||
ConstantKind::Ty(ct) if matches!(ct.kind(), ty::ConstKind::Unevaluated(_)) => {
|
ConstantKind::Ty(ct) if matches!(ct.kind(), ty::ConstKind::Unevaluated(_)) => {
|
||||||
let ty::ConstKind::Unevaluated(uv) = ct.kind() else { unreachable!() };
|
let ty::ConstKind::Unevaluated(uv) = ct.kind() else { unreachable!() };
|
||||||
|
|
|
@ -2090,15 +2090,6 @@ impl<'tcx> Constant<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> ConstantKind<'tcx> {
|
impl<'tcx> ConstantKind<'tcx> {
|
||||||
/// Returns `None` if the constant is not trivially safe for use in the type system.
|
|
||||||
#[inline]
|
|
||||||
pub fn const_for_ty(&self) -> Option<ty::Const<'tcx>> {
|
|
||||||
match self {
|
|
||||||
ConstantKind::Ty(c) => Some(*c),
|
|
||||||
ConstantKind::Val(..) | ConstantKind::Unevaluated(..) => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline(always)]
|
#[inline(always)]
|
||||||
pub fn ty(&self) -> Ty<'tcx> {
|
pub fn ty(&self) -> Ty<'tcx> {
|
||||||
match self {
|
match self {
|
||||||
|
@ -2433,14 +2424,14 @@ impl<'tcx> ConstantKind<'tcx> {
|
||||||
debug!("error encountered during evaluation");
|
debug!("error encountered during evaluation");
|
||||||
// Error was handled in `const_eval_resolve`. Here we just create a
|
// Error was handled in `const_eval_resolve`. Here we just create a
|
||||||
// new unevaluated const and error hard later in codegen
|
// new unevaluated const and error hard later in codegen
|
||||||
Self::Ty(tcx.mk_const(ty::ConstS {
|
Self::Unevaluated(
|
||||||
kind: ty::ConstKind::Unevaluated(ty::Unevaluated {
|
ty::Unevaluated {
|
||||||
def: def.to_global(),
|
def: def.to_global(),
|
||||||
substs: InternalSubsts::identity_for_item(tcx, def.did.to_def_id()),
|
substs: InternalSubsts::identity_for_item(tcx, def.did.to_def_id()),
|
||||||
promoted: (),
|
promoted: None,
|
||||||
}),
|
},
|
||||||
ty,
|
ty,
|
||||||
}))
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -826,9 +826,9 @@ mod size_asserts {
|
||||||
static_assert_size!(Expr<'_>, 64);
|
static_assert_size!(Expr<'_>, 64);
|
||||||
static_assert_size!(ExprKind<'_>, 40);
|
static_assert_size!(ExprKind<'_>, 40);
|
||||||
#[cfg(not(bootstrap))]
|
#[cfg(not(bootstrap))]
|
||||||
static_assert_size!(Pat<'_>, 64);
|
static_assert_size!(Pat<'_>, 72);
|
||||||
#[cfg(not(bootstrap))]
|
#[cfg(not(bootstrap))]
|
||||||
static_assert_size!(PatKind<'_>, 48);
|
static_assert_size!(PatKind<'_>, 56);
|
||||||
#[cfg(not(bootstrap))]
|
#[cfg(not(bootstrap))]
|
||||||
static_assert_size!(Stmt<'_>, 48);
|
static_assert_size!(Stmt<'_>, 48);
|
||||||
#[cfg(not(bootstrap))]
|
#[cfg(not(bootstrap))]
|
||||||
|
|
|
@ -302,6 +302,17 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||||
{
|
{
|
||||||
value.fold_with(&mut RegionFolder::new(self, &mut f))
|
value.fold_with(&mut RegionFolder::new(self, &mut f))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn super_fold_regions<T>(
|
||||||
|
self,
|
||||||
|
value: T,
|
||||||
|
mut f: impl FnMut(ty::Region<'tcx>, ty::DebruijnIndex) -> ty::Region<'tcx>,
|
||||||
|
) -> T
|
||||||
|
where
|
||||||
|
T: TypeSuperFoldable<'tcx>,
|
||||||
|
{
|
||||||
|
value.super_fold_with(&mut RegionFolder::new(self, &mut f))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Folds over the substructure of a type, visiting its component
|
/// Folds over the substructure of a type, visiting its component
|
||||||
|
|
|
@ -2,26 +2,18 @@
|
||||||
|
|
||||||
use crate::build::{parse_float_into_constval, Builder};
|
use crate::build::{parse_float_into_constval, Builder};
|
||||||
use rustc_ast as ast;
|
use rustc_ast as ast;
|
||||||
use rustc_hir::def_id::DefId;
|
|
||||||
use rustc_middle::mir::interpret::{
|
use rustc_middle::mir::interpret::{
|
||||||
Allocation, ConstValue, LitToConstError, LitToConstInput, Scalar,
|
Allocation, ConstValue, LitToConstError, LitToConstInput, Scalar,
|
||||||
};
|
};
|
||||||
use rustc_middle::mir::*;
|
use rustc_middle::mir::*;
|
||||||
use rustc_middle::thir::*;
|
use rustc_middle::thir::*;
|
||||||
use rustc_middle::ty::subst::SubstsRef;
|
use rustc_middle::ty::{self, CanonicalUserTypeAnnotation, TyCtxt};
|
||||||
use rustc_middle::ty::{self, CanonicalUserTypeAnnotation, Ty, TyCtxt};
|
|
||||||
use rustc_target::abi::Size;
|
use rustc_target::abi::Size;
|
||||||
|
|
||||||
impl<'a, 'tcx> Builder<'a, 'tcx> {
|
impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||||
/// Compile `expr`, yielding a compile-time constant. Assumes that
|
/// Compile `expr`, yielding a compile-time constant. Assumes that
|
||||||
/// `expr` is a valid compile-time constant!
|
/// `expr` is a valid compile-time constant!
|
||||||
pub(crate) fn as_constant(&mut self, expr: &Expr<'tcx>) -> Constant<'tcx> {
|
pub(crate) fn as_constant(&mut self, expr: &Expr<'tcx>) -> Constant<'tcx> {
|
||||||
let create_uneval_from_def_id =
|
|
||||||
|tcx: TyCtxt<'tcx>, def_id: DefId, ty: Ty<'tcx>, substs: SubstsRef<'tcx>| {
|
|
||||||
let uneval = ty::Unevaluated::new(ty::WithOptConstParam::unknown(def_id), substs);
|
|
||||||
tcx.mk_const(ty::ConstS { kind: ty::ConstKind::Unevaluated(uneval), ty })
|
|
||||||
};
|
|
||||||
|
|
||||||
let this = self;
|
let this = self;
|
||||||
let tcx = this.tcx;
|
let tcx = this.tcx;
|
||||||
let Expr { ty, temp_lifetime: _, span, ref kind } = *expr;
|
let Expr { ty, temp_lifetime: _, span, ref kind } = *expr;
|
||||||
|
@ -73,7 +65,9 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||||
inferred_ty: ty,
|
inferred_ty: ty,
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
let literal = ConstantKind::Ty(create_uneval_from_def_id(tcx, def_id, ty, substs));
|
|
||||||
|
let uneval = ty::Unevaluated::new(ty::WithOptConstParam::unknown(def_id), substs);
|
||||||
|
let literal = ConstantKind::Unevaluated(uneval, ty);
|
||||||
|
|
||||||
Constant { user_ty, span, literal }
|
Constant { user_ty, span, literal }
|
||||||
}
|
}
|
||||||
|
@ -85,7 +79,8 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||||
Constant { user_ty: None, span, literal }
|
Constant { user_ty: None, span, literal }
|
||||||
}
|
}
|
||||||
ExprKind::ConstBlock { did: def_id, substs } => {
|
ExprKind::ConstBlock { did: def_id, substs } => {
|
||||||
let literal = ConstantKind::Ty(create_uneval_from_def_id(tcx, def_id, ty, substs));
|
let uneval = ty::Unevaluated::new(ty::WithOptConstParam::unknown(def_id), substs);
|
||||||
|
let literal = ConstantKind::Unevaluated(uneval, ty);
|
||||||
|
|
||||||
Constant { user_ty: None, span, literal }
|
Constant { user_ty: None, span, literal }
|
||||||
}
|
}
|
||||||
|
|
|
@ -604,13 +604,11 @@ impl<'tcx> Inliner<'tcx> {
|
||||||
// `required_consts`, here we may not only have `ConstKind::Unevaluated`
|
// `required_consts`, here we may not only have `ConstKind::Unevaluated`
|
||||||
// because we are calling `subst_and_normalize_erasing_regions`.
|
// because we are calling `subst_and_normalize_erasing_regions`.
|
||||||
caller_body.required_consts.extend(
|
caller_body.required_consts.extend(
|
||||||
callee_body.required_consts.iter().copied().filter(|&ct| {
|
callee_body.required_consts.iter().copied().filter(|&ct| match ct.literal {
|
||||||
match ct.literal.const_for_ty() {
|
ConstantKind::Ty(_) => {
|
||||||
Some(_) => {
|
bug!("should never encounter ty::Unevaluated in `required_consts`")
|
||||||
bug!("should never encounter ty::Unevaluated in required_consts")
|
|
||||||
}
|
|
||||||
None => true,
|
|
||||||
}
|
}
|
||||||
|
ConstantKind::Val(..) | ConstantKind::Unevaluated(..) => true,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,13 +17,8 @@ impl<'tcx> Visitor<'tcx> for RequiredConstsVisitor<'_, 'tcx> {
|
||||||
let literal = constant.literal;
|
let literal = constant.literal;
|
||||||
match literal {
|
match literal {
|
||||||
ConstantKind::Ty(c) => match c.kind() {
|
ConstantKind::Ty(c) => match c.kind() {
|
||||||
ConstKind::Unevaluated(uv) => {
|
ConstKind::Param(_) => {}
|
||||||
let literal = ConstantKind::Unevaluated(uv.expand(), c.ty());
|
_ => bug!("only ConstKind::Param should be encountered here, got {:#?}", c),
|
||||||
let new_constant =
|
|
||||||
Constant { span: constant.span, user_ty: constant.user_ty, literal };
|
|
||||||
self.required_consts.push(new_constant);
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
},
|
},
|
||||||
ConstantKind::Unevaluated(..) => self.required_consts.push(*constant),
|
ConstantKind::Unevaluated(..) => self.required_consts.push(*constant),
|
||||||
ConstantKind::Val(..) => {}
|
ConstantKind::Val(..) => {}
|
||||||
|
|
|
@ -300,10 +300,7 @@ impl<'a, 'tcx> TypeVisitor<'tcx> for MarkUsedGenericParams<'a, 'tcx> {
|
||||||
ControlFlow::CONTINUE
|
ControlFlow::CONTINUE
|
||||||
}
|
}
|
||||||
ty::ConstKind::Unevaluated(ty::Unevaluated { def, substs, promoted })
|
ty::ConstKind::Unevaluated(ty::Unevaluated { def, substs, promoted })
|
||||||
if matches!(
|
if matches!(self.tcx.def_kind(def.did), DefKind::AnonConst) =>
|
||||||
self.tcx.def_kind(def.did),
|
|
||||||
DefKind::AnonConst | DefKind::InlineConst
|
|
||||||
) =>
|
|
||||||
{
|
{
|
||||||
assert_eq!(promoted, ());
|
assert_eq!(promoted, ());
|
||||||
|
|
||||||
|
|
|
@ -16,10 +16,10 @@
|
||||||
StorageLive(_1); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:9: +2:10
|
StorageLive(_1); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:9: +2:10
|
||||||
StorageLive(_2); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:30
|
StorageLive(_2); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:30
|
||||||
StorageLive(_3); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
|
StorageLive(_3); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
|
||||||
_3 = const FOO; // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
|
_3 = const _; // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $DIR/const_prop_fails_gracefully.rs:7:13: 7:16
|
// + span: $DIR/const_prop_fails_gracefully.rs:8:13: 8:16
|
||||||
// + literal: Const { ty: &i32, val: Unevaluated(FOO, [], ()) }
|
// + literal: Const { ty: &i32, val: Unevaluated(FOO, [], None) }
|
||||||
_2 = &raw const (*_3); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
|
_2 = &raw const (*_3); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:16
|
||||||
_1 = move _2 as usize (PointerExposeAddress); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:39
|
_1 = move _2 as usize (PointerExposeAddress); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:13: +2:39
|
||||||
StorageDead(_2); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:38: +2:39
|
StorageDead(_2); // scope 0 at $DIR/const_prop_fails_gracefully.rs:+2:38: +2:39
|
||||||
|
|
|
@ -8,9 +8,8 @@
|
||||||
|
|
||||||
bb0: {
|
bb0: {
|
||||||
StorageLive(_1); // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
StorageLive(_1); // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
||||||
- _1 = const <bool as NeedsDrop>::NEEDS; // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
_1 = const _; // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
||||||
- switchInt(move _1) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
- switchInt(move _1) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
||||||
+ _1 = const false; // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
|
||||||
+ switchInt(const false) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
+ switchInt(const false) -> [false: bb2, otherwise: bb1]; // scope 0 at $DIR/control-flow-simplification.rs:+1:8: +1:21
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
- // MIR for `main` before Inline
|
|
||||||
+ // MIR for `main` after Inline
|
|
||||||
|
|
||||||
fn main() -> () {
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/inline-into-box-place.rs:+0:11: +0:11
|
|
||||||
let _1: std::boxed::Box<std::vec::Vec<u32>>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:9: +1:11
|
|
||||||
let mut _2: usize; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
let mut _3: usize; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
let mut _4: *mut u8; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
let mut _5: std::boxed::Box<std::vec::Vec<u32>>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
let mut _6: (); // in scope 0 at $DIR/inline-into-box-place.rs:+1:42: +1:43
|
|
||||||
let mut _7: *const std::vec::Vec<u32>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
let mut _8: *const std::vec::Vec<u32>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
+ let mut _9: &mut std::vec::Vec<u32>; // in scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
scope 1 {
|
|
||||||
debug _x => _1; // in scope 1 at $DIR/inline-into-box-place.rs:+1:9: +1:11
|
|
||||||
}
|
|
||||||
scope 2 {
|
|
||||||
}
|
|
||||||
+ scope 3 (inlined Vec::<u32>::new) { // at $DIR/inline-into-box-place.rs:8:33: 8:43
|
|
||||||
+ let mut _10: alloc::raw_vec::RawVec<u32>; // in scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
|
||||||
+ }
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_1); // scope 0 at $DIR/inline-into-box-place.rs:+1:9: +1:11
|
|
||||||
_2 = SizeOf(std::vec::Vec<u32>); // scope 2 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
_3 = AlignOf(std::vec::Vec<u32>); // scope 2 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
_4 = alloc::alloc::exchange_malloc(move _2, move _3) -> bb1; // scope 2 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $DIR/inline-into-box-place.rs:8:29: 8:43
|
|
||||||
// + literal: Const { ty: unsafe fn(usize, usize) -> *mut u8 {alloc::alloc::exchange_malloc}, val: Value(<ZST>) }
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
StorageLive(_5); // scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
_5 = ShallowInitBox(move _4, std::vec::Vec<u32>); // scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
StorageLive(_7); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
_7 = (((_5.0: std::ptr::Unique<std::vec::Vec<u32>>).0: std::ptr::NonNull<std::vec::Vec<u32>>).0: *const std::vec::Vec<u32>); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
- (*_7) = Vec::<u32>::new() -> [return: bb2, unwind: bb4]; // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
+ StorageLive(_9); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
+ _9 = &mut (*_7); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
+ StorageLive(_10); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
|
||||||
+ _10 = const alloc::raw_vec::RawVec::<u32>::NEW; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
- // + span: $DIR/inline-into-box-place.rs:8:33: 8:41
|
|
||||||
- // + user_ty: UserType(1)
|
|
||||||
- // + literal: Const { ty: fn() -> Vec<u32> {Vec::<u32>::new}, val: Value(<ZST>) }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- bb2: {
|
|
||||||
+ // + span: $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
|
||||||
+ // + user_ty: UserType(0)
|
|
||||||
+ // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Unevaluated(alloc::raw_vec::RawVec::<T>::NEW, [u32], ()) }
|
|
||||||
+ Deinit((*_9)); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
|
||||||
+ ((*_9).0: alloc::raw_vec::RawVec<u32>) = move _10; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
|
||||||
+ ((*_9).1: usize) = const 0_usize; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
|
||||||
+ StorageDead(_10); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
|
||||||
+ StorageDead(_9); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
StorageDead(_7); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
_1 = move _5; // scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
|
||||||
StorageDead(_5); // scope 0 at $DIR/inline-into-box-place.rs:+1:42: +1:43
|
|
||||||
_0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:+0:11: +2:2
|
|
||||||
- drop(_1) -> [return: bb3, unwind: bb5]; // scope 0 at $DIR/inline-into-box-place.rs:+2:1: +2:2
|
|
||||||
+ drop(_1) -> [return: bb2, unwind: bb3]; // scope 0 at $DIR/inline-into-box-place.rs:+2:1: +2:2
|
|
||||||
}
|
|
||||||
|
|
||||||
- bb3: {
|
|
||||||
+ bb2: {
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/inline-into-box-place.rs:+2:1: +2:2
|
|
||||||
return; // scope 0 at $DIR/inline-into-box-place.rs:+2:2: +2:2
|
|
||||||
}
|
|
||||||
|
|
||||||
- bb4 (cleanup): {
|
|
||||||
- StorageDead(_7); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
- _6 = alloc::alloc::box_free::<Vec<u32>, std::alloc::Global>(move (_5.0: std::ptr::Unique<std::vec::Vec<u32>>), move (_5.1: std::alloc::Global)) -> bb5; // scope 0 at $DIR/inline-into-box-place.rs:+1:42: +1:43
|
|
||||||
- // mir::Constant
|
|
||||||
- // + span: $DIR/inline-into-box-place.rs:8:42: 8:43
|
|
||||||
- // + literal: Const { ty: unsafe fn(Unique<Vec<u32>>, std::alloc::Global) {alloc::alloc::box_free::<Vec<u32>, std::alloc::Global>}, val: Value(<ZST>) }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- bb5 (cleanup): {
|
|
||||||
+ bb3 (cleanup): {
|
|
||||||
resume; // scope 0 at $DIR/inline-into-box-place.rs:+0:1: +2:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -38,7 +38,7 @@
|
||||||
+ StorageLive(_8); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
+ StorageLive(_8); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||||
+ _8 = &mut (*_7); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
+ _8 = &mut (*_7); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||||
+ StorageLive(_9); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
+ StorageLive(_9); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||||
+ _9 = const alloc::raw_vec::RawVec::<u32>::NEW; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
+ _9 = const _; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
- // + span: $DIR/inline-into-box-place.rs:8:33: 8:41
|
- // + span: $DIR/inline-into-box-place.rs:8:33: 8:41
|
||||||
- // + user_ty: UserType(1)
|
- // + user_ty: UserType(1)
|
||||||
|
@ -48,13 +48,12 @@
|
||||||
- bb2: {
|
- bb2: {
|
||||||
+ // + span: $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
+ // + span: $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||||
+ // + user_ty: UserType(0)
|
+ // + user_ty: UserType(0)
|
||||||
+ // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Unevaluated(alloc::raw_vec::RawVec::<T>::NEW, [u32], ()) }
|
+ // + literal: Const { ty: alloc::raw_vec::RawVec<u32>, val: Unevaluated(alloc::raw_vec::RawVec::<T>::NEW, [u32], None) }
|
||||||
+ Deinit((*_9)); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
+ Deinit((*_8)); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||||
+ ((*_9).0: alloc::raw_vec::RawVec<u32>) = move _10; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
+ ((*_8).0: alloc::raw_vec::RawVec<u32>) = move _9; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||||
+ ((*_9).1: usize) = const 0_usize; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
+ ((*_8).1: usize) = const 0_usize; // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||||
+ StorageDead(_10); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
+ StorageDead(_9); // scope 3 at $SRC_DIR/alloc/src/vec/mod.rs:LL:COL
|
||||||
+ StorageDead(_9); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
+ StorageDead(_8); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
||||||
StorageDead(_7); // scope 0 at $DIR/inline-into-box-place.rs:+1:33: +1:43
|
|
||||||
_1 = move _5; // scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
_1 = move _5; // scope 0 at $DIR/inline-into-box-place.rs:+1:29: +1:43
|
||||||
StorageDead(_5); // scope 0 at $DIR/inline-into-box-place.rs:+1:42: +1:43
|
StorageDead(_5); // scope 0 at $DIR/inline-into-box-place.rs:+1:42: +1:43
|
||||||
_0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:+0:11: +2:2
|
_0 = const (); // scope 0 at $DIR/inline-into-box-place.rs:+0:11: +2:2
|
||||||
|
|
|
@ -1,117 +0,0 @@
|
||||||
- // MIR for `main` before PreCodegen
|
|
||||||
+ // MIR for `main` after PreCodegen
|
|
||||||
|
|
||||||
fn main() -> () {
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/issue-73223.rs:+0:11: +0:11
|
|
||||||
let _1: i32; // in scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
let _3: i32; // in scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
let mut _5: (&i32, &i32); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _6: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _7: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _10: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _11: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _12: i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _14: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _15: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _16: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _17: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _18: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _19: std::option::Option<std::fmt::Arguments>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 1 {
|
|
||||||
debug split => _1; // in scope 1 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
let _4: std::option::Option<i32>; // in scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
scope 3 {
|
|
||||||
debug _prev => _4; // in scope 3 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
let _8: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _9: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _20: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 4 {
|
|
||||||
debug left_val => _8; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
debug right_val => _9; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _13: core::panicking::AssertKind; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 5 {
|
|
||||||
debug kind => _13; // in scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scope 2 {
|
|
||||||
debug v => _3; // in scope 2 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_1); // scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
StorageLive(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
Deinit(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
((_2 as Some).0: i32) = const 1_i32; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
discriminant(_2) = 1; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
StorageLive(_3); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
_3 = ((_2 as Some).0: i32); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
_1 = _3; // scope 2 at $DIR/issue-73223.rs:+2:20: +2:21
|
|
||||||
StorageDead(_3); // scope 0 at $DIR/issue-73223.rs:+2:20: +2:21
|
|
||||||
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:+4:6: +4:7
|
|
||||||
StorageLive(_4); // scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
StorageLive(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_6); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_6 = &_1; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_7); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_20 = const _; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
|
|
||||||
_7 = _20; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
(_5.0: &i32) = move _6; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
(_5.1: &i32) = move _7; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_7); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_6); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_8 = (_5.0: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_9 = (_5.1: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_10); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_12); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_12 = (*_8); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_11 = Eq(move _12, const 1_i32); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_12); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_10 = Not(move _11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_11); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
switchInt(move _10) -> [false: bb2, otherwise: bb1]; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
StorageLive(_13); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_14); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_15); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_16); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_16 = _8; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_15 = _16; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_17); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_18); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_18 = _9; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_17 = _18; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
discriminant(_19) = 0; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_14 = core::panicking::assert_failed::<i32, i32>(const core::panicking::AssertKind::Eq, move _15, move _17, move _19); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: for<'r, 's, 't0> fn(core::panicking::AssertKind, &'r i32, &'s i32, Option<Arguments<'t0>>) -> ! {core::panicking::assert_failed::<i32, i32>}, val: Value(<ZST>) }
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: core::panicking::AssertKind, val: Value(Scalar(0x00)) }
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
StorageDead(_10); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_5); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_4); // scope 1 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
return; // scope 0 at $DIR/issue-73223.rs:+8:2: +8:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,157 +0,0 @@
|
||||||
- // MIR for `main` before SimplifyArmIdentity
|
|
||||||
+ // MIR for `main` after SimplifyArmIdentity
|
|
||||||
|
|
||||||
fn main() -> () {
|
|
||||||
let mut _0: (); // return place in scope 0 at $DIR/issue-73223.rs:+0:11: +0:11
|
|
||||||
let _1: i32; // in scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
let mut _2: std::option::Option<i32>; // in scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
let mut _3: isize; // in scope 0 at $DIR/issue-73223.rs:+2:9: +2:16
|
|
||||||
let _4: i32; // in scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
let mut _5: !; // in scope 0 at $DIR/issue-73223.rs:+3:17: +3:23
|
|
||||||
let mut _7: i32; // in scope 0 at $DIR/issue-73223.rs:+6:22: +6:27
|
|
||||||
let _8: (); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _9: (&i32, &i32); // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _10: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _11: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _12: i32; // in scope 0 at $DIR/issue-73223.rs:+7:23: +7:24
|
|
||||||
let mut _15: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _16: bool; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _17: i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _18: i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _19: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _21: !; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _22: core::panicking::AssertKind; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _23: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _24: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _25: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _26: &i32; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _27: std::option::Option<std::fmt::Arguments>; // in scope 0 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 1 {
|
|
||||||
debug split => _1; // in scope 1 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
let _6: std::option::Option<i32>; // in scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
scope 3 {
|
|
||||||
debug _prev => _6; // in scope 3 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
let _13: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _14: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let mut _28: &i32; // in scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 4 {
|
|
||||||
debug left_val => _13; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
debug right_val => _14; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
let _20: core::panicking::AssertKind; // in scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
scope 5 {
|
|
||||||
debug kind => _20; // in scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
scope 2 {
|
|
||||||
debug v => _4; // in scope 2 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
}
|
|
||||||
|
|
||||||
bb0: {
|
|
||||||
StorageLive(_1); // scope 0 at $DIR/issue-73223.rs:+1:9: +1:14
|
|
||||||
StorageLive(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
Deinit(_2); // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
((_2 as Some).0: i32) = const 1_i32; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
discriminant(_2) = 1; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
_3 = const 1_isize; // scope 0 at $DIR/issue-73223.rs:+1:23: +1:30
|
|
||||||
goto -> bb2; // scope 0 at $DIR/issue-73223.rs:+1:17: +1:30
|
|
||||||
}
|
|
||||||
|
|
||||||
bb1: {
|
|
||||||
nop; // scope 0 at $DIR/issue-73223.rs:+3:17: +3:23
|
|
||||||
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:+4:6: +4:7
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
return; // scope 0 at $DIR/issue-73223.rs:+8:2: +8:2
|
|
||||||
}
|
|
||||||
|
|
||||||
bb2: {
|
|
||||||
StorageLive(_4); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
_4 = ((_2 as Some).0: i32); // scope 0 at $DIR/issue-73223.rs:+2:14: +2:15
|
|
||||||
_1 = _4; // scope 2 at $DIR/issue-73223.rs:+2:20: +2:21
|
|
||||||
StorageDead(_4); // scope 0 at $DIR/issue-73223.rs:+2:20: +2:21
|
|
||||||
StorageDead(_2); // scope 0 at $DIR/issue-73223.rs:+4:6: +4:7
|
|
||||||
StorageLive(_6); // scope 1 at $DIR/issue-73223.rs:+6:9: +6:14
|
|
||||||
StorageLive(_7); // scope 1 at $DIR/issue-73223.rs:+6:22: +6:27
|
|
||||||
_7 = _1; // scope 1 at $DIR/issue-73223.rs:+6:22: +6:27
|
|
||||||
Deinit(_6); // scope 1 at $DIR/issue-73223.rs:+6:17: +6:28
|
|
||||||
((_6 as Some).0: i32) = move _7; // scope 1 at $DIR/issue-73223.rs:+6:17: +6:28
|
|
||||||
discriminant(_6) = 1; // scope 1 at $DIR/issue-73223.rs:+6:17: +6:28
|
|
||||||
StorageDead(_7); // scope 1 at $DIR/issue-73223.rs:+6:27: +6:28
|
|
||||||
StorageLive(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_10); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_10 = &_1; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_11); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_28 = const _; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
|
|
||||||
_11 = _28; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
(_9.0: &i32) = move _10; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
(_9.1: &i32) = move _11; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_11); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_10); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_13); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_13 = (_9.0: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_14); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_14 = (_9.1: &i32); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_15); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_16); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_17); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_17 = (*_13); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_18); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_18 = const 1_i32; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_16 = Eq(move _17, const 1_i32); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_18); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_17); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_15 = Not(move _16); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_16); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
switchInt(move _15) -> [false: bb4, otherwise: bb3]; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
}
|
|
||||||
|
|
||||||
bb3: {
|
|
||||||
StorageLive(_20); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_20); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
discriminant(_20) = 0; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_21); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_22); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_22 = const core::panicking::AssertKind::Eq; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: core::panicking::AssertKind, val: Value(Scalar(0x00)) }
|
|
||||||
StorageLive(_23); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_24); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_24 = _13; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_23 = _24; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_25); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_26); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_26 = _14; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_25 = _26; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageLive(_27); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
Deinit(_27); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
discriminant(_27) = 0; // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
_21 = core::panicking::assert_failed::<i32, i32>(const core::panicking::AssertKind::Eq, move _23, move _25, move _27); // scope 5 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: for<'r, 's, 't0> fn(core::panicking::AssertKind, &'r i32, &'s i32, Option<Arguments<'t0>>) -> ! {core::panicking::assert_failed::<i32, i32>}, val: Value(<ZST>) }
|
|
||||||
// mir::Constant
|
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
// + literal: Const { ty: core::panicking::AssertKind, val: Value(Scalar(0x00)) }
|
|
||||||
}
|
|
||||||
|
|
||||||
bb4: {
|
|
||||||
nop; // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_15); // scope 4 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_14); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_13); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_9); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
StorageDead(_8); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
|
||||||
nop; // scope 0 at $DIR/issue-73223.rs:+0:11: +8:2
|
|
||||||
StorageDead(_6); // scope 1 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
StorageDead(_1); // scope 0 at $DIR/issue-73223.rs:+8:1: +8:2
|
|
||||||
return; // scope 0 at $DIR/issue-73223.rs:+8:2: +8:2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -87,7 +87,7 @@
|
||||||
StorageLive(_10); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
StorageLive(_10); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
_10 = &_1; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
_10 = &_1; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
StorageLive(_11); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
StorageLive(_11); // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
_28 = const _; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
_28 = const _; // scope 3 at $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
// mir::Constant
|
// mir::Constant
|
||||||
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
// + span: $SRC_DIR/core/src/macros/mod.rs:LL:COL
|
||||||
// + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
|
// + literal: Const { ty: &i32, val: Unevaluated(main, [], Some(promoted[0])) }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue