Skip to content

Commit

Permalink
Unrolled build for rust-lang#128239
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#128239 - compiler-errors:error-on-object-cand-confirm, r=oli-obk

Don't ICE when encountering error regions when confirming object method candidate

See the inline comment for an explanation.

Fixes rust-lang#122914
  • Loading branch information
rust-timer committed Jul 29, 2024
2 parents 66e5852 + 8d2c12e commit fe165d8
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 12 deletions.
14 changes: 13 additions & 1 deletion compiler/rustc_hir_typeck/src/method/confirm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@ use rustc_middle::ty::adjustment::{
};
use rustc_middle::ty::fold::TypeFoldable;
use rustc_middle::ty::{
self, GenericArgs, GenericArgsRef, GenericParamDefKind, Ty, TyCtxt, UserArgs, UserType,
self, GenericArgs, GenericArgsRef, GenericParamDefKind, Ty, TyCtxt, TypeVisitableExt, UserArgs,
UserType,
};
use rustc_middle::{bug, span_bug};
use rustc_span::{Span, DUMMY_SP};
Expand Down Expand Up @@ -269,6 +270,17 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> {

probe::ObjectPick => {
let trait_def_id = pick.item.container_id(self.tcx);

// This shouldn't happen for non-region error kinds, but may occur
// when we have error regions. Specifically, since we canonicalize
// during method steps, we may successfully deref when we assemble
// the pick, but fail to deref when we try to extract the object
// type from the pick during confirmation. This is fine, we're basically
// already doomed by this point.
if self_ty.references_error() {
return ty::GenericArgs::extend_with_error(self.tcx, trait_def_id, &[]);
}

self.extract_existential_trait_ref(self_ty, |this, object_ty, principal| {
// The object data has no entry for the Self
// Type. For the purposes of this method call, we
Expand Down
11 changes: 0 additions & 11 deletions tests/crashes/122914.rs

This file was deleted.

11 changes: 11 additions & 0 deletions tests/ui/methods/dont-ice-on-object-lookup-w-error-region.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// Fix for issue: #122914

use std::future::Future;
use std::pin::Pin;

fn project(x: Pin<&'missing mut dyn Future<Output = ()>>) {
//~^ ERROR use of undeclared lifetime name `'missing`
let _ = x.poll(todo!());
}

fn main() {}
11 changes: 11 additions & 0 deletions tests/ui/methods/dont-ice-on-object-lookup-w-error-region.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
error[E0261]: use of undeclared lifetime name `'missing`
--> $DIR/dont-ice-on-object-lookup-w-error-region.rs:6:20
|
LL | fn project(x: Pin<&'missing mut dyn Future<Output = ()>>) {
| - ^^^^^^^^ undeclared lifetime
| |
| help: consider introducing lifetime `'missing` here: `<'missing>`

error: aborting due to 1 previous error

For more information about this error, try `rustc --explain E0261`.

0 comments on commit fe165d8

Please sign in to comment.