mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-25 13:24:22 +00:00
normalize receiver substs and erase the regions
use a smaller example
This commit is contained in:
parent
f34356eace
commit
3bc54baa61
@ -44,7 +44,13 @@ fn inner_resolve_instance<'tcx>(
|
||||
|
||||
let result = if let Some(trait_def_id) = tcx.trait_of_item(def.did) {
|
||||
debug!(" => associated item, attempting to find impl in param_env {:#?}", param_env);
|
||||
resolve_associated_item(tcx, def.did, param_env, trait_def_id, substs)
|
||||
resolve_associated_item(
|
||||
tcx,
|
||||
def.did,
|
||||
param_env,
|
||||
trait_def_id,
|
||||
tcx.normalize_erasing_regions(param_env, substs),
|
||||
)
|
||||
} else {
|
||||
let ty = tcx.type_of(def.def_id_for_type_of());
|
||||
let item_type = tcx.subst_and_normalize_erasing_regions(substs, param_env, ty);
|
||||
|
59
src/test/ui/associated-item/issue-105449.rs
Normal file
59
src/test/ui/associated-item/issue-105449.rs
Normal file
@ -0,0 +1,59 @@
|
||||
// check-pass
|
||||
// compile-flags: -C debug_assertions=yes -Zunstable-options
|
||||
|
||||
#[allow(dead_code)]
|
||||
fn problematic_function<Space>()
|
||||
where
|
||||
DefaultAlloc: FinAllok<R1, Space>,
|
||||
{
|
||||
let e = Edge2dElement;
|
||||
let _ = Into::<Point>::into(e.map_reference_coords());
|
||||
}
|
||||
impl<N> Allocator<N, R0> for DefaultAlloc {
|
||||
type Buffer = MStorage;
|
||||
}
|
||||
impl<N> Allocator<N, R1> for DefaultAlloc {
|
||||
type Buffer = MStorage;
|
||||
}
|
||||
impl<N, D> From<VectorN<N, D>> for Point
|
||||
where
|
||||
DefaultAlloc: Allocator<N, D>,
|
||||
{
|
||||
fn from(_: VectorN<N, D>) -> Self {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
impl<GeometryDim, NodalDim> FinAllok<GeometryDim, NodalDim> for DefaultAlloc
|
||||
where
|
||||
DefaultAlloc: Allocator<Ure, GeometryDim>,
|
||||
DefaultAlloc: Allocator<Ure, NodalDim>
|
||||
{
|
||||
}
|
||||
impl FiniteElement<R1> for Edge2dElement {
|
||||
fn map_reference_coords(&self) -> VectorN<Ure, R1> {
|
||||
unimplemented!()
|
||||
}
|
||||
}
|
||||
type VectorN<N, R> = (N, R, <DefaultAlloc as Allocator<N, R>>::Buffer);
|
||||
struct DefaultAlloc;
|
||||
struct R0;
|
||||
struct R1;
|
||||
struct MStorage;
|
||||
struct Point;
|
||||
struct Edge2dElement;
|
||||
struct Ure;
|
||||
trait Allocator<N, R> {
|
||||
type Buffer;
|
||||
}
|
||||
trait FinAllok<GeometryDim, NodalDim>:
|
||||
Allocator<Ure, GeometryDim> +
|
||||
Allocator<Ure, NodalDim> +
|
||||
{
|
||||
}
|
||||
trait FiniteElement<Rau>
|
||||
where
|
||||
DefaultAlloc: FinAllok<Rau, Rau>,
|
||||
{
|
||||
fn map_reference_coords(&self) -> VectorN<Ure, Rau>;
|
||||
}
|
||||
fn main() {}
|
Loading…
Reference in New Issue
Block a user