From dbc3bf48c48075e3db6b9dc42b6255eefefdb73e Mon Sep 17 00:00:00 2001 From: Richard Lowe Date: Thu, 4 Nov 2021 16:44:48 -0500 Subject: [PATCH 1/6] treat illumos like solaris in failing ui tests which need it --- src/test/ui/intrinsics/intrinsic-alignment.rs | 1 + src/test/ui/structs-enums/rec-align-u64.rs | 1 + src/test/ui/x86stdcall.rs | 5 +++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/ui/intrinsics/intrinsic-alignment.rs b/src/test/ui/intrinsics/intrinsic-alignment.rs index 5a27ea8783a2f..6007eba8c0906 100644 --- a/src/test/ui/intrinsics/intrinsic-alignment.rs +++ b/src/test/ui/intrinsics/intrinsic-alignment.rs @@ -15,6 +15,7 @@ mod rusti { target_os = "emscripten", target_os = "freebsd", target_os = "fuchsia", + target_os = "illumos", target_os = "linux", target_os = "macos", target_os = "netbsd", diff --git a/src/test/ui/structs-enums/rec-align-u64.rs b/src/test/ui/structs-enums/rec-align-u64.rs index cc6412e271a13..3bc2d16cf9df2 100644 --- a/src/test/ui/structs-enums/rec-align-u64.rs +++ b/src/test/ui/structs-enums/rec-align-u64.rs @@ -36,6 +36,7 @@ struct Outer { target_os = "emscripten", target_os = "freebsd", target_os = "fuchsia", + target_os = "illumos", target_os = "linux", target_os = "macos", target_os = "netbsd", diff --git a/src/test/ui/x86stdcall.rs b/src/test/ui/x86stdcall.rs index 2bf4cfc500320..868923e593243 100644 --- a/src/test/ui/x86stdcall.rs +++ b/src/test/ui/x86stdcall.rs @@ -28,10 +28,11 @@ pub fn main() { target_os = "emscripten", target_os = "freebsd", target_os = "fuchsia", + target_os = "illumos", target_os = "linux", target_os = "macos", target_os = "netbsd", target_os = "openbsd", - target_os = "vxworks", - target_os = "solaris"))] + target_os = "solaris", + target_os = "vxworks"))] pub fn main() { } From 03f4fe6a66c1feec7fab81a383467c37ab23e3b7 Mon Sep 17 00:00:00 2001 From: SparrowLii Date: Mon, 8 Nov 2021 16:24:50 +0800 Subject: [PATCH 2/6] enable `dotprod` target feature in arm --- compiler/rustc_codegen_ssa/src/target_features.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/compiler/rustc_codegen_ssa/src/target_features.rs b/compiler/rustc_codegen_ssa/src/target_features.rs index caeeb23feb471..b4420df5df417 100644 --- a/compiler/rustc_codegen_ssa/src/target_features.rs +++ b/compiler/rustc_codegen_ssa/src/target_features.rs @@ -20,6 +20,7 @@ const ARM_ALLOWED_FEATURES: &[(&str, Option)] = &[ ("aes", Some(sym::arm_target_feature)), ("sha2", Some(sym::arm_target_feature)), ("i8mm", Some(sym::arm_target_feature)), + ("dotprod", Some(sym::arm_target_feature)), ("v5te", Some(sym::arm_target_feature)), ("v6", Some(sym::arm_target_feature)), ("v6k", Some(sym::arm_target_feature)), From 86c0ef8adcf2c60dc21a8a9b8f2d6992f2d7613c Mon Sep 17 00:00:00 2001 From: bstrie <865233+bstrie@users.noreply.github.com> Date: Tue, 27 Jul 2021 18:50:34 -0400 Subject: [PATCH 3/6] Add comments regarding superfluous `!Sync` impls --- library/alloc/src/rc.rs | 6 ++++++ library/core/src/cell.rs | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/library/alloc/src/rc.rs b/library/alloc/src/rc.rs index 4fb2f0c8530d7..03e33a1ff2bc3 100644 --- a/library/alloc/src/rc.rs +++ b/library/alloc/src/rc.rs @@ -313,6 +313,12 @@ pub struct Rc { #[stable(feature = "rust1", since = "1.0.0")] impl !marker::Send for Rc {} + +// Note that this negative impl isn't strictly necessary for correctness, +// as `Rc` transitively contains a `Cell`, which is itself `!Sync`. +// However, given how important `Rc`'s `!Sync`-ness is, +// having an explicit negative impl is nice for documentation purposes +// and results in nicer error messages. #[stable(feature = "rust1", since = "1.0.0")] impl !marker::Sync for Rc {} diff --git a/library/core/src/cell.rs b/library/core/src/cell.rs index d154bb3583c2d..06dc5ecf2ffa6 100644 --- a/library/core/src/cell.rs +++ b/library/core/src/cell.rs @@ -240,6 +240,11 @@ pub struct Cell { #[stable(feature = "rust1", since = "1.0.0")] unsafe impl Send for Cell where T: Send {} +// Note that this negative impl isn't strictly necessary for correctness, +// as `Cell` wraps `UnsafeCell`, which is itself `!Sync`. +// However, given how important `Cell`'s `!Sync`-ness is, +// having an explicit negative impl is nice for documentation purposes +// and results in nicer error messages. #[stable(feature = "rust1", since = "1.0.0")] impl !Sync for Cell {} From 048e1c942d21a143d1faf8077a6fee9c43dc8de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20K=C4=85dzio=C5=82ka?= Date: Mon, 8 Nov 2021 18:39:22 +0100 Subject: [PATCH 4/6] Add a note about feature(explicit_generic_args_with_impl_trait) to the relevant error message --- compiler/rustc_typeck/src/astconv/generics.rs | 11 +++++++++++ .../impl-trait-with-const-arguments.stderr | 3 +++ .../feature-gate.stderr | 3 +++ .../ui/impl-trait/issues/universal-issue-48703.stderr | 3 +++ .../universal-turbofish-in-method-issue-50950.stderr | 3 +++ src/test/ui/synthetic-param.stderr | 9 +++++++++ 6 files changed, 32 insertions(+) diff --git a/compiler/rustc_typeck/src/astconv/generics.rs b/compiler/rustc_typeck/src/astconv/generics.rs index 84327a2880e18..2f187997b55de 100644 --- a/compiler/rustc_typeck/src/astconv/generics.rs +++ b/compiler/rustc_typeck/src/astconv/generics.rs @@ -672,6 +672,17 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { err.span_label(span, "explicit generic argument not allowed"); } + err.note( + "see issue #83701 \ + for more information", + ); + if tcx.sess.is_nightly_build() { + err.help( + "add `#![feature(explicit_generic_args_with_impl_trait)]` \ + to the crate attributes to enable", + ); + } + err.emit(); } diff --git a/src/test/ui/const-generics/impl-trait-with-const-arguments.stderr b/src/test/ui/const-generics/impl-trait-with-const-arguments.stderr index 6268a564b06b6..87e4ad5004044 100644 --- a/src/test/ui/const-generics/impl-trait-with-const-arguments.stderr +++ b/src/test/ui/const-generics/impl-trait-with-const-arguments.stderr @@ -3,6 +3,9 @@ error[E0632]: cannot provide explicit generic arguments when `impl Trait` is use | LL | assert_eq!(f::<4usize>(Usizable), 20usize); | ^^^^^^ explicit generic argument not allowed + | + = note: see issue #83701 for more information + = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable error: aborting due to previous error diff --git a/src/test/ui/impl-trait/explicit-generic-args-with-impl-trait/feature-gate.stderr b/src/test/ui/impl-trait/explicit-generic-args-with-impl-trait/feature-gate.stderr index 6adc4e6b23968..a25c85faf4e35 100644 --- a/src/test/ui/impl-trait/explicit-generic-args-with-impl-trait/feature-gate.stderr +++ b/src/test/ui/impl-trait/explicit-generic-args-with-impl-trait/feature-gate.stderr @@ -3,6 +3,9 @@ error[E0632]: cannot provide explicit generic arguments when `impl Trait` is use | LL | foo::("".to_string()); | ^^^ explicit generic argument not allowed + | + = note: see issue #83701 for more information + = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable error: aborting due to previous error diff --git a/src/test/ui/impl-trait/issues/universal-issue-48703.stderr b/src/test/ui/impl-trait/issues/universal-issue-48703.stderr index 6800b37b5b175..90c252537ef82 100644 --- a/src/test/ui/impl-trait/issues/universal-issue-48703.stderr +++ b/src/test/ui/impl-trait/issues/universal-issue-48703.stderr @@ -3,6 +3,9 @@ error[E0632]: cannot provide explicit generic arguments when `impl Trait` is use | LL | foo::('a'); | ^^^^^^ explicit generic argument not allowed + | + = note: see issue #83701 for more information + = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable error: aborting due to previous error diff --git a/src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr b/src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr index db66d46109599..84b98f71f4f0c 100644 --- a/src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr +++ b/src/test/ui/impl-trait/issues/universal-turbofish-in-method-issue-50950.stderr @@ -5,6 +5,9 @@ LL | evt.handle_event::(|_evt| { | ^^^^^^^^^ ^^^^^^^^^^^^^ explicit generic argument not allowed | | | explicit generic argument not allowed + | + = note: see issue #83701 for more information + = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable error: aborting due to previous error diff --git a/src/test/ui/synthetic-param.stderr b/src/test/ui/synthetic-param.stderr index 101132d05fa0e..5cb9ad31fbfcc 100644 --- a/src/test/ui/synthetic-param.stderr +++ b/src/test/ui/synthetic-param.stderr @@ -3,18 +3,27 @@ error[E0632]: cannot provide explicit generic arguments when `impl Trait` is use | LL | func::(42); | ^^ explicit generic argument not allowed + | + = note: see issue #83701 for more information + = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position --> $DIR/synthetic-param.rs:23:17 | LL | Foo::func::(42); | ^^ explicit generic argument not allowed + | + = note: see issue #83701 for more information + = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable error[E0632]: cannot provide explicit generic arguments when `impl Trait` is used in argument position --> $DIR/synthetic-param.rs:26:23 | LL | Bar::::func::(42); | ^^ explicit generic argument not allowed + | + = note: see issue #83701 for more information + = help: add `#![feature(explicit_generic_args_with_impl_trait)]` to the crate attributes to enable error: aborting due to 3 previous errors From ebd401bc36ebc5530cc6cadbddd9c6e79e13d989 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 8 Nov 2021 09:45:15 +0900 Subject: [PATCH 5/6] Add some GATs-related regression tests --- .../generic-associated-types/issue-88595.rs | 24 +++++++++++ .../issue-88595.stderr | 40 +++++++++++++++++++ .../generic-associated-types/issue-90014.rs | 22 ++++++++++ .../issue-90014.stderr | 15 +++++++ 4 files changed, 101 insertions(+) create mode 100644 src/test/ui/generic-associated-types/issue-88595.rs create mode 100644 src/test/ui/generic-associated-types/issue-88595.stderr create mode 100644 src/test/ui/generic-associated-types/issue-90014.rs create mode 100644 src/test/ui/generic-associated-types/issue-90014.stderr diff --git a/src/test/ui/generic-associated-types/issue-88595.rs b/src/test/ui/generic-associated-types/issue-88595.rs new file mode 100644 index 0000000000000..e397390783f66 --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-88595.rs @@ -0,0 +1,24 @@ +#![feature(generic_associated_types)] +#![feature(type_alias_impl_trait)] + +fn main() {} + +trait A<'a> { + type B<'b>: Clone + // FIXME(generic_associated_types): Remove one of the below bounds + // https://github.com/rust-lang/rust/pull/90678#discussion_r744976085 + where + 'a: 'b, Self: 'a, Self: 'b; + + fn a(&'a self) -> Self::B<'a>; +} + +struct C; + +impl<'a> A<'a> for C { + type B<'b> = impl Clone; + //~^ ERROR: lifetime bound not satisfied + //~| ERROR: could not find defining uses + + fn a(&'a self) -> Self::B<'a> {} //~ ERROR: non-defining opaque type use in defining scope +} diff --git a/src/test/ui/generic-associated-types/issue-88595.stderr b/src/test/ui/generic-associated-types/issue-88595.stderr new file mode 100644 index 0000000000000..1948f82d0c97f --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-88595.stderr @@ -0,0 +1,40 @@ +error[E0478]: lifetime bound not satisfied + --> $DIR/issue-88595.rs:19:5 + | +LL | type B<'b> = impl Clone; + | ^^^^^^^^^^^^^^^^^^^^^^^^ + | +note: lifetime parameter instantiated with the lifetime `'a` as defined here + --> $DIR/issue-88595.rs:18:6 + | +LL | impl<'a> A<'a> for C { + | ^^ +note: but lifetime parameter must outlive the lifetime `'b` as defined here + --> $DIR/issue-88595.rs:19:12 + | +LL | type B<'b> = impl Clone; + | ^^ + +error: non-defining opaque type use in defining scope + --> $DIR/issue-88595.rs:23:23 + | +LL | fn a(&'a self) -> Self::B<'a> {} + | ^^^^^^^^^^^ + | +note: lifetime used multiple times + --> $DIR/issue-88595.rs:18:6 + | +LL | impl<'a> A<'a> for C { + | ^^ +LL | type B<'b> = impl Clone; + | ^^ + +error: could not find defining uses + --> $DIR/issue-88595.rs:19:18 + | +LL | type B<'b> = impl Clone; + | ^^^^^^^^^^ + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0478`. diff --git a/src/test/ui/generic-associated-types/issue-90014.rs b/src/test/ui/generic-associated-types/issue-90014.rs new file mode 100644 index 0000000000000..f110b069383d3 --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-90014.rs @@ -0,0 +1,22 @@ +// edition:2018 + +#![feature(generic_associated_types)] +#![feature(type_alias_impl_trait)] + +use std::future::Future; + +trait MakeFut { + type Fut<'a> where Self: 'a; + fn make_fut<'a>(&'a self) -> Self::Fut<'a>; +} + +impl MakeFut for &'_ mut () { + type Fut<'a> = impl Future; + //~^ ERROR: the type `&mut ()` does not fulfill the required lifetime + + fn make_fut<'a>(&'a self) -> Self::Fut<'a> { + async { () } + } +} + +fn main() {} diff --git a/src/test/ui/generic-associated-types/issue-90014.stderr b/src/test/ui/generic-associated-types/issue-90014.stderr new file mode 100644 index 0000000000000..125d817e351f4 --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-90014.stderr @@ -0,0 +1,15 @@ +error[E0477]: the type `&mut ()` does not fulfill the required lifetime + --> $DIR/issue-90014.rs:14:5 + | +LL | type Fut<'a> = impl Future; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +note: type must outlive the lifetime `'a` as defined here + --> $DIR/issue-90014.rs:14:14 + | +LL | type Fut<'a> = impl Future; + | ^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0477`. From 05db283453669d49a6ca020a302458741352c2f9 Mon Sep 17 00:00:00 2001 From: Eric Huss Date: Tue, 9 Nov 2021 00:22:06 -0800 Subject: [PATCH 6/6] Update cargo --- Cargo.lock | 8 ++++---- src/tools/cargo | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6f95dae42a4ab..7cd07e3847282 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -888,9 +888,9 @@ dependencies = [ [[package]] name = "curl" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aaa3b8db7f3341ddef15786d250106334d4a6c4b0ae4a46cd77082777d9849b9" +checksum = "877cc2f9b8367e32b6dabb9d581557e651cb3aa693a37f8679091bbf42687d5d" dependencies = [ "curl-sys", "libc", @@ -903,9 +903,9 @@ dependencies = [ [[package]] name = "curl-sys" -version = "0.4.49+curl-7.79.1" +version = "0.4.50+curl-7.79.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0f44960aea24a786a46907b8824ebc0e66ca06bf4e4978408c7499620343483" +checksum = "4856b76919dd599f31236bb18db5f5bd36e2ce131e64f857ca5c259665b76171" dependencies = [ "cc", "libc", diff --git a/src/tools/cargo b/src/tools/cargo index 94ca096afbf25..2e2a16e983f59 160000 --- a/src/tools/cargo +++ b/src/tools/cargo @@ -1 +1 @@ -Subproject commit 94ca096afbf25f670e76e07dca754fcfe27134be +Subproject commit 2e2a16e983f597da62bc132eb191bc3276d4b1bb