From eb9abea295474d74997cc035d99f33a5249a0400 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Fri, 5 Mar 2021 18:34:12 +0900 Subject: Move some tests to more suitable subdirs --- src/test/ui/abi/nullable-pointer-ffi-compat.rs | 28 ++++++ src/test/ui/associated-types/issue-76179.rs | 19 ++++ src/test/ui/async-await/issue-74047.rs | 17 ++++ src/test/ui/async-await/issue-74047.stderr | 12 +++ src/test/ui/borrowck/issue-42344.rs | 8 ++ src/test/ui/borrowck/issue-42344.stderr | 9 ++ src/test/ui/consts/auxiliary/issue-17718-aux.rs | 10 ++ src/test/ui/consts/issue-17718.rs | 75 +++++++++++++++ src/test/ui/consts/issue-3521.fixed | 13 +++ src/test/ui/consts/issue-3521.rs | 13 +++ src/test/ui/consts/issue-3521.stderr | 12 +++ src/test/ui/impl-bounds-checking.rs | 14 --- src/test/ui/impl-bounds-checking.stderr | 12 --- src/test/ui/issue-6157.rs | 23 ----- src/test/ui/issue-74047.rs | 17 ---- src/test/ui/issue-74047.stderr | 12 --- src/test/ui/issues/auxiliary/issue-17718-aux.rs | 10 -- src/test/ui/issues/issue-15261.rs | 11 --- src/test/ui/issues/issue-17718.rs | 75 --------------- src/test/ui/issues/issue-18661.rs | 19 ---- src/test/ui/issues/issue-2330.rs | 13 --- src/test/ui/issues/issue-2330.stderr | 9 -- src/test/ui/issues/issue-2633-2.rs | 14 --- src/test/ui/issues/issue-2633.rs | 31 ------ src/test/ui/issues/issue-28576.rs | 12 --- src/test/ui/issues/issue-28576.stderr | 20 ---- .../ui/issues/issue-33140-traitobject-crate.rs | 107 --------------------- .../ui/issues/issue-33140-traitobject-crate.stderr | 42 -------- src/test/ui/issues/issue-33140.rs | 47 --------- src/test/ui/issues/issue-33140.stderr | 31 ------ src/test/ui/issues/issue-3521.fixed | 13 --- src/test/ui/issues/issue-3521.rs | 13 --- src/test/ui/issues/issue-3521.stderr | 12 --- src/test/ui/issues/issue-42344.rs | 8 -- src/test/ui/issues/issue-42344.stderr | 9 -- src/test/ui/issues/issue-44373-2.rs | 11 --- src/test/ui/issues/issue-44373.rs | 5 - src/test/ui/issues/issue-44373.stderr | 13 --- src/test/ui/issues/issue-52992.rs | 25 ----- src/test/ui/issues/issue-7222.rs | 12 --- src/test/ui/issues/issue-76179.rs | 19 ---- .../ui/lint-expr-stmt-attrs-for-early-lints.rs | 14 --- .../lint/lint-expr-stmt-attrs-for-early-lints.rs | 14 +++ src/test/ui/nll/issue-52992.rs | 25 +++++ src/test/ui/nullable-pointer-ffi-compat.rs | 28 ------ src/test/ui/parser/issue-7222.rs | 12 +++ src/test/ui/regions/issue-6157.rs | 23 +++++ src/test/ui/resolve/issue-2330.rs | 13 +++ src/test/ui/resolve/issue-2330.stderr | 9 ++ src/test/ui/statics/issue-15261.rs | 11 +++ src/test/ui/statics/issue-44373-2.rs | 11 +++ src/test/ui/statics/issue-44373.rs | 5 + src/test/ui/statics/issue-44373.stderr | 13 +++ src/test/ui/traits/impl-bounds-checking.rs | 14 +++ src/test/ui/traits/impl-bounds-checking.stderr | 12 +++ src/test/ui/traits/issue-28576.rs | 12 +++ src/test/ui/traits/issue-28576.stderr | 20 ++++ src/test/ui/traits/issue-33140.rs | 47 +++++++++ src/test/ui/traits/issue-33140.stderr | 31 ++++++ .../traits/object/issue-33140-traitobject-crate.rs | 107 +++++++++++++++++++++ .../object/issue-33140-traitobject-crate.stderr | 42 ++++++++ src/test/ui/try-block.rs | 75 --------------- src/test/ui/try-block/try-block.rs | 75 +++++++++++++++ src/test/ui/tup.rs | 21 ---- src/test/ui/tuple/tup.rs | 21 ++++ src/test/ui/unboxed-closures/issue-18661.rs | 19 ++++ 66 files changed, 752 insertions(+), 797 deletions(-) create mode 100644 src/test/ui/abi/nullable-pointer-ffi-compat.rs create mode 100644 src/test/ui/associated-types/issue-76179.rs create mode 100644 src/test/ui/async-await/issue-74047.rs create mode 100644 src/test/ui/async-await/issue-74047.stderr create mode 100644 src/test/ui/borrowck/issue-42344.rs create mode 100644 src/test/ui/borrowck/issue-42344.stderr create mode 100644 src/test/ui/consts/auxiliary/issue-17718-aux.rs create mode 100644 src/test/ui/consts/issue-17718.rs create mode 100644 src/test/ui/consts/issue-3521.fixed create mode 100644 src/test/ui/consts/issue-3521.rs create mode 100644 src/test/ui/consts/issue-3521.stderr delete mode 100644 src/test/ui/impl-bounds-checking.rs delete mode 100644 src/test/ui/impl-bounds-checking.stderr delete mode 100644 src/test/ui/issue-6157.rs delete mode 100644 src/test/ui/issue-74047.rs delete mode 100644 src/test/ui/issue-74047.stderr delete mode 100644 src/test/ui/issues/auxiliary/issue-17718-aux.rs delete mode 100644 src/test/ui/issues/issue-15261.rs delete mode 100644 src/test/ui/issues/issue-17718.rs delete mode 100644 src/test/ui/issues/issue-18661.rs delete mode 100644 src/test/ui/issues/issue-2330.rs delete mode 100644 src/test/ui/issues/issue-2330.stderr delete mode 100644 src/test/ui/issues/issue-2633-2.rs delete mode 100644 src/test/ui/issues/issue-2633.rs delete mode 100644 src/test/ui/issues/issue-28576.rs delete mode 100644 src/test/ui/issues/issue-28576.stderr delete mode 100644 src/test/ui/issues/issue-33140-traitobject-crate.rs delete mode 100644 src/test/ui/issues/issue-33140-traitobject-crate.stderr delete mode 100644 src/test/ui/issues/issue-33140.rs delete mode 100644 src/test/ui/issues/issue-33140.stderr delete mode 100644 src/test/ui/issues/issue-3521.fixed delete mode 100644 src/test/ui/issues/issue-3521.rs delete mode 100644 src/test/ui/issues/issue-3521.stderr delete mode 100644 src/test/ui/issues/issue-42344.rs delete mode 100644 src/test/ui/issues/issue-42344.stderr delete mode 100644 src/test/ui/issues/issue-44373-2.rs delete mode 100644 src/test/ui/issues/issue-44373.rs delete mode 100644 src/test/ui/issues/issue-44373.stderr delete mode 100644 src/test/ui/issues/issue-52992.rs delete mode 100644 src/test/ui/issues/issue-7222.rs delete mode 100644 src/test/ui/issues/issue-76179.rs delete mode 100644 src/test/ui/lint-expr-stmt-attrs-for-early-lints.rs create mode 100644 src/test/ui/lint/lint-expr-stmt-attrs-for-early-lints.rs create mode 100644 src/test/ui/nll/issue-52992.rs delete mode 100644 src/test/ui/nullable-pointer-ffi-compat.rs create mode 100644 src/test/ui/parser/issue-7222.rs create mode 100644 src/test/ui/regions/issue-6157.rs create mode 100644 src/test/ui/resolve/issue-2330.rs create mode 100644 src/test/ui/resolve/issue-2330.stderr create mode 100644 src/test/ui/statics/issue-15261.rs create mode 100644 src/test/ui/statics/issue-44373-2.rs create mode 100644 src/test/ui/statics/issue-44373.rs create mode 100644 src/test/ui/statics/issue-44373.stderr create mode 100644 src/test/ui/traits/impl-bounds-checking.rs create mode 100644 src/test/ui/traits/impl-bounds-checking.stderr create mode 100644 src/test/ui/traits/issue-28576.rs create mode 100644 src/test/ui/traits/issue-28576.stderr create mode 100644 src/test/ui/traits/issue-33140.rs create mode 100644 src/test/ui/traits/issue-33140.stderr create mode 100644 src/test/ui/traits/object/issue-33140-traitobject-crate.rs create mode 100644 src/test/ui/traits/object/issue-33140-traitobject-crate.stderr delete mode 100644 src/test/ui/try-block.rs create mode 100644 src/test/ui/try-block/try-block.rs delete mode 100644 src/test/ui/tup.rs create mode 100644 src/test/ui/tuple/tup.rs create mode 100644 src/test/ui/unboxed-closures/issue-18661.rs (limited to 'src/test') diff --git a/src/test/ui/abi/nullable-pointer-ffi-compat.rs b/src/test/ui/abi/nullable-pointer-ffi-compat.rs new file mode 100644 index 00000000000..0647a18c3c4 --- /dev/null +++ b/src/test/ui/abi/nullable-pointer-ffi-compat.rs @@ -0,0 +1,28 @@ +// run-pass +// #11303, #11040: +// This would previously crash on i686 Linux due to abi differences +// between returning an Option and T, where T is a non nullable +// pointer. +// If we have an enum with two variants such that one is zero sized +// and the other contains a nonnullable pointer, we don't use a +// separate discriminant. Instead we use that pointer field to differentiate +// between the 2 cases. +// Also, if the variant with the nonnullable pointer has no other fields +// then we simply express the enum as just a pointer and not wrap it +// in a struct. + + +use std::mem; + +#[inline(never)] +extern "C" fn foo(x: &isize) -> Option<&isize> { Some(x) } + +static FOO: isize = 0xDEADBEE; + +pub fn main() { + unsafe { + let f: extern "C" fn(&isize) -> &isize = + mem::transmute(foo as extern "C" fn(&isize) -> Option<&isize>); + assert_eq!(*f(&FOO), FOO); + } +} diff --git a/src/test/ui/associated-types/issue-76179.rs b/src/test/ui/associated-types/issue-76179.rs new file mode 100644 index 00000000000..0e086968b90 --- /dev/null +++ b/src/test/ui/associated-types/issue-76179.rs @@ -0,0 +1,19 @@ +// check-pass + +#![feature(associated_type_defaults)] + +use std::io::Read; + +trait View { + type Deserializers: Deserializer; + type RequestParams = DefaultRequestParams; +} + +struct DefaultRequestParams; + +trait Deserializer { + type Item; + fn deserialize(r: impl Read) -> Self::Item; +} + +fn main() {} diff --git a/src/test/ui/async-await/issue-74047.rs b/src/test/ui/async-await/issue-74047.rs new file mode 100644 index 00000000000..2e4f3e675c3 --- /dev/null +++ b/src/test/ui/async-await/issue-74047.rs @@ -0,0 +1,17 @@ +// edition:2018 + +use std::convert::{TryFrom, TryInto}; +use std::io; + +pub struct MyStream; +pub struct OtherStream; + +pub async fn connect() -> io::Result { + let stream: MyStream = OtherStream.try_into()?; + Ok(stream) +} + +impl TryFrom for MyStream {} +//~^ ERROR: missing + +fn main() {} diff --git a/src/test/ui/async-await/issue-74047.stderr b/src/test/ui/async-await/issue-74047.stderr new file mode 100644 index 00000000000..28174825d8b --- /dev/null +++ b/src/test/ui/async-await/issue-74047.stderr @@ -0,0 +1,12 @@ +error[E0046]: not all trait items implemented, missing: `Error`, `try_from` + --> $DIR/issue-74047.rs:14:1 + | +LL | impl TryFrom for MyStream {} + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `Error`, `try_from` in implementation + | + = help: implement the missing item: `type Error = Type;` + = help: implement the missing item: `fn try_from(_: T) -> Result>::Error> { todo!() }` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0046`. diff --git a/src/test/ui/borrowck/issue-42344.rs b/src/test/ui/borrowck/issue-42344.rs new file mode 100644 index 00000000000..a7636edf2f8 --- /dev/null +++ b/src/test/ui/borrowck/issue-42344.rs @@ -0,0 +1,8 @@ +static TAB: [&mut [u8]; 0] = []; + +pub unsafe fn test() { + TAB[0].iter_mut(); + //~^ ERROR cannot borrow `*TAB[_]` as mutable, as `TAB` is an immutable static item [E0596] +} + +pub fn main() {} diff --git a/src/test/ui/borrowck/issue-42344.stderr b/src/test/ui/borrowck/issue-42344.stderr new file mode 100644 index 00000000000..5cffa1b5121 --- /dev/null +++ b/src/test/ui/borrowck/issue-42344.stderr @@ -0,0 +1,9 @@ +error[E0596]: cannot borrow `*TAB[_]` as mutable, as `TAB` is an immutable static item + --> $DIR/issue-42344.rs:4:5 + | +LL | TAB[0].iter_mut(); + | ^^^^^^ cannot borrow as mutable + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0596`. diff --git a/src/test/ui/consts/auxiliary/issue-17718-aux.rs b/src/test/ui/consts/auxiliary/issue-17718-aux.rs new file mode 100644 index 00000000000..91abdbff868 --- /dev/null +++ b/src/test/ui/consts/auxiliary/issue-17718-aux.rs @@ -0,0 +1,10 @@ +use std::sync::atomic; + +pub const C1: usize = 1; +pub const C2: atomic::AtomicUsize = atomic::AtomicUsize::new(0); +pub const C3: fn() = { fn foo() {} foo }; +pub const C4: usize = C1 * C1 + C1 / C1; +pub const C5: &'static usize = &C4; + +pub static S1: usize = 3; +pub static S2: atomic::AtomicUsize = atomic::AtomicUsize::new(0); diff --git a/src/test/ui/consts/issue-17718.rs b/src/test/ui/consts/issue-17718.rs new file mode 100644 index 00000000000..c6341d80844 --- /dev/null +++ b/src/test/ui/consts/issue-17718.rs @@ -0,0 +1,75 @@ +// run-pass +#![allow(dead_code)] +// aux-build:issue-17718-aux.rs + +extern crate issue_17718_aux as other; + +use std::sync::atomic::{AtomicUsize, Ordering}; + +const C1: usize = 1; +const C2: AtomicUsize = AtomicUsize::new(0); +const C3: fn() = foo; +const C4: usize = C1 * C1 + C1 / C1; +const C5: &'static usize = &C4; +const C6: usize = { + const C: usize = 3; + C +}; + +static S1: usize = 3; +static S2: AtomicUsize = AtomicUsize::new(0); + +mod test { + static A: usize = 4; + static B: &'static usize = &A; + static C: &'static usize = &(A); +} + +fn foo() {} + +fn main() { + assert_eq!(C1, 1); + assert_eq!(C3(), ()); + assert_eq!(C2.fetch_add(1, Ordering::SeqCst), 0); + assert_eq!(C2.fetch_add(1, Ordering::SeqCst), 0); + assert_eq!(C4, 2); + assert_eq!(*C5, 2); + assert_eq!(C6, 3); + assert_eq!(S1, 3); + assert_eq!(S2.fetch_add(1, Ordering::SeqCst), 0); + assert_eq!(S2.fetch_add(1, Ordering::SeqCst), 1); + + match 1 { + C1 => {} + _ => unreachable!(), + } + + let _a = C1; + let _a = C2; + let _a = C3; + let _a = C4; + let _a = C5; + let _a = C6; + let _a = S1; + + assert_eq!(other::C1, 1); + assert_eq!(other::C3(), ()); + assert_eq!(other::C2.fetch_add(1, Ordering::SeqCst), 0); + assert_eq!(other::C2.fetch_add(1, Ordering::SeqCst), 0); + assert_eq!(other::C4, 2); + assert_eq!(*other::C5, 2); + assert_eq!(other::S1, 3); + assert_eq!(other::S2.fetch_add(1, Ordering::SeqCst), 0); + assert_eq!(other::S2.fetch_add(1, Ordering::SeqCst), 1); + + let _a = other::C1; + let _a = other::C2; + let _a = other::C3; + let _a = other::C4; + let _a = other::C5; + + match 1 { + other::C1 => {} + _ => unreachable!(), + } +} diff --git a/src/test/ui/consts/issue-3521.fixed b/src/test/ui/consts/issue-3521.fixed new file mode 100644 index 00000000000..f76106dfff1 --- /dev/null +++ b/src/test/ui/consts/issue-3521.fixed @@ -0,0 +1,13 @@ +// run-rustfix +fn main() { + #[allow(non_upper_case_globals)] + const foo: isize = 100; + + #[derive(Debug)] + enum Stuff { + Bar = foo + //~^ ERROR attempt to use a non-constant value in a constant + } + + println!("{:?}", Stuff::Bar); +} diff --git a/src/test/ui/consts/issue-3521.rs b/src/test/ui/consts/issue-3521.rs new file mode 100644 index 00000000000..c425a22df91 --- /dev/null +++ b/src/test/ui/consts/issue-3521.rs @@ -0,0 +1,13 @@ +// run-rustfix +fn main() { + #[allow(non_upper_case_globals)] + let foo: isize = 100; + + #[derive(Debug)] + enum Stuff { + Bar = foo + //~^ ERROR attempt to use a non-constant value in a constant + } + + println!("{:?}", Stuff::Bar); +} diff --git a/src/test/ui/consts/issue-3521.stderr b/src/test/ui/consts/issue-3521.stderr new file mode 100644 index 00000000000..aa42772f12d --- /dev/null +++ b/src/test/ui/consts/issue-3521.stderr @@ -0,0 +1,12 @@ +error[E0435]: attempt to use a non-constant value in a constant + --> $DIR/issue-3521.rs:8:15 + | +LL | let foo: isize = 100; + | ------- help: consider using `const` instead of `let`: `const foo` +... +LL | Bar = foo + | ^^^ non-constant value + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0435`. diff --git a/src/test/ui/impl-bounds-checking.rs b/src/test/ui/impl-bounds-checking.rs deleted file mode 100644 index 5e65a27bf14..00000000000 --- a/src/test/ui/impl-bounds-checking.rs +++ /dev/null @@ -1,14 +0,0 @@ -pub trait Clone2 { - fn clone(&self) -> Self; -} - - -trait Getter { - fn get(&self) -> T; -} - -impl Getter for isize { //~ ERROR `isize: Clone2` is not satisfied - fn get(&self) -> isize { *self } -} - -fn main() { } diff --git a/src/test/ui/impl-bounds-checking.stderr b/src/test/ui/impl-bounds-checking.stderr deleted file mode 100644 index 8698ed6e875..00000000000 --- a/src/test/ui/impl-bounds-checking.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0277]: the trait bound `isize: Clone2` is not satisfied - --> $DIR/impl-bounds-checking.rs:10:6 - | -LL | trait Getter { - | ------ required by this bound in `Getter` -... -LL | impl Getter for isize { - | ^^^^^^^^^^^^^ the trait `Clone2` is not implemented for `isize` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/issue-6157.rs b/src/test/ui/issue-6157.rs deleted file mode 100644 index b7a44ed8623..00000000000 --- a/src/test/ui/issue-6157.rs +++ /dev/null @@ -1,23 +0,0 @@ -// run-pass -// pretty-expanded FIXME #23616 - -pub trait OpInt { fn call(&mut self, _: isize, _: isize) -> isize; } - -impl OpInt for F where F: FnMut(isize, isize) -> isize { - fn call(&mut self, a:isize, b:isize) -> isize { - (*self)(a, b) - } -} - -fn squarei<'a>(x: isize, op: &'a mut dyn OpInt) -> isize { op.call(x, x) } - -fn muli(x:isize, y:isize) -> isize { x * y } - -pub fn main() { - let mut f = |x, y| muli(x, y); - { - let g = &mut f; - let h = g as &mut dyn OpInt; - squarei(3, h); - } -} diff --git a/src/test/ui/issue-74047.rs b/src/test/ui/issue-74047.rs deleted file mode 100644 index 2e4f3e675c3..00000000000 --- a/src/test/ui/issue-74047.rs +++ /dev/null @@ -1,17 +0,0 @@ -// edition:2018 - -use std::convert::{TryFrom, TryInto}; -use std::io; - -pub struct MyStream; -pub struct OtherStream; - -pub async fn connect() -> io::Result { - let stream: MyStream = OtherStream.try_into()?; - Ok(stream) -} - -impl TryFrom for MyStream {} -//~^ ERROR: missing - -fn main() {} diff --git a/src/test/ui/issue-74047.stderr b/src/test/ui/issue-74047.stderr deleted file mode 100644 index 28174825d8b..00000000000 --- a/src/test/ui/issue-74047.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0046]: not all trait items implemented, missing: `Error`, `try_from` - --> $DIR/issue-74047.rs:14:1 - | -LL | impl TryFrom for MyStream {} - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `Error`, `try_from` in implementation - | - = help: implement the missing item: `type Error = Type;` - = help: implement the missing item: `fn try_from(_: T) -> Result>::Error> { todo!() }` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0046`. diff --git a/src/test/ui/issues/auxiliary/issue-17718-aux.rs b/src/test/ui/issues/auxiliary/issue-17718-aux.rs deleted file mode 100644 index 91abdbff868..00000000000 --- a/src/test/ui/issues/auxiliary/issue-17718-aux.rs +++ /dev/null @@ -1,10 +0,0 @@ -use std::sync::atomic; - -pub const C1: usize = 1; -pub const C2: atomic::AtomicUsize = atomic::AtomicUsize::new(0); -pub const C3: fn() = { fn foo() {} foo }; -pub const C4: usize = C1 * C1 + C1 / C1; -pub const C5: &'static usize = &C4; - -pub static S1: usize = 3; -pub static S2: atomic::AtomicUsize = atomic::AtomicUsize::new(0); diff --git a/src/test/ui/issues/issue-15261.rs b/src/test/ui/issues/issue-15261.rs deleted file mode 100644 index ec413f6d1d2..00000000000 --- a/src/test/ui/issues/issue-15261.rs +++ /dev/null @@ -1,11 +0,0 @@ -// build-pass -#![allow(dead_code)] -#![allow(non_upper_case_globals)] - -// pretty-expanded FIXME #23616 - -static mut n_mut: usize = 0; - -static n: &'static usize = unsafe{ &n_mut }; - -fn main() {} diff --git a/src/test/ui/issues/issue-17718.rs b/src/test/ui/issues/issue-17718.rs deleted file mode 100644 index c6341d80844..00000000000 --- a/src/test/ui/issues/issue-17718.rs +++ /dev/null @@ -1,75 +0,0 @@ -// run-pass -#![allow(dead_code)] -// aux-build:issue-17718-aux.rs - -extern crate issue_17718_aux as other; - -use std::sync::atomic::{AtomicUsize, Ordering}; - -const C1: usize = 1; -const C2: AtomicUsize = AtomicUsize::new(0); -const C3: fn() = foo; -const C4: usize = C1 * C1 + C1 / C1; -const C5: &'static usize = &C4; -const C6: usize = { - const C: usize = 3; - C -}; - -static S1: usize = 3; -static S2: AtomicUsize = AtomicUsize::new(0); - -mod test { - static A: usize = 4; - static B: &'static usize = &A; - static C: &'static usize = &(A); -} - -fn foo() {} - -fn main() { - assert_eq!(C1, 1); - assert_eq!(C3(), ()); - assert_eq!(C2.fetch_add(1, Ordering::SeqCst), 0); - assert_eq!(C2.fetch_add(1, Ordering::SeqCst), 0); - assert_eq!(C4, 2); - assert_eq!(*C5, 2); - assert_eq!(C6, 3); - assert_eq!(S1, 3); - assert_eq!(S2.fetch_add(1, Ordering::SeqCst), 0); - assert_eq!(S2.fetch_add(1, Ordering::SeqCst), 1); - - match 1 { - C1 => {} - _ => unreachable!(), - } - - let _a = C1; - let _a = C2; - let _a = C3; - let _a = C4; - let _a = C5; - let _a = C6; - let _a = S1; - - assert_eq!(other::C1, 1); - assert_eq!(other::C3(), ()); - assert_eq!(other::C2.fetch_add(1, Ordering::SeqCst), 0); - assert_eq!(other::C2.fetch_add(1, Ordering::SeqCst), 0); - assert_eq!(other::C4, 2); - assert_eq!(*other::C5, 2); - assert_eq!(other::S1, 3); - assert_eq!(other::S2.fetch_add(1, Ordering::SeqCst), 0); - assert_eq!(other::S2.fetch_add(1, Ordering::SeqCst), 1); - - let _a = other::C1; - let _a = other::C2; - let _a = other::C3; - let _a = other::C4; - let _a = other::C5; - - match 1 { - other::C1 => {} - _ => unreachable!(), - } -} diff --git a/src/test/ui/issues/issue-18661.rs b/src/test/ui/issues/issue-18661.rs deleted file mode 100644 index e2427243235..00000000000 --- a/src/test/ui/issues/issue-18661.rs +++ /dev/null @@ -1,19 +0,0 @@ -// run-pass -// Test that param substitutions from the correct environment are -// used when codegenning unboxed closure calls. - -// pretty-expanded FIXME #23616 - -pub fn inside(c: F) { - c(); -} - -// Use different number of type parameters and closure type to trigger -// an obvious ICE when param environments are mixed up -pub fn outside() { - inside(|| {}); -} - -fn main() { - outside::<(),()>(); -} diff --git a/src/test/ui/issues/issue-2330.rs b/src/test/ui/issues/issue-2330.rs deleted file mode 100644 index 4560caba0cf..00000000000 --- a/src/test/ui/issues/issue-2330.rs +++ /dev/null @@ -1,13 +0,0 @@ -enum Chan { } - -trait Channel { - fn send(&self, v: T); -} - -// `Chan` is not a trait, it's an enum -impl Chan for isize { //~ ERROR expected trait, found enum `Chan` - fn send(&self, v: isize) { panic!() } -} - -fn main() { -} diff --git a/src/test/ui/issues/issue-2330.stderr b/src/test/ui/issues/issue-2330.stderr deleted file mode 100644 index 877cf68b586..00000000000 --- a/src/test/ui/issues/issue-2330.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0404]: expected trait, found enum `Chan` - --> $DIR/issue-2330.rs:8:6 - | -LL | impl Chan for isize { - | ^^^^ not a trait - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0404`. diff --git a/src/test/ui/issues/issue-2633-2.rs b/src/test/ui/issues/issue-2633-2.rs deleted file mode 100644 index 02c1a166301..00000000000 --- a/src/test/ui/issues/issue-2633-2.rs +++ /dev/null @@ -1,14 +0,0 @@ -// run-pass -// pretty-expanded FIXME #23616 - -#![feature(box_syntax)] - - -fn a_val(x: Box, y: Box) -> isize { - *x + *y -} - -pub fn main() { - let z: Box<_> = box 22; - a_val(z.clone(), z.clone()); -} diff --git a/src/test/ui/issues/issue-2633.rs b/src/test/ui/issues/issue-2633.rs deleted file mode 100644 index 7e8cea75fc8..00000000000 --- a/src/test/ui/issues/issue-2633.rs +++ /dev/null @@ -1,31 +0,0 @@ -// run-pass -#![allow(dead_code)] -#![allow(non_camel_case_types)] - -#[derive(Copy, Clone)] -struct cat { - meow: extern "Rust" fn(), -} - -fn meow() { - println!("meow") -} - -fn cat() -> cat { - cat { - meow: meow, - } -} - -#[derive(Copy, Clone)] -struct KittyInfo {kitty: cat} - -// Code compiles and runs successfully if we add a + before the first arg -fn nyan(kitty: cat, _kitty_info: KittyInfo) { - (kitty.meow)(); -} - -pub fn main() { - let kitty = cat(); - nyan(kitty, KittyInfo {kitty: kitty}); -} diff --git a/src/test/ui/issues/issue-28576.rs b/src/test/ui/issues/issue-28576.rs deleted file mode 100644 index 972c839b648..00000000000 --- a/src/test/ui/issues/issue-28576.rs +++ /dev/null @@ -1,12 +0,0 @@ -pub trait Foo { - type Assoc; -} - -pub trait Bar: Foo { - fn new(&self, b: & - dyn Bar //~ ERROR the trait `Bar` cannot be made into an object - - ); -} - -fn main() {} diff --git a/src/test/ui/issues/issue-28576.stderr b/src/test/ui/issues/issue-28576.stderr deleted file mode 100644 index 203cd0630eb..00000000000 --- a/src/test/ui/issues/issue-28576.stderr +++ /dev/null @@ -1,20 +0,0 @@ -error[E0038]: the trait `Bar` cannot be made into an object - --> $DIR/issue-28576.rs:7:12 - | -LL | / dyn Bar -LL | | - | |________________________^ `Bar` cannot be made into an object - | -note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit - --> $DIR/issue-28576.rs:5:16 - | -LL | pub trait Bar: Foo { - | --- ^^^^^^^^^^^^^ - | | | | - | | | ...because it uses `Self` as a type parameter - | | ...because it uses `Self` as a type parameter - | this trait cannot be made into an object... - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0038`. diff --git a/src/test/ui/issues/issue-33140-traitobject-crate.rs b/src/test/ui/issues/issue-33140-traitobject-crate.rs deleted file mode 100644 index 46b68f1c9fe..00000000000 --- a/src/test/ui/issues/issue-33140-traitobject-crate.rs +++ /dev/null @@ -1,107 +0,0 @@ -// check-pass - -#![warn(order_dependent_trait_objects)] - -// Check that traitobject 0.1.0 compiles - -//! # traitobject -//! -//! Unsafe helpers for working with raw TraitObjects. - -/// A trait implemented for all trait objects. -/// -/// Implementations for all traits in std are provided. -pub unsafe trait Trait {} - -unsafe impl Trait for dyn (::std::any::Any) + Send { } -unsafe impl Trait for dyn (::std::any::Any) + Sync { } -unsafe impl Trait for dyn (::std::any::Any) + Send + Sync { } -unsafe impl Trait for dyn (::std::borrow::Borrow) + Send { } -unsafe impl Trait for dyn (::std::borrow::Borrow) + Sync { } -unsafe impl Trait for dyn (::std::borrow::Borrow) + Send + Sync { } -unsafe impl Trait for dyn (::std::borrow::BorrowMut) + Send { } -unsafe impl Trait for dyn (::std::borrow::BorrowMut) + Sync { } -unsafe impl Trait for dyn (::std::borrow::BorrowMut) + Send + Sync { } -unsafe impl Trait for dyn (::std::convert::AsMut) + Send { } -unsafe impl Trait for dyn (::std::convert::AsMut) + Sync { } -unsafe impl Trait for dyn (::std::convert::AsMut) + Send + Sync { } -unsafe impl Trait for dyn (::std::convert::AsRef) + Send { } -unsafe impl Trait for dyn (::std::convert::AsRef) + Sync { } -unsafe impl Trait for dyn (::std::convert::AsRef) + Send + Sync { } -unsafe impl Trait for dyn (::std::error::Error) + Send { } -unsafe impl Trait for dyn (::std::error::Error) + Sync { } -unsafe impl Trait for dyn (::std::error::Error) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::Binary) + Send { } -unsafe impl Trait for dyn (::std::fmt::Binary) + Sync { } -unsafe impl Trait for dyn (::std::fmt::Binary) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::Debug) + Send { } -unsafe impl Trait for dyn (::std::fmt::Debug) + Sync { } -unsafe impl Trait for dyn (::std::fmt::Debug) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::Display) + Send { } -unsafe impl Trait for dyn (::std::fmt::Display) + Sync { } -unsafe impl Trait for dyn (::std::fmt::Display) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::LowerExp) + Send { } -unsafe impl Trait for dyn (::std::fmt::LowerExp) + Sync { } -unsafe impl Trait for dyn (::std::fmt::LowerExp) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::LowerHex) + Send { } -unsafe impl Trait for dyn (::std::fmt::LowerHex) + Sync { } -unsafe impl Trait for dyn (::std::fmt::LowerHex) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::Octal) + Send { } -unsafe impl Trait for dyn (::std::fmt::Octal) + Sync { } -unsafe impl Trait for dyn (::std::fmt::Octal) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::Pointer) + Send { } -unsafe impl Trait for dyn (::std::fmt::Pointer) + Sync { } -unsafe impl Trait for dyn (::std::fmt::Pointer) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::UpperExp) + Send { } -unsafe impl Trait for dyn (::std::fmt::UpperExp) + Sync { } -unsafe impl Trait for dyn (::std::fmt::UpperExp) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::UpperHex) + Send { } -unsafe impl Trait for dyn (::std::fmt::UpperHex) + Sync { } -unsafe impl Trait for dyn (::std::fmt::UpperHex) + Send + Sync { } -unsafe impl Trait for dyn (::std::fmt::Write) + Send { } -unsafe impl Trait for dyn (::std::fmt::Write) + Sync { } -unsafe impl Trait for dyn (::std::fmt::Write) + Send + Sync { } -unsafe impl Trait for dyn (::std::hash::Hasher) + Send { } -unsafe impl Trait for dyn (::std::hash::Hasher) + Sync { } -unsafe impl Trait for dyn (::std::hash::Hasher) + Send + Sync { } -unsafe impl Trait for dyn (::std::io::BufRead) + Send { } -unsafe impl Trait for dyn (::std::io::BufRead) + Sync { } -unsafe impl Trait for dyn (::std::io::BufRead) + Send + Sync { } -unsafe impl Trait for dyn (::std::io::Read) + Send { } -unsafe impl Trait for dyn (::std::io::Read) + Sync { } -unsafe impl Trait for dyn (::std::io::Read) + Send + Sync { } -unsafe impl Trait for dyn (::std::io::Seek) + Send { } -unsafe impl Trait for dyn (::std::io::Seek) + Sync { } -unsafe impl Trait for dyn (::std::io::Seek) + Send + Sync { } -unsafe impl Trait for dyn (::std::io::Write) + Send { } -unsafe impl Trait for dyn (::std::io::Write) + Sync { } -unsafe impl Trait for dyn (::std::io::Write) + Send + Sync { } -unsafe impl Trait for dyn (::std::iter::IntoIterator) { } -unsafe impl Trait for dyn (::std::iter::Iterator) + Send { } -unsafe impl Trait for dyn (::std::iter::Iterator) + Sync { } -unsafe impl Trait for dyn (::std::iter::Iterator) + Send + Sync { } -unsafe impl Trait for dyn (::std::marker::Send) + Send { } -unsafe impl Trait for dyn (::std::marker::Send) + Sync { } -unsafe impl Trait for dyn (::std::marker::Send) + Send + Sync { } -//~^ WARNING conflicting implementations of trait `Trait` for type -//~| WARNING this was previously accepted by the compiler but is being phased out -unsafe impl Trait for dyn (::std::marker::Sync) + Send { } -//~^ WARNING conflicting implementations of trait `Trait` for type -//~| WARNING this was previously accepted by the compiler but is being phased out -unsafe impl Trait for dyn (::std::marker::Sync) + Sync { } -unsafe impl Trait for dyn (::std::marker::Sync) + Send + Sync { } -//~^ WARNING conflicting implementations of trait `Trait` for type -//~| WARNING this was previously accepted by the compiler but is being phased out -unsafe impl Trait for dyn (::std::ops::Drop) + Send { } -unsafe impl Trait for dyn (::std::ops::Drop) + Sync { } -unsafe impl Trait for dyn (::std::ops::Drop) + Send + Sync { } -unsafe impl Trait for dyn (::std::string::ToString) + Send { } -unsafe impl Trait for dyn (::std::string::ToString) + Sync { } -unsafe impl Trait for dyn (::std::string::ToString) + Send + Sync { } -fn assert_trait() {} - -fn main() { - assert_trait::(); - assert_trait::(); - assert_trait::(); -} diff --git a/src/test/ui/issues/issue-33140-traitobject-crate.stderr b/src/test/ui/issues/issue-33140-traitobject-crate.stderr deleted file mode 100644 index 781decb5ae2..00000000000 --- a/src/test/ui/issues/issue-33140-traitobject-crate.stderr +++ /dev/null @@ -1,42 +0,0 @@ -warning: conflicting implementations of trait `Trait` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119) - --> $DIR/issue-33140-traitobject-crate.rs:85:1 - | -LL | unsafe impl Trait for dyn (::std::marker::Send) + Sync { } - | ------------------------------------------------------ first implementation here -LL | unsafe impl Trait for dyn (::std::marker::Send) + Send + Sync { } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` - | -note: the lint level is defined here - --> $DIR/issue-33140-traitobject-crate.rs:3:9 - | -LL | #![warn(order_dependent_trait_objects)] - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - = note: for more information, see issue #56484 - -warning: conflicting implementations of trait `Trait` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119) - --> $DIR/issue-33140-traitobject-crate.rs:88:1 - | -LL | unsafe impl Trait for dyn (::std::marker::Send) + Send + Sync { } - | ------------------------------------------------------------- first implementation here -... -LL | unsafe impl Trait for dyn (::std::marker::Sync) + Send { } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` - | - = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - = note: for more information, see issue #56484 - -warning: conflicting implementations of trait `Trait` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119) - --> $DIR/issue-33140-traitobject-crate.rs:92:1 - | -LL | unsafe impl Trait for dyn (::std::marker::Sync) + Send { } - | ------------------------------------------------------ first implementation here -... -LL | unsafe impl Trait for dyn (::std::marker::Sync) + Send + Sync { } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` - | - = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - = note: for more information, see issue #56484 - -warning: 3 warnings emitted - diff --git a/src/test/ui/issues/issue-33140.rs b/src/test/ui/issues/issue-33140.rs deleted file mode 100644 index 9bdac4b8375..00000000000 --- a/src/test/ui/issues/issue-33140.rs +++ /dev/null @@ -1,47 +0,0 @@ -trait Trait { - fn xyz() -> bool; -} - -impl Trait for dyn Send + Sync { - fn xyz() -> bool { false } -} - -impl Trait for dyn Sync + Send { -//~^ ERROR conflicting implementations - fn xyz() -> bool { true } -} - -trait Trait2 { - fn uvw() -> bool; -} - -impl Trait2 for dyn Send + Sync { - fn uvw() -> bool { false } -} - -impl Trait2 for dyn Sync + Send + Sync { -//~^ ERROR conflicting implementations - fn uvw() -> bool { true } -} - -struct Foo(T); -impl Foo { - fn abc() -> bool { //~ ERROR duplicate definitions with name `abc` - false - } -} - -impl Foo { - fn abc() -> bool { - true - } -} - -fn main() { - assert_eq!(::xyz(), false); - assert_eq!(::xyz(), true); - assert_eq!(::uvw(), false); - assert_eq!(::uvw(), true); - assert_eq!(>::abc(), false); - assert_eq!(>::abc(), true); -} diff --git a/src/test/ui/issues/issue-33140.stderr b/src/test/ui/issues/issue-33140.stderr deleted file mode 100644 index 9a900d2fc94..00000000000 --- a/src/test/ui/issues/issue-33140.stderr +++ /dev/null @@ -1,31 +0,0 @@ -error[E0119]: conflicting implementations of trait `Trait` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: - --> $DIR/issue-33140.rs:9:1 - | -LL | impl Trait for dyn Send + Sync { - | ------------------------------ first implementation here -... -LL | impl Trait for dyn Sync + Send { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` - -error[E0119]: conflicting implementations of trait `Trait2` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: - --> $DIR/issue-33140.rs:22:1 - | -LL | impl Trait2 for dyn Send + Sync { - | ------------------------------- first implementation here -... -LL | impl Trait2 for dyn Sync + Send + Sync { - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` - -error[E0592]: duplicate definitions with name `abc` - --> $DIR/issue-33140.rs:29:5 - | -LL | fn abc() -> bool { - | ^^^^^^^^^^^^^^^^ duplicate definitions for `abc` -... -LL | fn abc() -> bool { - | ---------------- other definition for `abc` - -error: aborting due to 3 previous errors - -Some errors have detailed explanations: E0119, E0592. -For more information about an error, try `rustc --explain E0119`. diff --git a/src/test/ui/issues/issue-3521.fixed b/src/test/ui/issues/issue-3521.fixed deleted file mode 100644 index f76106dfff1..00000000000 --- a/src/test/ui/issues/issue-3521.fixed +++ /dev/null @@ -1,13 +0,0 @@ -// run-rustfix -fn main() { - #[allow(non_upper_case_globals)] - const foo: isize = 100; - - #[derive(Debug)] - enum Stuff { - Bar = foo - //~^ ERROR attempt to use a non-constant value in a constant - } - - println!("{:?}", Stuff::Bar); -} diff --git a/src/test/ui/issues/issue-3521.rs b/src/test/ui/issues/issue-3521.rs deleted file mode 100644 index c425a22df91..00000000000 --- a/src/test/ui/issues/issue-3521.rs +++ /dev/null @@ -1,13 +0,0 @@ -// run-rustfix -fn main() { - #[allow(non_upper_case_globals)] - let foo: isize = 100; - - #[derive(Debug)] - enum Stuff { - Bar = foo - //~^ ERROR attempt to use a non-constant value in a constant - } - - println!("{:?}", Stuff::Bar); -} diff --git a/src/test/ui/issues/issue-3521.stderr b/src/test/ui/issues/issue-3521.stderr deleted file mode 100644 index aa42772f12d..00000000000 --- a/src/test/ui/issues/issue-3521.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0435]: attempt to use a non-constant value in a constant - --> $DIR/issue-3521.rs:8:15 - | -LL | let foo: isize = 100; - | ------- help: consider using `const` instead of `let`: `const foo` -... -LL | Bar = foo - | ^^^ non-constant value - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0435`. diff --git a/src/test/ui/issues/issue-42344.rs b/src/test/ui/issues/issue-42344.rs deleted file mode 100644 index a7636edf2f8..00000000000 --- a/src/test/ui/issues/issue-42344.rs +++ /dev/null @@ -1,8 +0,0 @@ -static TAB: [&mut [u8]; 0] = []; - -pub unsafe fn test() { - TAB[0].iter_mut(); - //~^ ERROR cannot borrow `*TAB[_]` as mutable, as `TAB` is an immutable static item [E0596] -} - -pub fn main() {} diff --git a/src/test/ui/issues/issue-42344.stderr b/src/test/ui/issues/issue-42344.stderr deleted file mode 100644 index 5cffa1b5121..00000000000 --- a/src/test/ui/issues/issue-42344.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0596]: cannot borrow `*TAB[_]` as mutable, as `TAB` is an immutable static item - --> $DIR/issue-42344.rs:4:5 - | -LL | TAB[0].iter_mut(); - | ^^^^^^ cannot borrow as mutable - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0596`. diff --git a/src/test/ui/issues/issue-44373-2.rs b/src/test/ui/issues/issue-44373-2.rs deleted file mode 100644 index 194ce1dca77..00000000000 --- a/src/test/ui/issues/issue-44373-2.rs +++ /dev/null @@ -1,11 +0,0 @@ -// check-pass -#![allow(dead_code)] - -struct Foo(bool); - -struct Container(&'static [&'static Foo]); - -static FOO: Foo = Foo(true); -static CONTAINER: Container = Container(&[&FOO]); - -fn main() {} diff --git a/src/test/ui/issues/issue-44373.rs b/src/test/ui/issues/issue-44373.rs deleted file mode 100644 index 0d011d096bd..00000000000 --- a/src/test/ui/issues/issue-44373.rs +++ /dev/null @@ -1,5 +0,0 @@ -static FOO: u32 = 50; - -fn main() { - let _val: &'static [&'static u32] = &[&FOO]; //~ ERROR temporary value dropped while borrowed -} diff --git a/src/test/ui/issues/issue-44373.stderr b/src/test/ui/issues/issue-44373.stderr deleted file mode 100644 index 6f92fbb1eb6..00000000000 --- a/src/test/ui/issues/issue-44373.stderr +++ /dev/null @@ -1,13 +0,0 @@ -error[E0716]: temporary value dropped while borrowed - --> $DIR/issue-44373.rs:4:42 - | -LL | let _val: &'static [&'static u32] = &[&FOO]; - | ----------------------- ^^^^^^ creates a temporary which is freed while still in use - | | - | type annotation requires that borrow lasts for `'static` -LL | } - | - temporary value is freed at the end of this statement - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0716`. diff --git a/src/test/ui/issues/issue-52992.rs b/src/test/ui/issues/issue-52992.rs deleted file mode 100644 index 530d1a61b31..00000000000 --- a/src/test/ui/issues/issue-52992.rs +++ /dev/null @@ -1,25 +0,0 @@ -// Regression test for an NLL-related ICE (#52992) -- computing -// implied bounds was causing outlives relations that were not -// properly handled. -// -// check-pass - -fn main() {} - -fn fail<'a>() -> Struct<'a, Generic<()>> { - Struct(&Generic(())) -} - -struct Struct<'a, T>(&'a T) where - T: Trait + 'a, - T::AT: 'a; // only fails with this bound - -struct Generic(T); - -trait Trait { - type AT; -} - -impl Trait for Generic { - type AT = T; // only fails with a generic AT -} diff --git a/src/test/ui/issues/issue-7222.rs b/src/test/ui/issues/issue-7222.rs deleted file mode 100644 index 64907316626..00000000000 --- a/src/test/ui/issues/issue-7222.rs +++ /dev/null @@ -1,12 +0,0 @@ -// run-pass -// pretty-expanded FIXME #23616 -#![allow(illegal_floating_point_literal_pattern)] // FIXME #41620 - -pub fn main() { - const FOO: f64 = 10.0; - - match 0.0 { - 0.0 ..= FOO => (), - _ => () - } -} diff --git a/src/test/ui/issues/issue-76179.rs b/src/test/ui/issues/issue-76179.rs deleted file mode 100644 index 0e086968b90..00000000000 --- a/src/test/ui/issues/issue-76179.rs +++ /dev/null @@ -1,19 +0,0 @@ -// check-pass - -#![feature(associated_type_defaults)] - -use std::io::Read; - -trait View { - type Deserializers: Deserializer; - type RequestParams = DefaultRequestParams; -} - -struct DefaultRequestParams; - -trait Deserializer { - type Item; - fn deserialize(r: impl Read) -> Self::Item; -} - -fn main() {} diff --git a/src/test/ui/lint-expr-stmt-attrs-for-early-lints.rs b/src/test/ui/lint-expr-stmt-attrs-for-early-lints.rs deleted file mode 100644 index 07a32904a5e..00000000000 --- a/src/test/ui/lint-expr-stmt-attrs-for-early-lints.rs +++ /dev/null @@ -1,14 +0,0 @@ -// run-pass - -#![feature(stmt_expr_attributes)] -#![deny(unused_parens)] - -// Tests that lint attributes on statements/expressions are -// correctly applied to non-builtin early (AST) lints - -fn main() { - #[allow(unused_parens)] - { - let _ = (9); - } -} diff --git a/src/test/ui/lint/lint-expr-stmt-attrs-for-early-lints.rs b/src/test/ui/lint/lint-expr-stmt-attrs-for-early-lints.rs new file mode 100644 index 00000000000..07a32904a5e --- /dev/null +++ b/src/test/ui/lint/lint-expr-stmt-attrs-for-early-lints.rs @@ -0,0 +1,14 @@ +// run-pass + +#![feature(stmt_expr_attributes)] +#![deny(unused_parens)] + +// Tests that lint attributes on statements/expressions are +// correctly applied to non-builtin early (AST) lints + +fn main() { + #[allow(unused_parens)] + { + let _ = (9); + } +} diff --git a/src/test/ui/nll/issue-52992.rs b/src/test/ui/nll/issue-52992.rs new file mode 100644 index 00000000000..530d1a61b31 --- /dev/null +++ b/src/test/ui/nll/issue-52992.rs @@ -0,0 +1,25 @@ +// Regression test for an NLL-related ICE (#52992) -- computing +// implied bounds was causing outlives relations that were not +// properly handled. +// +// check-pass + +fn main() {} + +fn fail<'a>() -> Struct<'a, Generic<()>> { + Struct(&Generic(())) +} + +struct Struct<'a, T>(&'a T) where + T: Trait + 'a, + T::AT: 'a; // only fails with this bound + +struct Generic(T); + +trait Trait { + type AT; +} + +impl Trait for Generic { + type AT = T; // only fails with a generic AT +} diff --git a/src/test/ui/nullable-pointer-ffi-compat.rs b/src/test/ui/nullable-pointer-ffi-compat.rs deleted file mode 100644 index 0647a18c3c4..00000000000 --- a/src/test/ui/nullable-pointer-ffi-compat.rs +++ /dev/null @@ -1,28 +0,0 @@ -// run-pass -// #11303, #11040: -// This would previously crash on i686 Linux due to abi differences -// between returning an Option and T, where T is a non nullable -// pointer. -// If we have an enum with two variants such that one is zero sized -// and the other contains a nonnullable pointer, we don't use a -// separate discriminant. Instead we use that pointer field to differentiate -// between the 2 cases. -// Also, if the variant with the nonnullable pointer has no other fields -// then we simply express the enum as just a pointer and not wrap it -// in a struct. - - -use std::mem; - -#[inline(never)] -extern "C" fn foo(x: &isize) -> Option<&isize> { Some(x) } - -static FOO: isize = 0xDEADBEE; - -pub fn main() { - unsafe { - let f: extern "C" fn(&isize) -> &isize = - mem::transmute(foo as extern "C" fn(&isize) -> Option<&isize>); - assert_eq!(*f(&FOO), FOO); - } -} diff --git a/src/test/ui/parser/issue-7222.rs b/src/test/ui/parser/issue-7222.rs new file mode 100644 index 00000000000..64907316626 --- /dev/null +++ b/src/test/ui/parser/issue-7222.rs @@ -0,0 +1,12 @@ +// run-pass +// pretty-expanded FIXME #23616 +#![allow(illegal_floating_point_literal_pattern)] // FIXME #41620 + +pub fn main() { + const FOO: f64 = 10.0; + + match 0.0 { + 0.0 ..= FOO => (), + _ => () + } +} diff --git a/src/test/ui/regions/issue-6157.rs b/src/test/ui/regions/issue-6157.rs new file mode 100644 index 00000000000..b7a44ed8623 --- /dev/null +++ b/src/test/ui/regions/issue-6157.rs @@ -0,0 +1,23 @@ +// run-pass +// pretty-expanded FIXME #23616 + +pub trait OpInt { fn call(&mut self, _: isize, _: isize) -> isize; } + +impl OpInt for F where F: FnMut(isize, isize) -> isize { + fn call(&mut self, a:isize, b:isize) -> isize { + (*self)(a, b) + } +} + +fn squarei<'a>(x: isize, op: &'a mut dyn OpInt) -> isize { op.call(x, x) } + +fn muli(x:isize, y:isize) -> isize { x * y } + +pub fn main() { + let mut f = |x, y| muli(x, y); + { + let g = &mut f; + let h = g as &mut dyn OpInt; + squarei(3, h); + } +} diff --git a/src/test/ui/resolve/issue-2330.rs b/src/test/ui/resolve/issue-2330.rs new file mode 100644 index 00000000000..4560caba0cf --- /dev/null +++ b/src/test/ui/resolve/issue-2330.rs @@ -0,0 +1,13 @@ +enum Chan { } + +trait Channel { + fn send(&self, v: T); +} + +// `Chan` is not a trait, it's an enum +impl Chan for isize { //~ ERROR expected trait, found enum `Chan` + fn send(&self, v: isize) { panic!() } +} + +fn main() { +} diff --git a/src/test/ui/resolve/issue-2330.stderr b/src/test/ui/resolve/issue-2330.stderr new file mode 100644 index 00000000000..877cf68b586 --- /dev/null +++ b/src/test/ui/resolve/issue-2330.stderr @@ -0,0 +1,9 @@ +error[E0404]: expected trait, found enum `Chan` + --> $DIR/issue-2330.rs:8:6 + | +LL | impl Chan for isize { + | ^^^^ not a trait + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0404`. diff --git a/src/test/ui/statics/issue-15261.rs b/src/test/ui/statics/issue-15261.rs new file mode 100644 index 00000000000..ec413f6d1d2 --- /dev/null +++ b/src/test/ui/statics/issue-15261.rs @@ -0,0 +1,11 @@ +// build-pass +#![allow(dead_code)] +#![allow(non_upper_case_globals)] + +// pretty-expanded FIXME #23616 + +static mut n_mut: usize = 0; + +static n: &'static usize = unsafe{ &n_mut }; + +fn main() {} diff --git a/src/test/ui/statics/issue-44373-2.rs b/src/test/ui/statics/issue-44373-2.rs new file mode 100644 index 00000000000..194ce1dca77 --- /dev/null +++ b/src/test/ui/statics/issue-44373-2.rs @@ -0,0 +1,11 @@ +// check-pass +#![allow(dead_code)] + +struct Foo(bool); + +struct Container(&'static [&'static Foo]); + +static FOO: Foo = Foo(true); +static CONTAINER: Container = Container(&[&FOO]); + +fn main() {} diff --git a/src/test/ui/statics/issue-44373.rs b/src/test/ui/statics/issue-44373.rs new file mode 100644 index 00000000000..0d011d096bd --- /dev/null +++ b/src/test/ui/statics/issue-44373.rs @@ -0,0 +1,5 @@ +static FOO: u32 = 50; + +fn main() { + let _val: &'static [&'static u32] = &[&FOO]; //~ ERROR temporary value dropped while borrowed +} diff --git a/src/test/ui/statics/issue-44373.stderr b/src/test/ui/statics/issue-44373.stderr new file mode 100644 index 00000000000..6f92fbb1eb6 --- /dev/null +++ b/src/test/ui/statics/issue-44373.stderr @@ -0,0 +1,13 @@ +error[E0716]: temporary value dropped while borrowed + --> $DIR/issue-44373.rs:4:42 + | +LL | let _val: &'static [&'static u32] = &[&FOO]; + | ----------------------- ^^^^^^ creates a temporary which is freed while still in use + | | + | type annotation requires that borrow lasts for `'static` +LL | } + | - temporary value is freed at the end of this statement + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0716`. diff --git a/src/test/ui/traits/impl-bounds-checking.rs b/src/test/ui/traits/impl-bounds-checking.rs new file mode 100644 index 00000000000..5e65a27bf14 --- /dev/null +++ b/src/test/ui/traits/impl-bounds-checking.rs @@ -0,0 +1,14 @@ +pub trait Clone2 { + fn clone(&self) -> Self; +} + + +trait Getter { + fn get(&self) -> T; +} + +impl Getter for isize { //~ ERROR `isize: Clone2` is not satisfied + fn get(&self) -> isize { *self } +} + +fn main() { } diff --git a/src/test/ui/traits/impl-bounds-checking.stderr b/src/test/ui/traits/impl-bounds-checking.stderr new file mode 100644 index 00000000000..8698ed6e875 --- /dev/null +++ b/src/test/ui/traits/impl-bounds-checking.stderr @@ -0,0 +1,12 @@ +error[E0277]: the trait bound `isize: Clone2` is not satisfied + --> $DIR/impl-bounds-checking.rs:10:6 + | +LL | trait Getter { + | ------ required by this bound in `Getter` +... +LL | impl Getter for isize { + | ^^^^^^^^^^^^^ the trait `Clone2` is not implemented for `isize` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/traits/issue-28576.rs b/src/test/ui/traits/issue-28576.rs new file mode 100644 index 00000000000..972c839b648 --- /dev/null +++ b/src/test/ui/traits/issue-28576.rs @@ -0,0 +1,12 @@ +pub trait Foo { + type Assoc; +} + +pub trait Bar: Foo { + fn new(&self, b: & + dyn Bar //~ ERROR the trait `Bar` cannot be made into an object + + ); +} + +fn main() {} diff --git a/src/test/ui/traits/issue-28576.stderr b/src/test/ui/traits/issue-28576.stderr new file mode 100644 index 00000000000..203cd0630eb --- /dev/null +++ b/src/test/ui/traits/issue-28576.stderr @@ -0,0 +1,20 @@ +error[E0038]: the trait `Bar` cannot be made into an object + --> $DIR/issue-28576.rs:7:12 + | +LL | / dyn Bar +LL | | + | |________________________^ `Bar` cannot be made into an object + | +note: for a trait to be "object safe" it needs to allow building a vtable to allow the call to be resolvable dynamically; for more information visit + --> $DIR/issue-28576.rs:5:16 + | +LL | pub trait Bar: Foo { + | --- ^^^^^^^^^^^^^ + | | | | + | | | ...because it uses `Self` as a type parameter + | | ...because it uses `Self` as a type parameter + | this trait cannot be made into an object... + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0038`. diff --git a/src/test/ui/traits/issue-33140.rs b/src/test/ui/traits/issue-33140.rs new file mode 100644 index 00000000000..9bdac4b8375 --- /dev/null +++ b/src/test/ui/traits/issue-33140.rs @@ -0,0 +1,47 @@ +trait Trait { + fn xyz() -> bool; +} + +impl Trait for dyn Send + Sync { + fn xyz() -> bool { false } +} + +impl Trait for dyn Sync + Send { +//~^ ERROR conflicting implementations + fn xyz() -> bool { true } +} + +trait Trait2 { + fn uvw() -> bool; +} + +impl Trait2 for dyn Send + Sync { + fn uvw() -> bool { false } +} + +impl Trait2 for dyn Sync + Send + Sync { +//~^ ERROR conflicting implementations + fn uvw() -> bool { true } +} + +struct Foo(T); +impl Foo { + fn abc() -> bool { //~ ERROR duplicate definitions with name `abc` + false + } +} + +impl Foo { + fn abc() -> bool { + true + } +} + +fn main() { + assert_eq!(::xyz(), false); + assert_eq!(::xyz(), true); + assert_eq!(::uvw(), false); + assert_eq!(::uvw(), true); + assert_eq!(>::abc(), false); + assert_eq!(>::abc(), true); +} diff --git a/src/test/ui/traits/issue-33140.stderr b/src/test/ui/traits/issue-33140.stderr new file mode 100644 index 00000000000..9a900d2fc94 --- /dev/null +++ b/src/test/ui/traits/issue-33140.stderr @@ -0,0 +1,31 @@ +error[E0119]: conflicting implementations of trait `Trait` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: + --> $DIR/issue-33140.rs:9:1 + | +LL | impl Trait for dyn Send + Sync { + | ------------------------------ first implementation here +... +LL | impl Trait for dyn Sync + Send { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` + +error[E0119]: conflicting implementations of trait `Trait2` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: + --> $DIR/issue-33140.rs:22:1 + | +LL | impl Trait2 for dyn Send + Sync { + | ------------------------------- first implementation here +... +LL | impl Trait2 for dyn Sync + Send + Sync { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` + +error[E0592]: duplicate definitions with name `abc` + --> $DIR/issue-33140.rs:29:5 + | +LL | fn abc() -> bool { + | ^^^^^^^^^^^^^^^^ duplicate definitions for `abc` +... +LL | fn abc() -> bool { + | ---------------- other definition for `abc` + +error: aborting due to 3 previous errors + +Some errors have detailed explanations: E0119, E0592. +For more information about an error, try `rustc --explain E0119`. diff --git a/src/test/ui/traits/object/issue-33140-traitobject-crate.rs b/src/test/ui/traits/object/issue-33140-traitobject-crate.rs new file mode 100644 index 00000000000..46b68f1c9fe --- /dev/null +++ b/src/test/ui/traits/object/issue-33140-traitobject-crate.rs @@ -0,0 +1,107 @@ +// check-pass + +#![warn(order_dependent_trait_objects)] + +// Check that traitobject 0.1.0 compiles + +//! # traitobject +//! +//! Unsafe helpers for working with raw TraitObjects. + +/// A trait implemented for all trait objects. +/// +/// Implementations for all traits in std are provided. +pub unsafe trait Trait {} + +unsafe impl Trait for dyn (::std::any::Any) + Send { } +unsafe impl Trait for dyn (::std::any::Any) + Sync { } +unsafe impl Trait for dyn (::std::any::Any) + Send + Sync { } +unsafe impl Trait for dyn (::std::borrow::Borrow) + Send { } +unsafe impl Trait for dyn (::std::borrow::Borrow) + Sync { } +unsafe impl Trait for dyn (::std::borrow::Borrow) + Send + Sync { } +unsafe impl Trait for dyn (::std::borrow::BorrowMut) + Send { } +unsafe impl Trait for dyn (::std::borrow::BorrowMut) + Sync { } +unsafe impl Trait for dyn (::std::borrow::BorrowMut) + Send + Sync { } +unsafe impl Trait for dyn (::std::convert::AsMut) + Send { } +unsafe impl Trait for dyn (::std::convert::AsMut) + Sync { } +unsafe impl Trait for dyn (::std::convert::AsMut) + Send + Sync { } +unsafe impl Trait for dyn (::std::convert::AsRef) + Send { } +unsafe impl Trait for dyn (::std::convert::AsRef) + Sync { } +unsafe impl Trait for dyn (::std::convert::AsRef) + Send + Sync { } +unsafe impl Trait for dyn (::std::error::Error) + Send { } +unsafe impl Trait for dyn (::std::error::Error) + Sync { } +unsafe impl Trait for dyn (::std::error::Error) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::Binary) + Send { } +unsafe impl Trait for dyn (::std::fmt::Binary) + Sync { } +unsafe impl Trait for dyn (::std::fmt::Binary) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::Debug) + Send { } +unsafe impl Trait for dyn (::std::fmt::Debug) + Sync { } +unsafe impl Trait for dyn (::std::fmt::Debug) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::Display) + Send { } +unsafe impl Trait for dyn (::std::fmt::Display) + Sync { } +unsafe impl Trait for dyn (::std::fmt::Display) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::LowerExp) + Send { } +unsafe impl Trait for dyn (::std::fmt::LowerExp) + Sync { } +unsafe impl Trait for dyn (::std::fmt::LowerExp) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::LowerHex) + Send { } +unsafe impl Trait for dyn (::std::fmt::LowerHex) + Sync { } +unsafe impl Trait for dyn (::std::fmt::LowerHex) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::Octal) + Send { } +unsafe impl Trait for dyn (::std::fmt::Octal) + Sync { } +unsafe impl Trait for dyn (::std::fmt::Octal) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::Pointer) + Send { } +unsafe impl Trait for dyn (::std::fmt::Pointer) + Sync { } +unsafe impl Trait for dyn (::std::fmt::Pointer) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::UpperExp) + Send { } +unsafe impl Trait for dyn (::std::fmt::UpperExp) + Sync { } +unsafe impl Trait for dyn (::std::fmt::UpperExp) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::UpperHex) + Send { } +unsafe impl Trait for dyn (::std::fmt::UpperHex) + Sync { } +unsafe impl Trait for dyn (::std::fmt::UpperHex) + Send + Sync { } +unsafe impl Trait for dyn (::std::fmt::Write) + Send { } +unsafe impl Trait for dyn (::std::fmt::Write) + Sync { } +unsafe impl Trait for dyn (::std::fmt::Write) + Send + Sync { } +unsafe impl Trait for dyn (::std::hash::Hasher) + Send { } +unsafe impl Trait for dyn (::std::hash::Hasher) + Sync { } +unsafe impl Trait for dyn (::std::hash::Hasher) + Send + Sync { } +unsafe impl Trait for dyn (::std::io::BufRead) + Send { } +unsafe impl Trait for dyn (::std::io::BufRead) + Sync { } +unsafe impl Trait for dyn (::std::io::BufRead) + Send + Sync { } +unsafe impl Trait for dyn (::std::io::Read) + Send { } +unsafe impl Trait for dyn (::std::io::Read) + Sync { } +unsafe impl Trait for dyn (::std::io::Read) + Send + Sync { } +unsafe impl Trait for dyn (::std::io::Seek) + Send { } +unsafe impl Trait for dyn (::std::io::Seek) + Sync { } +unsafe impl Trait for dyn (::std::io::Seek) + Send + Sync { } +unsafe impl Trait for dyn (::std::io::Write) + Send { } +unsafe impl Trait for dyn (::std::io::Write) + Sync { } +unsafe impl Trait for dyn (::std::io::Write) + Send + Sync { } +unsafe impl Trait for dyn (::std::iter::IntoIterator) { } +unsafe impl Trait for dyn (::std::iter::Iterator) + Send { } +unsafe impl Trait for dyn (::std::iter::Iterator) + Sync { } +unsafe impl Trait for dyn (::std::iter::Iterator) + Send + Sync { } +unsafe impl Trait for dyn (::std::marker::Send) + Send { } +unsafe impl Trait for dyn (::std::marker::Send) + Sync { } +unsafe impl Trait for dyn (::std::marker::Send) + Send + Sync { } +//~^ WARNING conflicting implementations of trait `Trait` for type +//~| WARNING this was previously accepted by the compiler but is being phased out +unsafe impl Trait for dyn (::std::marker::Sync) + Send { } +//~^ WARNING conflicting implementations of trait `Trait` for type +//~| WARNING this was previously accepted by the compiler but is being phased out +unsafe impl Trait for dyn (::std::marker::Sync) + Sync { } +unsafe impl Trait for dyn (::std::marker::Sync) + Send + Sync { } +//~^ WARNING conflicting implementations of trait `Trait` for type +//~| WARNING this was previously accepted by the compiler but is being phased out +unsafe impl Trait for dyn (::std::ops::Drop) + Send { } +unsafe impl Trait for dyn (::std::ops::Drop) + Sync { } +unsafe impl Trait for dyn (::std::ops::Drop) + Send + Sync { } +unsafe impl Trait for dyn (::std::string::ToString) + Send { } +unsafe impl Trait for dyn (::std::string::ToString) + Sync { } +unsafe impl Trait for dyn (::std::string::ToString) + Send + Sync { } +fn assert_trait() {} + +fn main() { + assert_trait::(); + assert_trait::(); + assert_trait::(); +} diff --git a/src/test/ui/traits/object/issue-33140-traitobject-crate.stderr b/src/test/ui/traits/object/issue-33140-traitobject-crate.stderr new file mode 100644 index 00000000000..781decb5ae2 --- /dev/null +++ b/src/test/ui/traits/object/issue-33140-traitobject-crate.stderr @@ -0,0 +1,42 @@ +warning: conflicting implementations of trait `Trait` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119) + --> $DIR/issue-33140-traitobject-crate.rs:85:1 + | +LL | unsafe impl Trait for dyn (::std::marker::Send) + Sync { } + | ------------------------------------------------------ first implementation here +LL | unsafe impl Trait for dyn (::std::marker::Send) + Send + Sync { } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` + | +note: the lint level is defined here + --> $DIR/issue-33140-traitobject-crate.rs:3:9 + | +LL | #![warn(order_dependent_trait_objects)] + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #56484 + +warning: conflicting implementations of trait `Trait` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119) + --> $DIR/issue-33140-traitobject-crate.rs:88:1 + | +LL | unsafe impl Trait for dyn (::std::marker::Send) + Send + Sync { } + | ------------------------------------------------------------- first implementation here +... +LL | unsafe impl Trait for dyn (::std::marker::Sync) + Send { } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #56484 + +warning: conflicting implementations of trait `Trait` for type `(dyn std::marker::Send + std::marker::Sync + 'static)`: (E0119) + --> $DIR/issue-33140-traitobject-crate.rs:92:1 + | +LL | unsafe impl Trait for dyn (::std::marker::Sync) + Send { } + | ------------------------------------------------------ first implementation here +... +LL | unsafe impl Trait for dyn (::std::marker::Sync) + Send + Sync { } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `(dyn std::marker::Send + std::marker::Sync + 'static)` + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #56484 + +warning: 3 warnings emitted + diff --git a/src/test/ui/try-block.rs b/src/test/ui/try-block.rs deleted file mode 100644 index c29ccc70427..00000000000 --- a/src/test/ui/try-block.rs +++ /dev/null @@ -1,75 +0,0 @@ -// run-pass - -#![allow(non_camel_case_types)] -#![allow(dead_code)] -// compile-flags: --edition 2018 - -#![feature(try_blocks)] - -struct catch {} - -pub fn main() { - let catch_result: Option<_> = try { - let x = 5; - x - }; - assert_eq!(catch_result, Some(5)); - - let mut catch = true; - while catch { catch = false; } - assert_eq!(catch, false); - - catch = if catch { false } else { true }; - assert_eq!(catch, true); - - match catch { - _ => {} - }; - - let catch_err: Result<_, i32> = try { - Err(22)?; - 1 - }; - assert_eq!(catch_err, Err(22)); - - let catch_okay: Result = try { - if false { Err(25)?; } - Ok::<(), i32>(())?; - 28 - }; - assert_eq!(catch_okay, Ok(28)); - - let catch_from_loop: Result = try { - for i in 0..10 { - if i < 5 { Ok::(i)?; } else { Err(i)?; } - } - 22 - }; - assert_eq!(catch_from_loop, Err(5)); - - let cfg_init; - let _res: Result<(), ()> = try { - cfg_init = 5; - }; - assert_eq!(cfg_init, 5); - - let cfg_init_2; - let _res: Result<(), ()> = try { - cfg_init_2 = 6; - Err(())?; - }; - assert_eq!(cfg_init_2, 6); - - let my_string = "test".to_string(); - let res: Result<&str, ()> = try { - // Unfortunately, deref doesn't fire here (#49356) - &my_string[..] - }; - assert_eq!(res, Ok("test")); - - let my_opt: Option<_> = try { () }; - assert_eq!(my_opt, Some(())); - - let my_opt: Option<_> = try { }; - assert_eq!(my_opt, Some(())); -} diff --git a/src/test/ui/try-block/try-block.rs b/src/test/ui/try-block/try-block.rs new file mode 100644 index 00000000000..c29ccc70427 --- /dev/null +++ b/src/test/ui/try-block/try-block.rs @@ -0,0 +1,75 @@ +// run-pass + +#![allow(non_camel_case_types)] +#![allow(dead_code)] +// compile-flags: --edition 2018 + +#![feature(try_blocks)] + +struct catch {} + +pub fn main() { + let catch_result: Option<_> = try { + let x = 5; + x + }; + assert_eq!(catch_result, Some(5)); + + let mut catch = true; + while catch { catch = false; } + assert_eq!(catch, false); + + catch = if catch { false } else { true }; + assert_eq!(catch, true); + + match catch { + _ => {} + }; + + let catch_err: Result<_, i32> = try { + Err(22)?; + 1 + }; + assert_eq!(catch_err, Err(22)); + + let catch_okay: Result = try { + if false { Err(25)?; } + Ok::<(), i32>(())?; + 28 + }; + assert_eq!(catch_okay, Ok(28)); + + let catch_from_loop: Result = try { + for i in 0..10 { + if i < 5 { Ok::(i)?; } else { Err(i)?; } + } + 22 + }; + assert_eq!(catch_from_loop, Err(5)); + + let cfg_init; + let _res: Result<(), ()> = try { + cfg_init = 5; + }; + assert_eq!(cfg_init, 5); + + let cfg_init_2; + let _res: Result<(), ()> = try { + cfg_init_2 = 6; + Err(())?; + }; + assert_eq!(cfg_init_2, 6); + + let my_string = "test".to_string(); + let res: Result<&str, ()> = try { + // Unfortunately, deref doesn't fire here (#49356) + &my_string[..] + }; + assert_eq!(res, Ok("test")); + + let my_opt: Option<_> = try { () }; + assert_eq!(my_opt, Some(())); + + let my_opt: Option<_> = try { }; + assert_eq!(my_opt, Some(())); +} diff --git a/src/test/ui/tup.rs b/src/test/ui/tup.rs deleted file mode 100644 index 160477b0b0a..00000000000 --- a/src/test/ui/tup.rs +++ /dev/null @@ -1,21 +0,0 @@ -// run-pass - -#![allow(non_camel_case_types)] - -type point = (isize, isize); - -fn f(p: point, x: isize, y: isize) { - let (a, b) = p; - assert_eq!(a, x); - assert_eq!(b, y); -} - -pub fn main() { - let p: point = (10, 20); - let (a, b) = p; - assert_eq!(a, 10); - assert_eq!(b, 20); - let p2: point = p; - f(p, 10, 20); - f(p2, 10, 20); -} diff --git a/src/test/ui/tuple/tup.rs b/src/test/ui/tuple/tup.rs new file mode 100644 index 00000000000..160477b0b0a --- /dev/null +++ b/src/test/ui/tuple/tup.rs @@ -0,0 +1,21 @@ +// run-pass + +#![allow(non_camel_case_types)] + +type point = (isize, isize); + +fn f(p: point, x: isize, y: isize) { + let (a, b) = p; + assert_eq!(a, x); + assert_eq!(b, y); +} + +pub fn main() { + let p: point = (10, 20); + let (a, b) = p; + assert_eq!(a, 10); + assert_eq!(b, 20); + let p2: point = p; + f(p, 10, 20); + f(p2, 10, 20); +} diff --git a/src/test/ui/unboxed-closures/issue-18661.rs b/src/test/ui/unboxed-closures/issue-18661.rs new file mode 100644 index 00000000000..e2427243235 --- /dev/null +++ b/src/test/ui/unboxed-closures/issue-18661.rs @@ -0,0 +1,19 @@ +// run-pass +// Test that param substitutions from the correct environment are +// used when codegenning unboxed closure calls. + +// pretty-expanded FIXME #23616 + +pub fn inside(c: F) { + c(); +} + +// Use different number of type parameters and closure type to trigger +// an obvious ICE when param environments are mixed up +pub fn outside() { + inside(|| {}); +} + +fn main() { + outside::<(),()>(); +} -- cgit 1.4.1-3-g733a5