-
Notifications
You must be signed in to change notification settings - Fork 12.7k
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
Unstable fingerprints tracking issue #84970
Comments
Nominating for T-compiler as I believe we should surface this during a meeting - likely for some small discussion, but mostly for awareness, and to see if we can get some help for possible ideas. I think this is a P-critical bug - not in the sense that we must have a fix for the underlying cause, but in the sense that this issue needs to be addressed in time for the next stable release. I think it is likely worth applying the same fix to nightly as well, but perhaps in a channel-gated way if it has (for example) simply performance implications. This is a bit unclear. |
I think emitting a compiler error would be a great idea. However, I think it should still encourage users to open an issue (emphasizing that this is an internal compiler bug), so that we can see if any new issues pop up. |
OUTDATED: See the new table in #84970 (comment) Here's the current state of the crashes involving different queries:
As far as I know, these are all of the currently existing crashes. If anyone sees a crash involving a query other than one of these, please add it to this list. |
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
I think this would actually most likely be fine – these ICE-causing bugs have existed for years, and it took very long for someone to run into a miscompilation. |
Well, a known miscompilation - certainly the amount of ICEs we've seen suggests plenty of wrong results, right? Maybe in practice those don't cause problems, I don't know, but I'd rather give an error, especially if we can also e.g. poison the incremental cache automatically and make it just a matter of rerunning the compiler. In theory we could even teach Cargo to do that, though maybe that's going too far. |
We discussed this during T-compiler meeting today, and decided on these actions:
|
I've opened #84998 to show a nicer error. |
These workarounds are... not ideal for developer workflow time. I'd rather downgrade to an older stable than turn off incremental compilation. I see #82920 says:
and there's some discussion of bisecting but I don't easily see a result of bisecting. Does anyone know the earliest stable version that doesn't have the miscompilation? |
We are not aware, to my knowledge, of a "guaranteed to work" release - the known miscompilation was introduced at some point, but there may and likely are other unknown miscompilations as well, which is why the recommendation is either to clean or disable. You can clean specifically the most local crate (e.g., cargo clean -p crate-that-iced) and we are working on suggesting that in the error message from rustc. |
Have the following, was triggered by running
Large debug output from some object``` thread 'rustc' panicked at 'Found unstable fingerprints for mir_built(9d8933088bd2de00-2b70151a887b6f9e): Steal { value: RwLock(RefCell { value: Some(Body { basic_blocks: BasicBlocks { basic_blocks: [BasicBlockData { statements: [StorageLive(_2), StorageLive(_3)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:12:19: 12:49 (#0), scope: scope[0] }, kind: _3 = Runtime::new() -> [return: bb1, unwind: bb41] }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:12:19: 12:58 (#0), scope: scope[0] }, kind: _2 = Result::::unwrap(move _3) -> [return: bb2, unwind: bb40] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_3), FakeRead(ForLet(None), _2), StorageLive(_4), StorageLive(_5), _5 = &_2, StorageLive(_6), StorageLive(_7), _7 = [generator@src/aws.rs:13:39: 38:6 (#0)] { matches: move _1 }], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:13:33: 38:6 (#0), scope: scope[1] }, kind: _6 = std::future::from_generator::<[static generator@src/aws.rs:13:39: 38:6]>(move _7) -> [return: bb3, unwind: bb38] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_7)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:13:19: 38:7 (#0), scope: scope[1] }, kind: _4 = Runtime::spawn::>>(move _5, move _6) -> [return: bb4, unwind: bb37] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_6), StorageDead(_5), FakeRead(ForLet(None), _4), StorageLive(_8), StorageLive(_9), StorageLive(_10), StorageLive(_11), _11 = &_2, StorageLive(_12), _12 = move _4], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:8: 39:33 (#0), scope: scope[2] }, kind: _10 = Runtime::block_on::>>(move _11, move _12) -> [return: bb5, unwind: bb35] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_12), StorageDead(_11)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:8: 39:34 (#277), scope: scope[2] }, kind: _9 = , JoinError> as Try>::branch(move _10) -> [return: bb6, unwind: bb34] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_10), FakeRead(ForMatchedPlace(None), _9), _13 = discriminant(_9)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:8: 39:34 (#277), scope: scope[2] }, kind: switchInt(move _13) -> [0_isize: bb7, 1_isize: bb8, otherwise: bb9] }), is_cleanup: false }, BasicBlockData { statements: [StorageLive(_17), _17 = move ((_9 as Continue).0: std::vec::Vec), _8 = move _17], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#0), scope: scope[2] }, kind: drop(_17) -> [return: bb15, unwind: bb31] }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[2] }, kind: falseEdge -> [real: bb10, imaginary: bb7] }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:8: 39:34 (#277), scope: scope[2] }, kind: unreachable }), is_cleanup: false }, BasicBlockData { statements: [StorageLive(_14), _14 = move ((_9 as Break).0: std::result::Result), StorageLive(_16), _16 = move _14], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:8: 39:34 (#277), scope: scope[4] }, kind: _0 = , anyhow::Error> as FromResidual>>::from_residual(move _16) -> [return: bb11, unwind: bb29] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_16)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[4] }, kind: goto -> bb22 }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[4] }, kind: unreachable }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[2] }, kind: drop(_14) -> [return: bb14, unwind: bb31] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_14)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[2] }, kind: goto -> bb16 }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_17)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#0), scope: scope[2] }, kind: goto -> bb16 }), is_cleanup: false }, BasicBlockData { statements: [_0 = Result::, anyhow::Error>::Ok(move _8)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:34: 39:35 (#0), scope: scope[2] }, kind: drop(_8) -> [return: bb17, unwind: bb31] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_8)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[1] }, kind: drop(_4) -> [return: bb18, unwind: bb32] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_4)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_2) -> [return: bb19, unwind: bb33] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_2)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_9) -> [return: bb20, unwind: bb41] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_9)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_1) -> [return: bb21, unwind: bb42] }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:2: 40:2 (#0), scope: scope[0] }, kind: goto -> bb28 }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[2] }, kind: drop(_14) -> [return: bb23, unwind: bb31] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_14), StorageDead(_8)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[1] }, kind: drop(_4) -> [return: bb24, unwind: bb32] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_4)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_2) -> [return: bb25, unwind: bb33] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_2)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_9) -> [return: bb26, unwind: bb41] }), is_cleanup: false }, BasicBlockData { statements: [StorageDead(_9)], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_1) -> [return: bb27, unwind: bb42] }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:2: 40:2 (#0), scope: scope[0] }, kind: goto -> bb28 }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:2: 40:2 (#0), scope: scope[0] }, kind: return }), is_cleanup: false }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#277), scope: scope[4] }, kind: drop(_16) -> bb30 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[2] }, kind: drop(_14) -> bb31 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[1] }, kind: drop(_4) -> bb32 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_2) -> bb33 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_9) -> bb41 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#277), scope: scope[2] }, kind: drop(_10) -> bb36 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:39:32: 39:33 (#0), scope: scope[2] }, kind: drop(_12) -> bb36 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[1] }, kind: drop(_4) -> bb39 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:38:6: 38:7 (#0), scope: scope[1] }, kind: drop(_6) -> bb39 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:38:5: 38:6 (#0), scope: scope[1] }, kind: drop(_7) -> bb39 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_2) -> bb41 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:12:57: 12:58 (#0), scope: scope[0] }, kind: drop(_3) -> bb41 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:40:1: 40:2 (#0), scope: scope[0] }, kind: drop(_1) -> bb42 }), is_cleanup: true }, BasicBlockData { statements: [], terminator: Some(Terminator { source_info: SourceInfo { span: src/aws.rs:10:1: 40:2 (#0), scope: scope[0] }, kind: resume }), is_cleanup: true }], predecessor_cache: PredecessorCache { cache: OnceCell(Uninit) }, switch_source_cache: SwitchSourceCache { cache: OnceCell(Uninit) }, is_cyclic: GraphIsCyclicCache { cache: OnceCell(Uninit) }, postorder_cache: PostorderCache { cache: OnceCell(Uninit) } }, phase: Built, pass_count: 1, source: MirSource { instance: Item(WithOptConstParam { did: DefId(0:10 ~ pypi_data_scraper[38b5]::aws::check_aws_keys), const_param_did: None }), promoted: None }, source_scopes: [SourceScopeData { span: src/aws.rs:10:1: 40:2 (#0), parent_scope: None, inlined: None, inlined_parent_scope: None, local_data: Set(SourceScopeLocalData { lint_root: HirId { owner: OwnerId { def_id: DefId(0:10 ~ pypi_data_scraper[38b5]::aws::check_aws_keys) }, local_id: 0 }, safety: Safe }) }, SourceScopeData { span: src/aws.rs:12:5: 40:2 (#0), parent_scope: Some(scope[0]), inlined: None, inlined_parent_scope: None, local_data: Set(SourceScopeLocalData { lint_root: HirId { owner: OwnerId { def_id: DefId(0:10 ~ pypi_data_scraper[38b5]::aws::check_aws_keys) }, local_id: 0 }, safety: Safe }) }, SourceScopeData { span: src/aws.rs:13:5: 40:2 (#0), parent_scope: Some(scope[1]), inlined: None, inlined_parent_scope: None, local_data: Set(SourceScopeLocalData { lint_root: HirId { owner: OwnerId { def_id: DefId(0:10 ~ pypi_data_scraper[38b5]::aws::check_aws_keys) }, local_id: 0 }, safety: Safe }) }, SourceScopeData { span: src/aws.rs:39:33: 39:34 (#278), parent_scope: Some(scope[2]), inlined: None, inlined_parent_scope: None, local_data: Set(SourceScopeLocalData { lint_root: HirId { owner: OwnerId { def_id: DefId(0:10 ~ pypi_data_scraper[38b5]::aws::check_aws_keys) }, local_id: 0 }, safety: Safe }) }, SourceScopeData { span: src/aws.rs:39:33: 39:34 (#278), parent_scope: Some(scope[3]), inlined: None, inlined_parent_scope: None, local_data: Set(SourceScopeLocalData { lint_root: HirId { owner: OwnerId { def_id: DefId(0:10 ~ pypi_data_scraper[38b5]::aws::check_aws_keys) }, local_id: 330 }, safety: Safe }) }, SourceScopeData { span: src/aws.rs:39:8: 39:34 (#0), parent_scope: Some(scope[2]), inlined: None, inlined_parent_scope: None, local_data: Set(SourceScopeLocalData { lint_root: HirId { owner: OwnerId { def_id: DefId(0:10 ~ pypi_data_scraper[38b5]::aws::check_aws_keys) }, local_id: 0 }, safety: Safe }) }, SourceScopeData { span: src/aws.rs:39:8: 39:34 (#0), parent_scope: Some(scope[5]), inlined: None, inlined_parent_scope: None, local_data: Set(SourceScopeLocalData { lint_root: HirId { owner: OwnerId { def_id: DefId(0:10 ~ pypi_data_scraper[38b5]::aws::check_aws_keys) }, local_id: 321 }, safety: Safe }) }], generator: None, local_decls: [LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: None, ty: std::result::Result, anyhow::Error>, user_ty: None, source_info: SourceInfo { span: src/aws.rs:10:54: 10:74 (#0), scope: scope[0] } }, LocalDecl { mutability: Not, local_info: Some(User(Set(Var(VarBindingForm { binding_mode: BindByValue(Not), opt_ty_info: Some(src/aws.rs:10:32: 10:49 (#0)), opt_match_place: Some((None, src/aws.rs:10:23: 10:30 (#0))), pat_span: src/aws.rs:10:23: 10:30 (#0) })))), internal: false, is_block_tail: None, ty: std::vec::Vec, user_ty: None, source_info: SourceInfo { span: src/aws.rs:10:23: 10:30 (#0), scope: scope[0] } }, LocalDecl { mutability: Not, local_info: Some(User(Set(Var(VarBindingForm { binding_mode: BindByValue(Not), opt_ty_info: None, opt_match_place: Some((None, src/aws.rs:12:19: 12:58 (#0))), pat_span: src/aws.rs:12:9: 12:16 (#0) })))), internal: false, is_block_tail: None, ty: tokio::runtime::Runtime, user_ty: None, source_info: SourceInfo { span: src/aws.rs:12:9: 12:16 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: None, ty: std::result::Result, user_ty: None, source_info: SourceInfo { span: src/aws.rs:12:19: 12:49 (#0), scope: scope[0] } }, LocalDecl { mutability: Not, local_info: Some(User(Set(Var(VarBindingForm { binding_mode: BindByValue(Not), opt_ty_info: None, opt_match_place: Some((None, src/aws.rs:13:19: 38:7 (#0))), pat_span: src/aws.rs:13:9: 13:16 (#0) })))), internal: false, is_block_tail: None, ty: tokio::task::JoinHandle>, user_ty: None, source_info: SourceInfo { span: src/aws.rs:13:9: 13:16 (#0), scope: scope[1] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: None, ty: &tokio::runtime::Runtime, user_ty: None, source_info: SourceInfo { span: src/aws.rs:13:19: 38:7 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: None, ty: impl std::future::Future>, user_ty: None, source_info: SourceInfo { span: src/aws.rs:13:33: 38:6 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: None, ty: [static generator@src/aws.rs:13:39: 38:6], user_ty: None, source_info: SourceInfo { span: src/aws.rs:13:39: 38:6 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: Some(AggregateTemp), internal: false, is_block_tail: Some(BlockTailInfo { tail_result_is_ignored: false, span: src/aws.rs:39:5: 39:35 (#0) }), ty: std::vec::Vec, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:8: 39:34 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: Some(BlockTailInfo { tail_result_is_ignored: false, span: src/aws.rs:39:5: 39:35 (#0) }), ty: std::ops::ControlFlow, std::vec::Vec>, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:8: 39:34 (#277), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: Some(BlockTailInfo { tail_result_is_ignored: false, span: src/aws.rs:39:5: 39:35 (#0) }), ty: std::result::Result, tokio::task::JoinError>, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:8: 39:33 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: Some(BlockTailInfo { tail_result_is_ignored: false, span: src/aws.rs:39:5: 39:35 (#0) }), ty: &tokio::runtime::Runtime, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:8: 39:33 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: Some(BlockTailInfo { tail_result_is_ignored: false, span: src/aws.rs:39:5: 39:35 (#0) }), ty: tokio::task::JoinHandle>, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:25: 39:32 (#0), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: true, is_block_tail: None, ty: isize, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[0] } }, LocalDecl { mutability: Not, local_info: Some(User(Set(Var(VarBindingForm { binding_mode: BindByValue(Not), opt_ty_info: None, opt_match_place: Some((Some(_9), src/aws.rs:39:8: 39:34 (#277))), pat_span: src/aws.rs:39:33: 39:34 (#278) })))), internal: false, is_block_tail: None, ty: std::result::Result, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[2] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: Some(BlockTailInfo { tail_result_is_ignored: false, span: src/aws.rs:39:5: 39:35 (#0) }), ty: !, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[0] } }, LocalDecl { mutability: Mut, local_info: None, internal: false, is_block_tail: Some(BlockTailInfo { tail_result_is_ignored: false, span: src/aws.rs:39:5: 39:35 (#0) }), ty: std::result::Result, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[0] } }, LocalDecl { mutability: Not, local_info: Some(User(Set(Var(VarBindingForm { binding_mode: BindByValue(Not), opt_ty_info: None, opt_match_place: Some((Some(_9), src/aws.rs:39:8: 39:34 (#277))), pat_span: src/aws.rs:39:8: 39:34 (#277) })))), internal: false, is_block_tail: None, ty: std::vec::Vec, user_ty: None, source_info: SourceInfo { span: src/aws.rs:39:8: 39:34 (#0), scope: scope[2] } }], user_type_annotations: [], arg_count: 1, spread_arg: None, var_debug_info: [VarDebugInfo { name: "matches", source_info: SourceInfo { span: src/aws.rs:10:23: 10:30 (#0), scope: scope[0] }, value: _1 }, VarDebugInfo { name: "runtime", source_info: SourceInfo { span: src/aws.rs:12:9: 12:16 (#0), scope: scope[1] }, value: _2 }, VarDebugInfo { name: "checker", source_info: SourceInfo { span: src/aws.rs:13:9: 13:16 (#0), scope: scope[2] }, value: _4 }, VarDebugInfo { name: "residual", source_info: SourceInfo { span: src/aws.rs:39:33: 39:34 (#278), scope: scope[3] }, value: _14 }, VarDebugInfo { name: "val", source_info: SourceInfo { span: src/aws.rs:39:8: 39:34 (#0), scope: scope[5] }, value: _17 }], span: src/aws.rs:10:1: 40:2 (#0), required_consts: [], is_polymorphic: false, tainted_by_errors: None }) }) }', compiler/rustc_query_system/src/query/plumbing.rs:658:9 ``` |
I had an ICE with the codes in this commit : with
The issue occurred when I was working on the function Here is the txt file with the outputs. |
I hit this issue when working on #108938, and then git checkout master 8a73f50d875840b8077b8ec080fa41881d7ce40d, the error message is: error: internal compiler error: encountered incremental compilation error with registered_tools(0-0)
|
= help: This is a known issue with the compiler. Run `cargo clean -p rust_demangler` or `cargo clean` to allow your project to compile
= note: Please follow the instructions below to create a bug report with the provided information
= note: See <https://github.com/rust-lang/rust/issues/84970> for more information
thread 'rustc' panicked at 'Found unstable fingerprints for registered_tools(0-0): {clippy#0, rustfmt#0}', compiler/rustc_query_system/src/query/plumbing.rs:688:9
stack backtrace:
0: rust_begin_unwind
at ./library/std/src/panicking.rs:579:5
1: core::panicking::panic_fmt
at ./library/core/src/panicking.rs:64:14
2: rustc_query_system::query::plumbing::incremental_verify_ich_failed
at ./compiler/rustc_query_system/src/query/plumbing.rs:688:9
3: rustc_query_system::query::plumbing::incremental_verify_ich::<rustc_middle::ty::context::TyCtxt, &indexmap::set::IndexSet<rustc_span::symbol::Ident, core::hash::BuildHasherDefault<rustc_hash::FxHasher>>>
at ./compiler/rustc_query_system/src/query/plumbing.rs:610:9
4: rustc_query_system::query::plumbing::try_load_from_disk_and_cache_in_memory::<rustc_query_impl::queries::registered_tools, rustc_query_impl::plumbing::QueryCtxt>
at ./compiler/rustc_query_system/src/query/plumbing.rs:582:5
5: rustc_query_system::query::plumbing::execute_job::<rustc_query_impl::queries::registered_tools, rustc_query_impl::plumbing::QueryCtxt>::{closure#3}
at ./compiler/rustc_query_system/src/query/plumbing.rs:449:13 Follow the hint can not fix it: By the way, |
Just hit this again for
Backtrace
|
This comment was marked as resolved.
This comment was marked as resolved.
Does running the first build command with |
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
My issue is already fixed in latest nightly. |
I'm now seeing error messages related to this issue in 1.70.0 that did not appear in 1.69.0. I originally added info in #112479 before realizing the error message contained a link here 😅 . More context can be found in that (linked) issue. |
I also did not realise that there was a tracking issue and added details in #113062. |
I frequently hit this issue with Found unstable fingerprints for mir_built(11a1f347035615da-af8058392ca9b038)
|
I frequently hit this issue (using Rust 1.70.0), I wonder if this can be because of the use of the procedural macros from
|
I'm hitting this with rustc 1.70.0 on Linux using
|
Another example: trying to compile the code in section 7.2.5.0.2 in zero2production (https://www.zero2prod.com/). $ rustc --version I kept the offending source code in cnoam/zero2production@2a117ea HTH |
Another example: #122116 |
For users hitting this bug: please read this blog post which discusses what you can do. An excerpt is below:
The Internal Compiler Error asks you to report a bug, and if you can do so, we still want that information. We want to know about the cases that are failing.
But regardless of whether or not you file a bug, the problem here can be resolved by either:
cargo clean
for the whole project orcargo clean -p crate-causing-the-error
), orCARGO_INCREMENTAL=0
in your environment or settingbuild.incremental
tofalse
in your$HOME/.cargo/config.toml
file (which might also be called$HOME/.cargo/config
) by adding this:We recommend that users of 1.52.0 disable incremental compilation, to avoid running into this problem.
We do not recommend that users of 1.52.0 downgrade to an earlier version of Rust in response to this problem. There is at least one instance of a silent miscompilation caused by incremental compilation that was not caught until we added the fingerprint checking.
I believe the (new) ICEs as a result of improved error detection in the incremental code will land in 1.53 onto stable, which is in 6 weeks. We are unlikely to fix all of the fallout (i.e. all bugs, at least 25 of which are currently open, though some are duplicates) by that time and be willing to backport the fixes. I suspect we are also unlikely to want to disable the new assertions; they are catching known unsoundness. I am opening this issue to discuss possible alternatives, which are hopefully more user friendly than the current ICE.
I think one direct improvement is to adjust the panic/assert on encountering this to be a proper compile error, which can tell the user that they should (for example) delete the incremental directory and invoke the compiler again. This is already a significant improvement over the current message, I suspect. We can still ask that they file a bug report.
We should also consider if it's worth considering applying performance-hurting mitigations; it seems definitely true we can drop incremental support on beta/stable until these bugs are fixed, but perhaps a smaller hammer is also viable.
Table of ICEs:
predicates_of
#83311proc_macro_decls_static
extern_mod_stmt_cnum
optimized_mir
exported_symbols
item_children
evaluate_obligation
(EvaluatedToOk
andEvaluatedToOkModuloRegions
)evaluate_obligation
(OverflowError
)native_libraries
cc @Aaron1011 (driver of fixing the bugs, I believe)
cc @pnkfelix @wesleywiser (T-compiler leads)
cc @rust-lang/release for awareness
The text was updated successfully, but these errors were encountered: