1
Fork 0

Remove extra call to upvar_tys

Fixes #78720
This commit is contained in:
Aman Arora 2020-11-04 03:07:40 -05:00 committed by Roxane
parent 349b3b324d
commit 5da2bf197d
3 changed files with 74 additions and 10 deletions

View file

@ -722,11 +722,6 @@ where
// Skip lifetime parameters of the enclosing item(s)
substs.as_closure().tupled_upvars_ty().visit_with(self);
for upvar_ty in substs.as_closure().upvar_tys() {
upvar_ty.visit_with(self);
}
substs.as_closure().sig_as_fn_ptr_ty().visit_with(self);
}
@ -735,11 +730,6 @@ where
// Also skip the witness type, because that has no free regions.
substs.as_generator().tupled_upvars_ty().visit_with(self);
for upvar_ty in substs.as_generator().upvar_tys() {
upvar_ty.visit_with(self);
}
substs.as_generator().return_ty().visit_with(self);
substs.as_generator().yield_ty().visit_with(self);
substs.as_generator().resume_ty().visit_with(self);

View file

@ -0,0 +1,19 @@
fn server() -> impl {
//~^ ERROR at least one trait must be specified
().map2(|| "")
}
trait FilterBase2 {
fn map2<F>(self, F) -> Map2<F> {}
//~^ ERROR mismatched types
//~^^ ERROR the size for values of type `Self` cannot be known at compilation time
}
struct Map2<Segment2> {
_func: F,
//~^ ERROR cannot find type `F` in this scope
}
impl<F> FilterBase2 for F {}
fn main() {}

View file

@ -0,0 +1,55 @@
error: at least one trait must be specified
--> $DIR/issue-78720.rs:1:16
|
LL | fn server() -> impl {
| ^^^^
error[E0412]: cannot find type `F` in this scope
--> $DIR/issue-78720.rs:13:12
|
LL | _func: F,
| ^
|
::: $SRC_DIR/core/src/ops/function.rs:LL:COL
|
LL | pub trait Fn<Args>: FnMut<Args> {
| ------------------------------- similarly named trait `Fn` defined here
|
help: a trait with a similar name exists
|
LL | _func: Fn,
| ^^
help: you might be missing a type parameter
|
LL | struct Map2<Segment2, F> {
| ^^^
error[E0308]: mismatched types
--> $DIR/issue-78720.rs:7:36
|
LL | fn map2<F>(self, F) -> Map2<F> {}
| ^^ expected struct `Map2`, found `()`
|
= note: expected struct `Map2<F>`
found unit type `()`
error[E0277]: the size for values of type `Self` cannot be known at compilation time
--> $DIR/issue-78720.rs:7:16
|
LL | fn map2<F>(self, F) -> Map2<F> {}
| ^^^^ doesn't have a size known at compile-time
|
= help: unsized fn params are gated as an unstable feature
help: consider further restricting `Self`
|
LL | fn map2<F>(self, F) -> Map2<F> where Self: Sized {}
| ^^^^^^^^^^^^^^^^^
help: function arguments must have a statically known size, borrowed types always have a known size
|
LL | fn map2<F>(&self, F) -> Map2<F> {}
| ^
error: aborting due to 4 previous errors
Some errors have detailed explanations: E0277, E0308, E0412.
For more information about an error, try `rustc --explain E0277`.