use delay_span_bug instead of bug! when doing layout sanity check
It's possible that `is_object_safe` is called on a trait that is ill-formed, and we shouldn't ICE unless there are no errors being raised. Using `delay_span_bug` solves this. fixes #56806
This commit is contained in:
parent
9723a495d4
commit
2433526809
3 changed files with 37 additions and 5 deletions
|
|
@ -369,7 +369,15 @@ impl<'a, 'tcx> TyCtxt<'a, 'tcx, 'tcx> {
|
|||
|
||||
match abi_of_ty(unit_receiver_ty) {
|
||||
&Abi::Scalar(..) => (),
|
||||
abi => bug!("Receiver when Self = () should have a Scalar ABI, found {:?}", abi)
|
||||
abi => {
|
||||
self.sess.delay_span_bug(
|
||||
self.def_span(method.def_id),
|
||||
&format!(
|
||||
"Receiver when Self = () should have a Scalar ABI, found {:?}",
|
||||
abi
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let trait_object_ty = self.object_ty_for_trait(
|
||||
|
|
@ -383,10 +391,15 @@ impl<'a, 'tcx> TyCtxt<'a, 'tcx, 'tcx> {
|
|||
|
||||
match abi_of_ty(trait_object_receiver) {
|
||||
&Abi::ScalarPair(..) => (),
|
||||
abi => bug!(
|
||||
"Receiver when Self = {} should have a ScalarPair ABI, found {:?}",
|
||||
trait_object_ty, abi
|
||||
)
|
||||
abi => {
|
||||
self.sess.delay_span_bug(
|
||||
self.def_span(method.def_id),
|
||||
&format!(
|
||||
"Receiver when Self = {} should have a ScalarPair ABI, found {:?}",
|
||||
trait_object_ty, abi
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
7
src/test/ui/issues/issue-56806.rs
Normal file
7
src/test/ui/issues/issue-56806.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
pub trait Trait {
|
||||
fn dyn_instead_of_self(self: Box<dyn Trait>);
|
||||
//~^ ERROR invalid method receiver type: std::boxed::Box<(dyn Trait + 'static)>
|
||||
}
|
||||
|
||||
pub fn main() {
|
||||
}
|
||||
12
src/test/ui/issues/issue-56806.stderr
Normal file
12
src/test/ui/issues/issue-56806.stderr
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
error[E0307]: invalid method receiver type: std::boxed::Box<(dyn Trait + 'static)>
|
||||
--> $DIR/issue-56806.rs:2:34
|
||||
|
|
||||
LL | fn dyn_instead_of_self(self: Box<dyn Trait>);
|
||||
| ^^^^^^^^^^^^^^
|
||||
|
|
||||
= note: type must be `Self` or a type that dereferences to it
|
||||
= help: consider changing to `self`, `&self`, `&mut self`, or `self: Box<Self>`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0307`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue