From 101dd7bad9432730fa2f625ae43afcc2929457d4 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 23 Dec 2019 05:13:46 +0900 Subject: [PATCH 1/8] Use `is_none` instead of `if let` --- src/librustc/traits/error_reporting.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustc/traits/error_reporting.rs b/src/librustc/traits/error_reporting.rs index b299fd6117e41..aabf1d625a8a8 100644 --- a/src/librustc/traits/error_reporting.rs +++ b/src/librustc/traits/error_reporting.rs @@ -2289,7 +2289,7 @@ impl<'a, 'tcx> InferCtxt<'a, 'tcx> { let span = self.tcx.def_span(generator_did); // Do not ICE on closure typeck (#66868). - if let None = self.tcx.hir().as_local_hir_id(generator_did) { + if self.tcx.hir().as_local_hir_id(generator_did).is_none() { return false; } From 7c485ccfad968ba6fe226a59f9337adbc158dd6b Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 23 Dec 2019 07:35:18 +0900 Subject: [PATCH 2/8] Add test for issue-61747 --- src/test/ui/const-generics/issues/issue-61747.rs | 16 ++++++++++++++++ .../ui/const-generics/issues/issue-61747.stderr | 8 ++++++++ 2 files changed, 24 insertions(+) create mode 100644 src/test/ui/const-generics/issues/issue-61747.rs create mode 100644 src/test/ui/const-generics/issues/issue-61747.stderr diff --git a/src/test/ui/const-generics/issues/issue-61747.rs b/src/test/ui/const-generics/issues/issue-61747.rs new file mode 100644 index 0000000000000..cab87200b5022 --- /dev/null +++ b/src/test/ui/const-generics/issues/issue-61747.rs @@ -0,0 +1,16 @@ +// check-pass + +#![feature(const_generics)] +//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash + +struct Const; + +impl Const<{C}> { + fn successor() -> Const<{C + 1}> { + Const + } +} + +fn main() { + Const::<1>::successor(); +} diff --git a/src/test/ui/const-generics/issues/issue-61747.stderr b/src/test/ui/const-generics/issues/issue-61747.stderr new file mode 100644 index 0000000000000..ccf36a7f805ec --- /dev/null +++ b/src/test/ui/const-generics/issues/issue-61747.stderr @@ -0,0 +1,8 @@ +warning: the feature `const_generics` is incomplete and may cause the compiler to crash + --> $DIR/issue-61747.rs:3:12 + | +LL | #![feature(const_generics)] + | ^^^^^^^^^^^^^^ + | + = note: `#[warn(incomplete_features)]` on by default + From 96253c2d15d5f9ed1e6e63a97ac5f705c8fc4421 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 23 Dec 2019 07:36:02 +0900 Subject: [PATCH 3/8] Add test for issue-66205 --- src/test/ui/const-generics/issues/issue-66205.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/test/ui/const-generics/issues/issue-66205.rs diff --git a/src/test/ui/const-generics/issues/issue-66205.rs b/src/test/ui/const-generics/issues/issue-66205.rs new file mode 100644 index 0000000000000..2e47b4d1882f2 --- /dev/null +++ b/src/test/ui/const-generics/issues/issue-66205.rs @@ -0,0 +1,10 @@ +// check-pass + +#![allow(incomplete_features, dead_code, unconditional_recursion)] +#![feature(const_generics)] + +fn fact() { + fact::<{ N - 1 }>(); +} + +fn main() {} From 6ec3a63bb287d11849b2fc3546793437bbbbd865 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 23 Dec 2019 07:36:30 +0900 Subject: [PATCH 4/8] Add test for issue-66270 --- .../issue-66270-pat-struct-parser-recovery.rs | 14 ++++++++++++++ .../issue-66270-pat-struct-parser-recovery.stderr | 8 ++++++++ 2 files changed, 22 insertions(+) create mode 100644 src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.rs create mode 100644 src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.stderr diff --git a/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.rs b/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.rs new file mode 100644 index 0000000000000..48a8e04829a0a --- /dev/null +++ b/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.rs @@ -0,0 +1,14 @@ +// Regression test for #66270, fixed by #66246 + +struct Bug { + incorrect_field: 0, + //~^ ERROR expected type +} + +struct Empty {} + +fn main() { + let Bug { + any_field: Empty {}, + } = Bug {}; +} diff --git a/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.stderr b/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.stderr new file mode 100644 index 0000000000000..fef0f3c0e06ef --- /dev/null +++ b/src/test/ui/pattern/issue-66270-pat-struct-parser-recovery.stderr @@ -0,0 +1,8 @@ +error: expected type, found `0` + --> $DIR/issue-66270-pat-struct-parser-recovery.rs:4:22 + | +LL | incorrect_field: 0, + | ^ expected type + +error: aborting due to previous error + From 3265dc7c29dbcfe7f2dbff26842fd4b8d9fd04d0 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 23 Dec 2019 07:36:59 +0900 Subject: [PATCH 5/8] Add test for issue-66868 --- .../auxiliary/issue_66868_closure_typeck.rs | 25 +++++++++++++++++++ .../ui/typeck/issue-66868-closure-typeck.rs | 15 +++++++++++ .../typeck/issue-66868-closure-typeck.stderr | 22 ++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 src/test/ui/typeck/auxiliary/issue_66868_closure_typeck.rs create mode 100644 src/test/ui/typeck/issue-66868-closure-typeck.rs create mode 100644 src/test/ui/typeck/issue-66868-closure-typeck.stderr diff --git a/src/test/ui/typeck/auxiliary/issue_66868_closure_typeck.rs b/src/test/ui/typeck/auxiliary/issue_66868_closure_typeck.rs new file mode 100644 index 0000000000000..bbeb7d431f6d6 --- /dev/null +++ b/src/test/ui/typeck/auxiliary/issue_66868_closure_typeck.rs @@ -0,0 +1,25 @@ +// edition:2018 + +#![crate_type = "lib"] + +use std::{ + future::Future, + pin::Pin, + sync::RwLock, + task::{Context, Poll}, +}; + +struct S {} + +impl Future for S { + type Output = (); + fn poll(self: Pin<&mut Self>, _: &mut Context) -> Poll { + Poll::Pending + } +} + +pub async fn f() { + let fo = RwLock::new(S {}); + + (&mut *fo.write().unwrap()).await; +} diff --git a/src/test/ui/typeck/issue-66868-closure-typeck.rs b/src/test/ui/typeck/issue-66868-closure-typeck.rs new file mode 100644 index 0000000000000..322b5c82ec07d --- /dev/null +++ b/src/test/ui/typeck/issue-66868-closure-typeck.rs @@ -0,0 +1,15 @@ +// Fixed by #67071 +// aux-build: issue_66868_closure_typeck.rs +// edition:2018 + +extern crate issue_66868_closure_typeck; + +pub fn g(task: T) +where + T: Send, +{ +} + +fn main() { + g(issue_66868_closure_typeck::f()); //~ ERROR: cannot be sent between threads safely +} diff --git a/src/test/ui/typeck/issue-66868-closure-typeck.stderr b/src/test/ui/typeck/issue-66868-closure-typeck.stderr new file mode 100644 index 0000000000000..d9f4b6511d51b --- /dev/null +++ b/src/test/ui/typeck/issue-66868-closure-typeck.stderr @@ -0,0 +1,22 @@ +error[E0277]: `std::sync::RwLockWriteGuard<'_, issue_66868_closure_typeck::S>` cannot be sent between threads safely + --> $DIR/issue-66868-closure-typeck.rs:14:5 + | +LL | pub fn g(task: T) + | - +LL | where +LL | T: Send, + | ---- required by this bound in `g` +... +LL | g(issue_66868_closure_typeck::f()); + | ^ `std::sync::RwLockWriteGuard<'_, issue_66868_closure_typeck::S>` cannot be sent between threads safely + | + = help: within `impl std::future::Future`, the trait `std::marker::Send` is not implemented for `std::sync::RwLockWriteGuard<'_, issue_66868_closure_typeck::S>` + = note: required because it appears within the type `for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5> {std::sync::RwLock, &'r std::sync::RwLock, std::sync::RwLock, std::result::Result, std::sync::PoisonError>>, &'t1 mut std::sync::RwLockWriteGuard<'t2, issue_66868_closure_typeck::S>, std::sync::RwLockWriteGuard<'t3, issue_66868_closure_typeck::S>, issue_66868_closure_typeck::S, &'t4 mut issue_66868_closure_typeck::S, &'t5 mut issue_66868_closure_typeck::S, ()}` + = note: required because it appears within the type `[static generator@DefId(14:16 ~ issue_66868_closure_typeck[8787]::f[0]::{{closure}}[0]) for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5> {std::sync::RwLock, &'r std::sync::RwLock, std::sync::RwLock, std::result::Result, std::sync::PoisonError>>, &'t1 mut std::sync::RwLockWriteGuard<'t2, issue_66868_closure_typeck::S>, std::sync::RwLockWriteGuard<'t3, issue_66868_closure_typeck::S>, issue_66868_closure_typeck::S, &'t4 mut issue_66868_closure_typeck::S, &'t5 mut issue_66868_closure_typeck::S, ()}]` + = note: required because it appears within the type `std::future::GenFuture<[static generator@DefId(14:16 ~ issue_66868_closure_typeck[8787]::f[0]::{{closure}}[0]) for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5> {std::sync::RwLock, &'r std::sync::RwLock, std::sync::RwLock, std::result::Result, std::sync::PoisonError>>, &'t1 mut std::sync::RwLockWriteGuard<'t2, issue_66868_closure_typeck::S>, std::sync::RwLockWriteGuard<'t3, issue_66868_closure_typeck::S>, issue_66868_closure_typeck::S, &'t4 mut issue_66868_closure_typeck::S, &'t5 mut issue_66868_closure_typeck::S, ()}]>` + = note: required because it appears within the type `impl std::future::Future` + = note: required because it appears within the type `impl std::future::Future` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. From 40bec994122df5e020525abda543f5476e035b8f Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 23 Dec 2019 07:37:16 +0900 Subject: [PATCH 6/8] Add test for issue-67424 --- .../generic-associated-types/issue-67424.rs | 13 ++++++++++++ .../issue-67424.stderr | 20 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 src/test/ui/generic-associated-types/issue-67424.rs create mode 100644 src/test/ui/generic-associated-types/issue-67424.stderr diff --git a/src/test/ui/generic-associated-types/issue-67424.rs b/src/test/ui/generic-associated-types/issue-67424.rs new file mode 100644 index 0000000000000..9b616b8abc2ee --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-67424.rs @@ -0,0 +1,13 @@ +// Fixed by #67160 + +trait Trait1 { + type A; +} + +trait Trait2 { + type Type1: Trait1; + //~^ ERROR: generic associated types are unstable + //~| ERROR: type-generic associated types are not yet implemented +} + +fn main() {} diff --git a/src/test/ui/generic-associated-types/issue-67424.stderr b/src/test/ui/generic-associated-types/issue-67424.stderr new file mode 100644 index 0000000000000..59ff8ac0a3a70 --- /dev/null +++ b/src/test/ui/generic-associated-types/issue-67424.stderr @@ -0,0 +1,20 @@ +error[E0658]: generic associated types are unstable + --> $DIR/issue-67424.rs:8:5 + | +LL | type Type1: Trait1; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/44265 + = help: add `#![feature(generic_associated_types)]` to the crate attributes to enable + +error: type-generic associated types are not yet implemented + --> $DIR/issue-67424.rs:8:5 + | +LL | type Type1: Trait1; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: for more information, see https://github.com/rust-lang/rust/issues/44265 + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0658`. From e55ed792f134f45b5b9d6f445ad817715f336c96 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 23 Dec 2019 08:24:11 +0900 Subject: [PATCH 7/8] Apply suggestion from Centril Co-Authored-By: Mazdak Farrokhzad --- src/test/ui/const-generics/issues/issue-61747.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/ui/const-generics/issues/issue-61747.rs b/src/test/ui/const-generics/issues/issue-61747.rs index cab87200b5022..64674bb894e1f 100644 --- a/src/test/ui/const-generics/issues/issue-61747.rs +++ b/src/test/ui/const-generics/issues/issue-61747.rs @@ -12,5 +12,5 @@ impl Const<{C}> { } fn main() { - Const::<1>::successor(); + let _x: Const::<2> = Const::<1>::successor(); } From ac05c84ad705ec7983c4eae72ba0817bc48699d8 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Mon, 23 Dec 2019 10:18:18 +0900 Subject: [PATCH 8/8] Bless test --- src/test/ui/typeck/issue-66868-closure-typeck.stderr | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/ui/typeck/issue-66868-closure-typeck.stderr b/src/test/ui/typeck/issue-66868-closure-typeck.stderr index d9f4b6511d51b..42322df2eafa8 100644 --- a/src/test/ui/typeck/issue-66868-closure-typeck.stderr +++ b/src/test/ui/typeck/issue-66868-closure-typeck.stderr @@ -12,8 +12,8 @@ LL | g(issue_66868_closure_typeck::f()); | = help: within `impl std::future::Future`, the trait `std::marker::Send` is not implemented for `std::sync::RwLockWriteGuard<'_, issue_66868_closure_typeck::S>` = note: required because it appears within the type `for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5> {std::sync::RwLock, &'r std::sync::RwLock, std::sync::RwLock, std::result::Result, std::sync::PoisonError>>, &'t1 mut std::sync::RwLockWriteGuard<'t2, issue_66868_closure_typeck::S>, std::sync::RwLockWriteGuard<'t3, issue_66868_closure_typeck::S>, issue_66868_closure_typeck::S, &'t4 mut issue_66868_closure_typeck::S, &'t5 mut issue_66868_closure_typeck::S, ()}` - = note: required because it appears within the type `[static generator@DefId(14:16 ~ issue_66868_closure_typeck[8787]::f[0]::{{closure}}[0]) for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5> {std::sync::RwLock, &'r std::sync::RwLock, std::sync::RwLock, std::result::Result, std::sync::PoisonError>>, &'t1 mut std::sync::RwLockWriteGuard<'t2, issue_66868_closure_typeck::S>, std::sync::RwLockWriteGuard<'t3, issue_66868_closure_typeck::S>, issue_66868_closure_typeck::S, &'t4 mut issue_66868_closure_typeck::S, &'t5 mut issue_66868_closure_typeck::S, ()}]` - = note: required because it appears within the type `std::future::GenFuture<[static generator@DefId(14:16 ~ issue_66868_closure_typeck[8787]::f[0]::{{closure}}[0]) for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5> {std::sync::RwLock, &'r std::sync::RwLock, std::sync::RwLock, std::result::Result, std::sync::PoisonError>>, &'t1 mut std::sync::RwLockWriteGuard<'t2, issue_66868_closure_typeck::S>, std::sync::RwLockWriteGuard<'t3, issue_66868_closure_typeck::S>, issue_66868_closure_typeck::S, &'t4 mut issue_66868_closure_typeck::S, &'t5 mut issue_66868_closure_typeck::S, ()}]>` + = note: required because it appears within the type `[static generator@DefId(15:16 ~ issue_66868_closure_typeck[8787]::f[0]::{{closure}}[0]) for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5> {std::sync::RwLock, &'r std::sync::RwLock, std::sync::RwLock, std::result::Result, std::sync::PoisonError>>, &'t1 mut std::sync::RwLockWriteGuard<'t2, issue_66868_closure_typeck::S>, std::sync::RwLockWriteGuard<'t3, issue_66868_closure_typeck::S>, issue_66868_closure_typeck::S, &'t4 mut issue_66868_closure_typeck::S, &'t5 mut issue_66868_closure_typeck::S, ()}]` + = note: required because it appears within the type `std::future::GenFuture<[static generator@DefId(15:16 ~ issue_66868_closure_typeck[8787]::f[0]::{{closure}}[0]) for<'r, 's, 't0, 't1, 't2, 't3, 't4, 't5> {std::sync::RwLock, &'r std::sync::RwLock, std::sync::RwLock, std::result::Result, std::sync::PoisonError>>, &'t1 mut std::sync::RwLockWriteGuard<'t2, issue_66868_closure_typeck::S>, std::sync::RwLockWriteGuard<'t3, issue_66868_closure_typeck::S>, issue_66868_closure_typeck::S, &'t4 mut issue_66868_closure_typeck::S, &'t5 mut issue_66868_closure_typeck::S, ()}]>` = note: required because it appears within the type `impl std::future::Future` = note: required because it appears within the type `impl std::future::Future`