Test that TAIT and RPIT are in sync
This commit is contained in:
parent
53c96ed528
commit
6596e9dfcf
4 changed files with 33 additions and 2 deletions
|
@ -772,6 +772,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
|
||||||
// Note: this check is pessimistic, as the inference type could be matched with something other
|
// Note: this check is pessimistic, as the inference type could be matched with something other
|
||||||
// than the opaque type, but then we need a new `TypeRelation` just for this specific case and
|
// than the opaque type, but then we need a new `TypeRelation` just for this specific case and
|
||||||
// can't re-use `sup` below.
|
// can't re-use `sup` below.
|
||||||
|
// See src/test/ui/impl-trait/hidden-type-is-opaque.rs and
|
||||||
|
// src/test/ui/impl-trait/hidden-type-is-opaque-2.rs for examples that hit this path.
|
||||||
if formal_ret.has_infer_types() {
|
if formal_ret.has_infer_types() {
|
||||||
for ty in ret_ty.walk() {
|
for ty in ret_ty.walk() {
|
||||||
if let ty::subst::GenericArgKind::Type(ty) = ty.unpack() {
|
if let ty::subst::GenericArgKind::Type(ty) = ty.unpack() {
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
// into function arguments via the function's generic parameters
|
// into function arguments via the function's generic parameters
|
||||||
// FIXME(oli-obk): make `expected_inputs_for_expected_output` support this
|
// FIXME(oli-obk): make `expected_inputs_for_expected_output` support this
|
||||||
|
|
||||||
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
fn reify_as() -> Thunk<impl FnOnce(Continuation) -> Continuation> {
|
fn reify_as() -> Thunk<impl FnOnce(Continuation) -> Continuation> {
|
||||||
Thunk::new(|mut cont| { //~ ERROR type annotations needed
|
Thunk::new(|mut cont| { //~ ERROR type annotations needed
|
||||||
cont.reify_as();
|
cont.reify_as();
|
||||||
|
@ -9,6 +11,15 @@ fn reify_as() -> Thunk<impl FnOnce(Continuation) -> Continuation> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Tait = impl FnOnce(Continuation) -> Continuation;
|
||||||
|
|
||||||
|
fn reify_as_tait() -> Thunk<Tait> {
|
||||||
|
Thunk::new(|mut cont| { //~ ERROR type annotations needed
|
||||||
|
cont.reify_as();
|
||||||
|
cont
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
struct Thunk<F>(F);
|
struct Thunk<F>(F);
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,19 @@
|
||||||
error[E0282]: type annotations needed
|
error[E0282]: type annotations needed
|
||||||
--> $DIR/hidden-type-is-opaque-2.rs:6:17
|
--> $DIR/hidden-type-is-opaque-2.rs:8:17
|
||||||
|
|
|
|
||||||
LL | Thunk::new(|mut cont| {
|
LL | Thunk::new(|mut cont| {
|
||||||
| ^^^^^^^^ consider giving this closure parameter a type
|
| ^^^^^^^^ consider giving this closure parameter a type
|
||||||
|
|
|
|
||||||
= note: type must be known at this point
|
= note: type must be known at this point
|
||||||
|
|
||||||
error: aborting due to previous error
|
error[E0282]: type annotations needed
|
||||||
|
--> $DIR/hidden-type-is-opaque-2.rs:17:17
|
||||||
|
|
|
||||||
|
LL | Thunk::new(|mut cont| {
|
||||||
|
| ^^^^^^^^ consider giving this closure parameter a type
|
||||||
|
|
|
||||||
|
= note: type must be known at this point
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0282`.
|
For more information about this error, try `rustc --explain E0282`.
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// check-pass
|
// check-pass
|
||||||
|
#![feature(type_alias_impl_trait)]
|
||||||
|
|
||||||
fn reify_as() -> Thunk<impl ContFn> {
|
fn reify_as() -> Thunk<impl ContFn> {
|
||||||
Thunk::new(|mut cont| {
|
Thunk::new(|mut cont| {
|
||||||
|
@ -7,6 +8,15 @@ fn reify_as() -> Thunk<impl ContFn> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Tait = impl ContFn;
|
||||||
|
|
||||||
|
fn reify_as_tait() -> Thunk<Tait> {
|
||||||
|
Thunk::new(|mut cont| {
|
||||||
|
cont.reify_as();
|
||||||
|
cont
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
struct Thunk<F>(F);
|
struct Thunk<F>(F);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue