File tree 3 files changed +36
-0
lines changed
compiler/rustc_middle/src/ty
3 files changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -336,6 +336,10 @@ impl<'tcx> SizeSkeleton<'tcx> {
336
336
debug_assert ! ( tail. has_non_region_param( ) ) ;
337
337
Ok ( SizeSkeleton :: Pointer { non_zero, tail : tcx. erase_regions ( tail) } )
338
338
}
339
+ ty:: Error ( guar) => {
340
+ // Fixes ICE #124031
341
+ return Err ( tcx. arena . alloc ( LayoutError :: ReferencesError ( * guar) ) ) ;
342
+ }
339
343
_ => bug ! (
340
344
"SizeSkeleton::compute({ty}): layout errored ({err:?}), yet \
341
345
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