Auto merge of #68546 - JohnTitor:rollup-znuot4b, r=JohnTitor

Rollup of 5 pull requests

Successful merges:

 - #68485 (add a test for #60976)
 - #68498 (Add some type-alias-impl-trait regression tests)
 - #68514 (Use Self instead of self return type)
 - #68534 (Update submodules to rust-lang)
 - #68540 (clean up error codes E0229 and E0261)

Failed merges:

r? @ghost
This commit is contained in:
bors 2020-01-25 22:44:39 +00:00
commit 83beb0a118
9 changed files with 109 additions and 17 deletions

View file

@ -0,0 +1,27 @@
// Regression test for issue #57611
// Ensures that we don't ICE
// FIXME: This should compile, but it currently doesn't
#![feature(trait_alias)]
#![feature(type_alias_impl_trait)]
trait Foo {
type Bar: Baz<Self, Self>;
fn bar(&self) -> Self::Bar;
}
struct X;
impl Foo for X {
type Bar = impl Baz<Self, Self>; //~ ERROR type mismatch in closure arguments
//~^ ERROR type mismatch resolving
fn bar(&self) -> Self::Bar {
|x| x
}
}
trait Baz<A, B> = Fn(&A) -> &B;
fn main() {}

View file

@ -0,0 +1,23 @@
error[E0631]: type mismatch in closure arguments
--> $DIR/issue-57611-trait-alias.rs:17:5
|
LL | type Bar = impl Baz<Self, Self>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected signature of `for<'r> fn(&'r X) -> _`
...
LL | |x| x
| ----- found signature of `fn(_) -> _`
|
= note: the return type of a function must have a statically known size
error[E0271]: type mismatch resolving `for<'r> <[closure@$DIR/issue-57611-trait-alias.rs:21:9: 21:14] as std::ops::FnOnce<(&'r X,)>>::Output == &'r X`
--> $DIR/issue-57611-trait-alias.rs:17:5
|
LL | type Bar = impl Baz<Self, Self>;
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected bound lifetime parameter, found concrete lifetime
|
= note: the return type of a function must have a statically known size
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0271, E0631.
For more information about an error, try `rustc --explain E0271`.

View file

@ -0,0 +1,31 @@
// Regression test for issue #57807 - ensure
// that we properly unify associated types within
// a type alias impl trait
// check-pass
#![feature(type_alias_impl_trait)]
trait Bar {
type A;
}
impl Bar for () {
type A = ();
}
trait Foo {
type A;
type B: Bar<A = Self::A>;
fn foo() -> Self::B;
}
impl Foo for () {
type A = ();
type B = impl Bar<A = Self::A>;
fn foo() -> Self::B {
()
}
}
fn main() {}

View file

@ -0,0 +1,3 @@
// compile-flags: --edition=2018
pub use u32;

View file

@ -0,0 +1,7 @@
// Regression test for #60976: ICE (with <=1.36.0) when another file had `use <primitive_type>;`.
// check-pass
// aux-build:extern-use-primitive-type-lib.rs
extern crate extern_use_primitive_type_lib;
fn main() {}