Skip to content

Conversation

compiler-errors
Copy link
Member

Despite its name, codegen_select is what powers Instance::try_resolve, which is used in pre-codegen contexts to try to resolve a method where possible. One place that it's used is in the "recursion MIR lint" that detects recursive MIR bodies.

If we encounter an impl in codegen_select that contains unconstrained generic parameters, we expect that impl to caused an error to be reported; however, there's no temporal guarantee that this error is reported before we call codegen_select. This is what a delayed bug is for, and this PR makes us use a delayed bug rather than asserting something about errors already having been emitted.

Fixes #126646

@rustbot
Copy link
Collaborator

rustbot commented Nov 23, 2024

r? @wesleywiser

rustbot has assigned @wesleywiser.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Nov 23, 2024
// for this and will in fact ICE in stable hashing of the return value. So bail out instead.
infcx.tcx.dcx().has_errors().unwrap();
let impl_source = tcx.erase_regions(impl_source);
if impl_source.has_non_region_infer() {
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a drive by to make it clear what it's looking for. no functional change.

@lcnr
Copy link
Contributor

lcnr commented Nov 27, 2024

r? @lcnr

@bors r+ rollup

@bors
Copy link
Collaborator

bors commented Nov 27, 2024

📌 Commit 50fb40a has been approved by lcnr

It is now in the queue for this repository.

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 27, 2024
bors added a commit to rust-lang-ci/rust that referenced this pull request Nov 28, 2024
…llaumeGomez

Rollup of 12 pull requests

Successful merges:

 - rust-lang#129409 (Expand std::os::unix::fs::chown() doc with a warning)
 - rust-lang#133320 (Add release notes for Rust 1.83.0)
 - rust-lang#133368 (Delay a bug when encountering an impl with unconstrained generics in `codegen_select`)
 - rust-lang#133428 (Actually use placeholder regions for trait method late bound regions in `collect_return_position_impl_trait_in_trait_tys`)
 - rust-lang#133512 (Add `as_array` and `as_mut_array` conversion methods to slices.)
 - rust-lang#133519 (Check `xform_ret_ty` for WF in the new solver to improve method winnowing)
 - rust-lang#133520 (Structurally resolve before applying projection in borrowck)
 - rust-lang#133534 (extend group-forbid-always-trumps-cli test)
 - rust-lang#133537 ([rustdoc] Fix new clippy lints)
 - rust-lang#133543 ([AIX] create shim for lgammaf_r)
 - rust-lang#133547 (rustc_span: Replace a `HashMap<_, ()>` with `HashSet`)
 - rust-lang#133550 (print generated doc paths)

r? `@ghost`
`@rustbot` modify labels: rollup
@bors bors merged commit acf48fc into rust-lang:master Nov 28, 2024
6 checks passed
@rustbot rustbot added this to the 1.85.0 milestone Nov 28, 2024
rust-timer added a commit to rust-lang-ci/rust that referenced this pull request Nov 28, 2024
Rollup merge of rust-lang#133368 - compiler-errors:codegen-select-unconstrained-params, r=lcnr

Delay a bug when encountering an impl with unconstrained generics in `codegen_select`

Despite its name, `codegen_select` is what powers `Instance::try_resolve`, which is used in pre-codegen contexts to try to resolve a method where possible. One place that it's used is in the "recursion MIR lint" that detects recursive MIR bodies.

If we encounter an impl in `codegen_select` that contains unconstrained generic parameters, we expect that impl to caused an error to be reported; however, there's no temporal guarantee that this error is reported *before* we call `codegen_select`. This is what a delayed bug is *for*, and this PR makes us use a delayed bug rather than asserting something about errors already having been emitted.

Fixes  rust-lang#126646
github-actions bot pushed a commit to tautschnig/verify-rust-std that referenced this pull request Mar 11, 2025
…llaumeGomez

Rollup of 12 pull requests

Successful merges:

 - rust-lang#129409 (Expand std::os::unix::fs::chown() doc with a warning)
 - rust-lang#133320 (Add release notes for Rust 1.83.0)
 - rust-lang#133368 (Delay a bug when encountering an impl with unconstrained generics in `codegen_select`)
 - rust-lang#133428 (Actually use placeholder regions for trait method late bound regions in `collect_return_position_impl_trait_in_trait_tys`)
 - rust-lang#133512 (Add `as_array` and `as_mut_array` conversion methods to slices.)
 - rust-lang#133519 (Check `xform_ret_ty` for WF in the new solver to improve method winnowing)
 - rust-lang#133520 (Structurally resolve before applying projection in borrowck)
 - rust-lang#133534 (extend group-forbid-always-trumps-cli test)
 - rust-lang#133537 ([rustdoc] Fix new clippy lints)
 - rust-lang#133543 ([AIX] create shim for lgammaf_r)
 - rust-lang#133547 (rustc_span: Replace a `HashMap<_, ()>` with `HashSet`)
 - rust-lang#133550 (print generated doc paths)

r? `@ghost`
`@rustbot` modify labels: rollup
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

ICE: None in trait codegen
5 participants