File tree Expand file tree Collapse file tree 3 files changed +36
-0
lines changed
compiler/rustc_middle/src/ty Expand file tree Collapse file tree 3 files changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -338,6 +338,10 @@ impl<'tcx> SizeSkeleton<'tcx> {
338338 debug_assert ! ( tail. has_non_region_param( ) ) ;
339339 Ok ( SizeSkeleton :: Pointer { non_zero, tail : tcx. erase_regions ( tail) } )
340340 }
341+ ty:: Error ( guar) => {
342+ // Fixes ICE #124031
343+ return Err ( tcx. arena . alloc ( LayoutError :: ReferencesError ( * guar) ) ) ;
344+ }
341345 _ => bug ! (
342346 "SizeSkeleton::compute({ty}): layout errored ({err:?}), yet \
343347 tail `{tail}` is not a type parameter or a projection",
Original file line number Diff line number Diff line change 1+ // Regression test for issue #124031
2+ // Checks that we don't ICE when the tail
3+ // of an ADT has a type error
4+
5+ trait Trait {
6+ type RefTarget ;
7+ }
8+
9+ impl Trait for ( ) { }
10+ //~^ ERROR not all trait items implemented, missing: `RefTarget`
11+
12+ struct Other {
13+ data : <( ) as Trait >:: RefTarget ,
14+ }
15+
16+ fn main ( ) {
17+ unsafe {
18+ std:: mem:: transmute :: < Option < ( ) > , Option < & Other > > ( None ) ;
19+ }
20+ }
Original file line number Diff line number Diff line change 1+ error[E0046]: not all trait items implemented, missing: `RefTarget`
2+ --> $DIR/ice-type-error-in-tail-124031.rs:9:1
3+ |
4+ LL | type RefTarget;
5+ | -------------- `RefTarget` from trait
6+ ...
7+ LL | impl Trait for () {}
8+ | ^^^^^^^^^^^^^^^^^ missing `RefTarget` in implementation
9+
10+ error: aborting due to 1 previous error
11+
12+ For more information about this error, try `rustc --explain E0046`.
You can’t perform that action at this time.
0 commit comments