From ad1cdecaeb64fa020c46ce43d87a8e33fc3fdafc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tuomas=20Lappetel=C3=A4inen?= Date: Thu, 23 Jan 2020 15:16:16 +0200 Subject: [PATCH 1/5] add a test for #60976 The test fails on 1.36.0 but passes on master. --- src/test/ui/use/auxiliary/extern-use-primitive-type-lib.rs | 3 +++ src/test/ui/use/issue-60976-extern-use-primitive-type.rs | 7 +++++++ 2 files changed, 10 insertions(+) create mode 100644 src/test/ui/use/auxiliary/extern-use-primitive-type-lib.rs create mode 100644 src/test/ui/use/issue-60976-extern-use-primitive-type.rs diff --git a/src/test/ui/use/auxiliary/extern-use-primitive-type-lib.rs b/src/test/ui/use/auxiliary/extern-use-primitive-type-lib.rs new file mode 100644 index 0000000000000..3c7756ef7e679 --- /dev/null +++ b/src/test/ui/use/auxiliary/extern-use-primitive-type-lib.rs @@ -0,0 +1,3 @@ +// compile-flags: --edition=2018 + +pub use u32; diff --git a/src/test/ui/use/issue-60976-extern-use-primitive-type.rs b/src/test/ui/use/issue-60976-extern-use-primitive-type.rs new file mode 100644 index 0000000000000..4cd458302a498 --- /dev/null +++ b/src/test/ui/use/issue-60976-extern-use-primitive-type.rs @@ -0,0 +1,7 @@ +// Regression test for #60976: ICE (with <=1.36.0) when another file had `use ;`. +// check-pass +// aux-build:extern-use-primitive-type-lib.rs + +extern crate extern_use_primitive_type_lib; + +fn main() {} From 2d7f8b31db062b695175c940d7f0c13281e45bb2 Mon Sep 17 00:00:00 2001 From: Lzu Tao Date: Fri, 24 Jan 2020 17:43:57 +0100 Subject: [PATCH 2/5] Use Self instead of self return type --- src/libcore/fmt/builders.rs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/libcore/fmt/builders.rs b/src/libcore/fmt/builders.rs index dd0f3ccb15841..8ba0e422e8f13 100644 --- a/src/libcore/fmt/builders.rs +++ b/src/libcore/fmt/builders.rs @@ -133,7 +133,7 @@ impl<'a, 'b: 'a> DebugStruct<'a, 'b> { /// ); /// ``` #[stable(feature = "debug_builders", since = "1.2.0")] - pub fn field(&mut self, name: &str, value: &dyn fmt::Debug) -> &mut DebugStruct<'a, 'b> { + pub fn field(&mut self, name: &str, value: &dyn fmt::Debug) -> &mut Self { self.result = self.result.and_then(|_| { if self.is_pretty() { if !self.has_fields { @@ -330,7 +330,7 @@ impl<'a, 'b: 'a> DebugTuple<'a, 'b> { /// ); /// ``` #[stable(feature = "debug_builders", since = "1.2.0")] - pub fn field(&mut self, value: &dyn fmt::Debug) -> &mut DebugTuple<'a, 'b> { + pub fn field(&mut self, value: &dyn fmt::Debug) -> &mut Self { self.result = self.result.and_then(|_| { if self.is_pretty() { if self.fields == 0 { @@ -492,7 +492,7 @@ impl<'a, 'b: 'a> DebugSet<'a, 'b> { /// ); /// ``` #[stable(feature = "debug_builders", since = "1.2.0")] - pub fn entry(&mut self, entry: &dyn fmt::Debug) -> &mut DebugSet<'a, 'b> { + pub fn entry(&mut self, entry: &dyn fmt::Debug) -> &mut Self { self.inner.entry(entry); self } @@ -521,7 +521,7 @@ impl<'a, 'b: 'a> DebugSet<'a, 'b> { /// ); /// ``` #[stable(feature = "debug_builders", since = "1.2.0")] - pub fn entries(&mut self, entries: I) -> &mut DebugSet<'a, 'b> + pub fn entries(&mut self, entries: I) -> &mut Self where D: fmt::Debug, I: IntoIterator, @@ -624,7 +624,7 @@ impl<'a, 'b: 'a> DebugList<'a, 'b> { /// ); /// ``` #[stable(feature = "debug_builders", since = "1.2.0")] - pub fn entry(&mut self, entry: &dyn fmt::Debug) -> &mut DebugList<'a, 'b> { + pub fn entry(&mut self, entry: &dyn fmt::Debug) -> &mut Self { self.inner.entry(entry); self } @@ -653,7 +653,7 @@ impl<'a, 'b: 'a> DebugList<'a, 'b> { /// ); /// ``` #[stable(feature = "debug_builders", since = "1.2.0")] - pub fn entries(&mut self, entries: I) -> &mut DebugList<'a, 'b> + pub fn entries(&mut self, entries: I) -> &mut Self where D: fmt::Debug, I: IntoIterator, @@ -760,7 +760,7 @@ impl<'a, 'b: 'a> DebugMap<'a, 'b> { /// ); /// ``` #[stable(feature = "debug_builders", since = "1.2.0")] - pub fn entry(&mut self, key: &dyn fmt::Debug, value: &dyn fmt::Debug) -> &mut DebugMap<'a, 'b> { + pub fn entry(&mut self, key: &dyn fmt::Debug, value: &dyn fmt::Debug) -> &mut Self { self.key(key).value(value) } @@ -797,7 +797,7 @@ impl<'a, 'b: 'a> DebugMap<'a, 'b> { /// ); /// ``` #[unstable(feature = "debug_map_key_value", reason = "recently added", issue = "62482")] - pub fn key(&mut self, key: &dyn fmt::Debug) -> &mut DebugMap<'a, 'b> { + pub fn key(&mut self, key: &dyn fmt::Debug) -> &mut Self { self.result = self.result.and_then(|_| { assert!( !self.has_key, @@ -862,7 +862,7 @@ impl<'a, 'b: 'a> DebugMap<'a, 'b> { /// ); /// ``` #[unstable(feature = "debug_map_key_value", reason = "recently added", issue = "62482")] - pub fn value(&mut self, value: &dyn fmt::Debug) -> &mut DebugMap<'a, 'b> { + pub fn value(&mut self, value: &dyn fmt::Debug) -> &mut Self { self.result = self.result.and_then(|_| { assert!(self.has_key, "attempted to format a map value before its key"); @@ -908,7 +908,7 @@ impl<'a, 'b: 'a> DebugMap<'a, 'b> { /// ); /// ``` #[stable(feature = "debug_builders", since = "1.2.0")] - pub fn entries(&mut self, entries: I) -> &mut DebugMap<'a, 'b> + pub fn entries(&mut self, entries: I) -> &mut Self where K: fmt::Debug, V: fmt::Debug, From 1605276cc2ff3319a7f360b389be1a53d0d5751c Mon Sep 17 00:00:00 2001 From: Aaron Hill Date: Thu, 23 Jan 2020 18:19:59 -0500 Subject: [PATCH 3/5] Add some type-alias-impl-trait regression tests Fixes #57611 Fixes #57807 --- .../issue-57611-trait-alias.rs | 27 ++++++++++++++++ .../issue-57611-trait-alias.stderr | 23 ++++++++++++++ .../issue-57807-associated-type.rs | 31 +++++++++++++++++++ 3 files changed, 81 insertions(+) create mode 100644 src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs create mode 100644 src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs new file mode 100644 index 0000000000000..1c2051e7eaeeb --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs @@ -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; + + fn bar(&self) -> Self::Bar; +} + +struct X; + +impl Foo for X { + type Bar = impl Baz; //~ ERROR type mismatch in closure arguments + //~^ ERROR type mismatch resolving + + fn bar(&self) -> Self::Bar { + |x| x + } +} + +trait Baz = Fn(&A) -> &B; + +fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr new file mode 100644 index 0000000000000..f648b7bfc991d --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr @@ -0,0 +1,23 @@ +error[E0631]: type mismatch in closure arguments + --> $DIR/issue-57611-trait-alias.rs:17:5 + | +LL | type Bar = impl Baz; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 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; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 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`. diff --git a/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs new file mode 100644 index 0000000000000..fcab2c7db2605 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs @@ -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; + + fn foo() -> Self::B; +} + +impl Foo for () { + type A = (); + type B = impl Bar; + + fn foo() -> Self::B { + () + } +} + +fn main() {} From cdc6898a900014792649c557a97668236dd0d1fd Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sat, 25 Jan 2020 17:58:10 +0900 Subject: [PATCH 4/5] Update submodules to rust-lang --- .gitmodules | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index 62cbbdd9a3a06..003e50d0788e4 100644 --- a/.gitmodules +++ b/.gitmodules @@ -15,13 +15,13 @@ url = https://github.com/rust-lang/book.git [submodule "src/tools/rls"] path = src/tools/rls - url = https://github.com/rust-lang-nursery/rls.git + url = https://github.com/rust-lang/rls.git [submodule "src/tools/clippy"] path = src/tools/clippy - url = https://github.com/rust-lang-nursery/rust-clippy.git + url = https://github.com/rust-lang/rust-clippy.git [submodule "src/tools/rustfmt"] path = src/tools/rustfmt - url = https://github.com/rust-lang-nursery/rustfmt.git + url = https://github.com/rust-lang/rustfmt.git [submodule "src/tools/miri"] path = src/tools/miri url = https://github.com/rust-lang/miri.git From 7fb8f7d85dcfc135926da5b11042e21b060e98a3 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 25 Jan 2020 17:41:55 +0100 Subject: [PATCH 5/5] clean up error codeS E0229 and E0261 --- src/librustc_error_codes/error_codes/E0229.md | 4 +++- src/librustc_error_codes/error_codes/E0261.md | 5 ++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/librustc_error_codes/error_codes/E0229.md b/src/librustc_error_codes/error_codes/E0229.md index a8bd341a62ba0..a8fab057d43a0 100644 --- a/src/librustc_error_codes/error_codes/E0229.md +++ b/src/librustc_error_codes/error_codes/E0229.md @@ -1,5 +1,7 @@ An associated type binding was done outside of the type parameter declaration -and `where` clause. Erroneous code example: +and `where` clause. + +Erroneous code example: ```compile_fail,E0229 pub trait Foo { diff --git a/src/librustc_error_codes/error_codes/E0261.md b/src/librustc_error_codes/error_codes/E0261.md index 21cf8e70452e0..e326843739638 100644 --- a/src/librustc_error_codes/error_codes/E0261.md +++ b/src/librustc_error_codes/error_codes/E0261.md @@ -1,7 +1,6 @@ -When using a lifetime like `'a` in a type, it must be declared before being -used. +An undeclared lifetime was used. -These two examples illustrate the problem: +Erroneous code example: ```compile_fail,E0261 // error, use of undeclared lifetime name `'a`