Fix ICE for transmutability in candidate assembly

Don't skip transmutability check just because there may be generics in the
ParamEnv.

Fixes #110467
This commit is contained in:
Bryan Garza 2023-04-18 16:31:05 -07:00
parent 7908a1d654
commit 238756e45d
2 changed files with 18 additions and 1 deletions

View file

@ -775,7 +775,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> {
obligation: &TraitObligation<'tcx>,
candidates: &mut SelectionCandidateSet<'tcx>,
) {
if obligation.has_non_region_param() {
if obligation.predicate.has_non_region_param() {
return;
}

View file

@ -0,0 +1,17 @@
// check-pass
#![crate_type = "lib"]
#![feature(transmutability)]
use std::mem::BikeshedIntrinsicFrom;
pub struct Context;
pub fn is_maybe_transmutable<Src, Dst>()
where
Dst: BikeshedIntrinsicFrom<Src, Context>,
{
}
// The `T` here should not have any effect on checking
// if transmutability is allowed or not.
fn function_with_generic<T>() {
is_maybe_transmutable::<(), ()>();
}