-
Notifications
You must be signed in to change notification settings - Fork 13.4k
Incremental recompilation MIR ICE #110457
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Assigning myself to minimize, hopefully writing some cargo-minimize docs for incremental on the way. |
I have an MCVE (less minimal than I had hoped sadly) pub struct TileDef {
pub layer: (),
#[cfg(second)]
pub blend_graphic: String,
}
pub(crate) struct GameState {
pub(crate) tile_db: TileDb,
}
impl GameState {
fn inspect_mut(&mut self) {
egui_inspect_derive::expand! {}
}
}
fn new() -> GameState {
loop {}
}
fn main() {
let mut app = new();
app.inspect_mut();
}
// this is actually used
pub struct TileDb {
unknown_bg: TileDef,
}
impl std::fmt::Debug for TileDb {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
loop {}
}
}
pub struct PlatformOutput {
pub copied_text: String,
}
pub fn output_mut<R>(writer: impl FnOnce(&mut PlatformOutput) -> R) -> R {
loop {}
} Where use proc_macro::TokenStream;
use quote::quote;
#[proc_macro]
pub fn expand(_: TokenStream) -> TokenStream {
quote! {
output_mut(|o| o.copied_text = "".into());
output_mut(|o| o.copied_text = format!("{:?}", self.tile_db));
}
.into()
} I cannot manually expand the macro. I have already tried To reproduce, first compile it without any cfgs and then enable |
Bisection results using Noratrieb/game-wip-dontplay@cc39bd4. searched nightlies: from nightly-2021-01-01 to nightly-2023-04-19 bisected with cargo-bisect-rustc v0.6.6Host triple: aarch64-unknown-linux-gnu cargo bisect-rustc --start 2021-01-01 --regress success --script ./repro.sh --access github |
I've found some potentially interesting bits: 128c128
< span: src/main.rs: 13: 9: 13: 40(#20),
---
> span: src/main.rs: 13: 9: 13: 40(#224),
165c165
< span: src/main.rs: 13: 9: 13: 40(#20),
---
> span: src/main.rs: 13: 9: 13: 40(#224),
230c230
< did: DefId(0: 20~mantle_diver[
---
> did: DefId(0: 21~mantle_diver[
248c248
< lint_root: HirId(DefId(0: 8~mantle_diver[
---
> lint_root: HirId(DefId(0: 9~mantle_diver[
264c264
< lint_root: HirId(DefId(0: 8~mantle_diver[
---
> lint_root: HirId(DefId(0: 9~mantle_diver[ Some DefIds are different (makes sense, a field was added) and two spans changed their SyntaxContext drastically. These are spans that are expanded from the proc macro using beforeSteal{
value: RwLock(RefCell{
value: Some(Body{
basic_blocks: BasicBlocks{
basic_blocks: [
BasicBlockData{
statements: [
StorageLive(_3),
StorageLive(_4),
StorageLive(_5),
StorageLive(_6),
StorageLive(_7),
StorageLive(_8),
StorageLive(_9),
_9=[
const""
],
_8=&_9,
_7=&(*_8),
_6=move_7as&[
&str
](Pointer(Unsize)),
StorageDead(_7),
StorageLive(_10),
StorageLive(_11),
StorageLive(_12),
StorageLive(_13),
StorageLive(_14),
StorageLive(_15),
StorageLive(_16),
_16=&(*(_1.0: &TileDb)),
_15=&(*_16)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#9),
scope: scope[
0
]
},
kind: _14=core: : fmt: : ArgumentV1: : <'_>: : new_debug: : <TileDb>(move_15)->[
return: bb1,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
StorageDead(_15),
_13=[
move_14
],
StorageDead(_14),
_12=&_13,
_11=&(*_12),
_10=move_11as&[
core: : fmt: : ArgumentV1<'_>
](Pointer(Unsize)),
StorageDead(_11)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
},
kind: _5=Arguments: : <'_>: : new_v1(move_6,
move_10)->[
return: bb2,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
StorageDead(_10),
StorageDead(_6)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 19: 120: 80(#7),
scope: scope[
0
]
},
kind: _4=format(move_5)->[
return: bb3,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
StorageDead(_5),
FakeRead(ForLet(None),
_4),
StorageDead(_16),
StorageDead(_13),
StorageDead(_12),
StorageDead(_9),
StorageDead(_8),
_3=move_4
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 122: 5: 122: 6(#7),
scope: scope[
0
]
},
kind: drop(_4)->[
return: bb4,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
StorageDead(_4)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#20),
scope: scope[
0
]
},
kind: drop(((*_2).0: std: : string: : String))->[
return: bb5,
unwind: bb6
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
((*_2).0: std: : string: : String)=move_3,
_0=const()
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 39: 13: 40(#5),
scope: scope[
0
]
},
kind: drop(_3)->[
return: bb7,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
((*_2).0: std: : string: : String)=move_3
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#20),
scope: scope[
0
]
},
kind: goto->bb8
}),
is_cleanup: true
},
BasicBlockData{
statements: [
StorageDead(_3)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 40: 13: 40(#5),
scope: scope[
0
]
},
kind: return
}),
is_cleanup: false
},
BasicBlockData{
statements: [],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 39: 13: 40(#5),
scope: scope[
0
]
},
kind: drop(_3)->[
return: bb9,
unwindterminate
]
}),
is_cleanup: true
},
BasicBlockData{
statements: [],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
},
kind: resume
}),
is_cleanup: true
}
],
cache: Cache{
predecessors: OnceCell(Uninit),
switch_sources: OnceCell(Uninit),
is_cyclic: OnceCell(Uninit),
postorder: OnceCell(Uninit)
}
},
phase: Built,
pass_count: 0,
source: MirSource{
instance: Item(WithOptConstParam{
did: DefId(0: 20~mantle_diver[
d58e
]: : {
impl#0
}: : inspect_mut: : {
closure#1
}),
const_param_did: None
}),
promoted: None
},
source_scopes: [
SourceScopeData{
span: src/main.rs: 13: 9: 13: 40(#5),
parent_scope: None,
inlined: None,
inlined_parent_scope: None,
local_data: Set(SourceScopeLocalData{
lint_root: HirId(DefId(0: 8~mantle_diver[
d58e
]: : {
impl#0
}: : inspect_mut).21),
safety: Safe
})
},
SourceScopeData{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 9: 122: 6(#7),
parent_scope: Some(scope[
0
]),
inlined: None,
inlined_parent_scope: None,
local_data: Set(SourceScopeLocalData{
lint_root: HirId(DefId(0: 8~mantle_diver[
d58e
]: : {
impl#0
}: : inspect_mut).21),
safety: Safe
})
}
],
generator: None,
local_decls: [
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: (),
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 9(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: [
closure@src/main.rs: 13: 9: 13: 40
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(User(Var(VarBindingForm{
binding_mode: BindByValue(Not),
opt_ty_info: None,
opt_match_place: Some((None,
src/main.rs: 13: 9: 13: 40(#5))),
pat_span: src/main.rs: 13: 9: 13: 40(#5)
}))),
internal: false,
ty: &mutPlatformOutput,
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: std: : string: : String,
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 119: 23: 122: 6(#7),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(User(Var(VarBindingForm{
binding_mode: BindByValue(Not),
opt_ty_info: None,
opt_match_place: Some((None,
/home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 19: 120: 80(#7))),
pat_span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 13: 120: 16(#7)
}))),
internal: false,
ty: std: : string: : String,
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 13: 120: 16(#7),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: std: : fmt: : Arguments<'_>,
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &[
&str
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &[
&str;1
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: &[
&str;1
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: [
&str;1
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &[
core: : fmt: : ArgumentV1<'_>
],
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &[
core: : fmt: : ArgumentV1<'_>;1
],
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: &[
core: : fmt: : ArgumentV1<'_>;1
],
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: [
core: : fmt: : ArgumentV1<'_>;1
],
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: core: : fmt: : ArgumentV1<'_>,
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &TileDb,
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: &TileDb,
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#9),
scope: scope[
0
]
}
}
],
user_type_annotations: [
CanonicalUserTypeAnnotation{
user_ty: Canonical{
value: TypeOf(DefId(2: 9040~core[
44ff
]: : fmt: : {
impl#4
}: : new_v1),
UserSubsts{
substs: [
ReLateBound(DebruijnIndex(0),
BoundRegion{
var: 0,
kind: BrAnon(None)
})
],
user_self_ty: Some(UserSelfTy{
impl_def_id: DefId(2: 9037~core[
44ff
]: : fmt: : {
impl#4
}),
self_ty: std: : fmt: : Arguments<'_>
})
}),
max_universe: U0,
variables: [
CanonicalVarInfo{
kind: Region(U0)
},
CanonicalVarInfo{
kind: Region(U0)
}
]
},
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
inferred_ty: fn(&[
&'staticstr
],
&[
core: : fmt: : ArgumentV1<'_>
])->std: : fmt: : Arguments<'_>{
std: : fmt: : Arguments: : <'_>: : new_v1
}
},
CanonicalUserTypeAnnotation{
user_ty: Canonical{
value: TypeOf(DefId(2: 41685~core[
44ff
]: : fmt: : {
impl#3
}: : new_debug),
UserSubsts{
substs: [
ReLateBound(DebruijnIndex(0),
BoundRegion{
var: 0,
kind: BrAnon(None)
}),
^1
],
user_self_ty: Some(UserSelfTy{
impl_def_id: DefId(2: 9030~core[
44ff
]: : fmt: : {
impl#3
}),
self_ty: core: : fmt: : ArgumentV1<'_>
})
}),
max_universe: U0,
variables: [
CanonicalVarInfo{
kind: Region(U0)
},
CanonicalVarInfo{
kind: Ty(General(U0))
},
CanonicalVarInfo{
kind: Region(U0)
}
]
},
span: src/main.rs: 13: 9: 13: 40(#9),
inferred_ty: for<'b>fn(&'bTileDb)->core: : fmt: : ArgumentV1<'b>{
core: : fmt: : ArgumentV1: : <'_>: : new_debug: : <TileDb>
}
}
],
arg_count: 2,
spread_arg: None,
var_debug_info: [
VarDebugInfo{
name: "o",
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
},
value: _2,
argument_index: Some(2)
},
VarDebugInfo{
name: "self__tile_db",
source_info: SourceInfo{
span: src/main.rs: 12: 25: 12: 29(#0),
scope: scope[
0
]
},
value: (*(_1.0: &TileDb)),
argument_index: None
},
VarDebugInfo{
name: "res",
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 13: 120: 16(#7),
scope: scope[
1
]
},
value: _4,
argument_index: None
}
],
span: src/main.rs: 13: 9: 13: 40(#5),
required_consts: [],
is_polymorphic: false,
injection_phase: None,
tainted_by_errors: None
})
})
} afterSteal{
value: RwLock(RefCell{
value: Some(Body{
basic_blocks: BasicBlocks{
basic_blocks: [
BasicBlockData{
statements: [
StorageLive(_3),
StorageLive(_4),
StorageLive(_5),
StorageLive(_6),
StorageLive(_7),
StorageLive(_8),
StorageLive(_9),
_9=[
const""
],
_8=&_9,
_7=&(*_8),
_6=move_7as&[
&str
](Pointer(Unsize)),
StorageDead(_7),
StorageLive(_10),
StorageLive(_11),
StorageLive(_12),
StorageLive(_13),
StorageLive(_14),
StorageLive(_15),
StorageLive(_16),
_16=&(*(_1.0: &TileDb)),
_15=&(*_16)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#9),
scope: scope[
0
]
},
kind: _14=core: : fmt: : ArgumentV1: : <'_>: : new_debug: : <TileDb>(move_15)->[
return: bb1,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
StorageDead(_15),
_13=[
move_14
],
StorageDead(_14),
_12=&_13,
_11=&(*_12),
_10=move_11as&[
core: : fmt: : ArgumentV1<'_>
](Pointer(Unsize)),
StorageDead(_11)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
},
kind: _5=Arguments: : <'_>: : new_v1(move_6,
move_10)->[
return: bb2,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
StorageDead(_10),
StorageDead(_6)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 19: 120: 80(#7),
scope: scope[
0
]
},
kind: _4=format(move_5)->[
return: bb3,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
StorageDead(_5),
FakeRead(ForLet(None),
_4),
StorageDead(_16),
StorageDead(_13),
StorageDead(_12),
StorageDead(_9),
StorageDead(_8),
_3=move_4
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 122: 5: 122: 6(#7),
scope: scope[
0
]
},
kind: drop(_4)->[
return: bb4,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
StorageDead(_4)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#224),
scope: scope[
0
]
},
kind: drop(((*_2).0: std: : string: : String))->[
return: bb5,
unwind: bb6
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
((*_2).0: std: : string: : String)=move_3,
_0=const()
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 39: 13: 40(#5),
scope: scope[
0
]
},
kind: drop(_3)->[
return: bb7,
unwind: bb9
]
}),
is_cleanup: false
},
BasicBlockData{
statements: [
((*_2).0: std: : string: : String)=move_3
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#224),
scope: scope[
0
]
},
kind: goto->bb8
}),
is_cleanup: true
},
BasicBlockData{
statements: [
StorageDead(_3)
],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 40: 13: 40(#5),
scope: scope[
0
]
},
kind: return
}),
is_cleanup: false
},
BasicBlockData{
statements: [],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 39: 13: 40(#5),
scope: scope[
0
]
},
kind: drop(_3)->[
return: bb9,
unwindterminate
]
}),
is_cleanup: true
},
BasicBlockData{
statements: [],
terminator: Some(Terminator{
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
},
kind: resume
}),
is_cleanup: true
}
],
cache: Cache{
predecessors: OnceCell(Uninit),
switch_sources: OnceCell(Uninit),
is_cyclic: OnceCell(Uninit),
postorder: OnceCell(Uninit)
}
},
phase: Built,
pass_count: 0,
source: MirSource{
instance: Item(WithOptConstParam{
did: DefId(0: 21~mantle_diver[
d58e
]: : {
impl#0
}: : inspect_mut: : {
closure#1
}),
const_param_did: None
}),
promoted: None
},
source_scopes: [
SourceScopeData{
span: src/main.rs: 13: 9: 13: 40(#5),
parent_scope: None,
inlined: None,
inlined_parent_scope: None,
local_data: Set(SourceScopeLocalData{
lint_root: HirId(DefId(0: 9~mantle_diver[
d58e
]: : {
impl#0
}: : inspect_mut).21),
safety: Safe
})
},
SourceScopeData{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 9: 122: 6(#7),
parent_scope: Some(scope[
0
]),
inlined: None,
inlined_parent_scope: None,
local_data: Set(SourceScopeLocalData{
lint_root: HirId(DefId(0: 9~mantle_diver[
d58e
]: : {
impl#0
}: : inspect_mut).21),
safety: Safe
})
}
],
generator: None,
local_decls: [
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: (),
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 9(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: [
closure@src/main.rs: 13: 9: 13: 40
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(User(Var(VarBindingForm{
binding_mode: BindByValue(Not),
opt_ty_info: None,
opt_match_place: Some((None,
src/main.rs: 13: 9: 13: 40(#5))),
pat_span: src/main.rs: 13: 9: 13: 40(#5)
}))),
internal: false,
ty: &mutPlatformOutput,
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: std: : string: : String,
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 119: 23: 122: 6(#7),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(User(Var(VarBindingForm{
binding_mode: BindByValue(Not),
opt_ty_info: None,
opt_match_place: Some((None,
/home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 19: 120: 80(#7))),
pat_span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 13: 120: 16(#7)
}))),
internal: false,
ty: std: : string: : String,
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 13: 120: 16(#7),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: std: : fmt: : Arguments<'_>,
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &[
&str
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &[
&str;1
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: &[
&str;1
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: [
&str;1
],
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &[
core: : fmt: : ArgumentV1<'_>
],
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &[
core: : fmt: : ArgumentV1<'_>;1
],
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: &[
core: : fmt: : ArgumentV1<'_>;1
],
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: [
core: : fmt: : ArgumentV1<'_>;1
],
user_ty: None,
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: core: : fmt: : ArgumentV1<'_>,
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Mut,
local_info: Set(Boring),
internal: false,
ty: &TileDb,
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#9),
scope: scope[
0
]
}
},
LocalDecl{
mutability: Not,
local_info: Set(Boring),
internal: false,
ty: &TileDb,
user_ty: None,
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#9),
scope: scope[
0
]
}
}
],
user_type_annotations: [
CanonicalUserTypeAnnotation{
user_ty: Canonical{
value: TypeOf(DefId(2: 9040~core[
44ff
]: : fmt: : {
impl#4
}: : new_v1),
UserSubsts{
substs: [
ReLateBound(DebruijnIndex(0),
BoundRegion{
var: 0,
kind: BrAnon(None)
})
],
user_self_ty: Some(UserSelfTy{
impl_def_id: DefId(2: 9037~core[
44ff
]: : fmt: : {
impl#4
}),
self_ty: std: : fmt: : Arguments<'_>
})
}),
max_universe: U0,
variables: [
CanonicalVarInfo{
kind: Region(U0)
},
CanonicalVarInfo{
kind: Region(U0)
}
]
},
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 39: 120: 79(#9),
inferred_ty: fn(&[
&'staticstr
],
&[
core: : fmt: : ArgumentV1<'_>
])->std: : fmt: : Arguments<'_>{
std: : fmt: : Arguments: : <'_>: : new_v1
}
},
CanonicalUserTypeAnnotation{
user_ty: Canonical{
value: TypeOf(DefId(2: 41685~core[
44ff
]: : fmt: : {
impl#3
}: : new_debug),
UserSubsts{
substs: [
ReLateBound(DebruijnIndex(0),
BoundRegion{
var: 0,
kind: BrAnon(None)
}),
^1
],
user_self_ty: Some(UserSelfTy{
impl_def_id: DefId(2: 9030~core[
44ff
]: : fmt: : {
impl#3
}),
self_ty: core: : fmt: : ArgumentV1<'_>
})
}),
max_universe: U0,
variables: [
CanonicalVarInfo{
kind: Region(U0)
},
CanonicalVarInfo{
kind: Ty(General(U0))
},
CanonicalVarInfo{
kind: Region(U0)
}
]
},
span: src/main.rs: 13: 9: 13: 40(#9),
inferred_ty: for<'b>fn(&'bTileDb)->core: : fmt: : ArgumentV1<'b>{
core: : fmt: : ArgumentV1: : <'_>: : new_debug: : <TileDb>
}
}
],
arg_count: 2,
spread_arg: None,
var_debug_info: [
VarDebugInfo{
name: "o",
source_info: SourceInfo{
span: src/main.rs: 13: 9: 13: 40(#5),
scope: scope[
0
]
},
value: _2,
argument_index: Some(2)
},
VarDebugInfo{
name: "self__tile_db",
source_info: SourceInfo{
span: src/main.rs: 12: 25: 12: 29(#0),
scope: scope[
0
]
},
value: (*(_1.0: &TileDb)),
argument_index: None
},
VarDebugInfo{
name: "res",
source_info: SourceInfo{
span: /home/nilsh/projects/rust/library/alloc/src/macros.rs: 120: 13: 120: 16(#7),
scope: scope[
1
]
},
value: _4,
argument_index: None
}
],
span: src/main.rs: 13: 9: 13: 40(#5),
required_consts: [],
is_polymorphic: false,
injection_phase: None,
tainted_by_errors: None
})
})
} |
The fact that DefIds are different is not an issue, those are just a shorthand, what's relevant is the DefPathHash. |
Writing my progress here before forgetting about it. First execution:
Subtlety: expn5 and expn6 are created from the same span information, because egui_inspect_derive does not give the two closures different spans. So these expansions' hashes collide. Because hash collisions are bad, we increment the disambiguator for expn6. Second execution:
|
The ICE itself should have been removed by #111952, in which MIR building does not create |
It just removed the symptom. The underlying bug is still there, and should be fixed by #111815. I don't think it currently possible to trigger the ICE, not until someone adds post-lowering expansions back. |
Uh oh!
There was an error while loading. Please reload this page.
See the minimal repro in a comment below.
The original was a repository that wasn't meant to be published (yet).
Meta
rustc --version --verbose
:Build help
Needs SFML as a non-rust dependency.
See https://github.com/jeremyletang/rust-sfml#environment-variables
Easiest way should be to download the source and build it with CMake, and point the above environment variables to the appropriate locations in your download folder.
The text was updated successfully, but these errors were encountered: