From ff005610d5956cee82d4b2d162c3ee8da71e8164 Mon Sep 17 00:00:00 2001 From: Kivooeo Date: Tue, 3 Jun 2025 17:47:38 +0500 Subject: cleaned up some tests --- tests/ui/break-diverging-value.rs | 37 ------------- tests/ui/break-diverging-value.stderr | 19 ------- tests/ui/builtin-clone-unwind.rs | 61 ---------------------- tests/ui/can-copy-pod.rs | 15 ------ tests/ui/cancel-clean-via-immediate-rvalue-ref.rs | 9 ---- tests/ui/cannot-mutate-captured-non-mut-var.rs | 15 ------ tests/ui/cannot-mutate-captured-non-mut-var.stderr | 26 --------- tests/ui/closures/closure-immut-capture-error.rs | 23 ++++++++ .../ui/closures/closure-immut-capture-error.stderr | 26 +++++++++ tests/ui/codegen/rvalue-mut-ref-box-drop.rs | 13 +++++ tests/ui/loops/loop-break-never-type-mismatch.rs | 56 ++++++++++++++++++++ .../ui/loops/loop-break-never-type-mismatch.stderr | 19 +++++++ tests/ui/traits/clone-unwind-rc-cleanup.rs | 46 ++++++++++++++++ tests/ui/traits/copy-trait-implicit-copy.rs | 15 ++++++ 14 files changed, 198 insertions(+), 182 deletions(-) delete mode 100644 tests/ui/break-diverging-value.rs delete mode 100644 tests/ui/break-diverging-value.stderr delete mode 100644 tests/ui/builtin-clone-unwind.rs delete mode 100644 tests/ui/can-copy-pod.rs delete mode 100644 tests/ui/cancel-clean-via-immediate-rvalue-ref.rs delete mode 100644 tests/ui/cannot-mutate-captured-non-mut-var.rs delete mode 100644 tests/ui/cannot-mutate-captured-non-mut-var.stderr create mode 100644 tests/ui/closures/closure-immut-capture-error.rs create mode 100644 tests/ui/closures/closure-immut-capture-error.stderr create mode 100644 tests/ui/codegen/rvalue-mut-ref-box-drop.rs create mode 100644 tests/ui/loops/loop-break-never-type-mismatch.rs create mode 100644 tests/ui/loops/loop-break-never-type-mismatch.stderr create mode 100644 tests/ui/traits/clone-unwind-rc-cleanup.rs create mode 100644 tests/ui/traits/copy-trait-implicit-copy.rs diff --git a/tests/ui/break-diverging-value.rs b/tests/ui/break-diverging-value.rs deleted file mode 100644 index d070fddaffc..00000000000 --- a/tests/ui/break-diverging-value.rs +++ /dev/null @@ -1,37 +0,0 @@ -#![feature(never_type)] - -fn loop_break_return() -> i32 { - let loop_value = loop { break return 0 }; // ok -} - -fn loop_break_loop() -> i32 { - let loop_value = loop { break loop {} }; // ok -} - -fn loop_break_break() -> i32 { //~ ERROR mismatched types - let loop_value = loop { break break }; -} - -fn loop_break_return_2() -> i32 { - let loop_value = loop { break { return 0; () } }; // ok -} - -enum Void {} - -fn get_void() -> Void { - panic!() -} - -fn loop_break_void() -> i32 { //~ ERROR mismatched types - let loop_value = loop { break get_void() }; -} - -fn get_never() -> ! { - panic!() -} - -fn loop_break_never() -> i32 { - let loop_value = loop { break get_never() }; // ok -} - -fn main() {} diff --git a/tests/ui/break-diverging-value.stderr b/tests/ui/break-diverging-value.stderr deleted file mode 100644 index 69edcd24080..00000000000 --- a/tests/ui/break-diverging-value.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/break-diverging-value.rs:11:26 - | -LL | fn loop_break_break() -> i32 { - | ---------------- ^^^ expected `i32`, found `()` - | | - | implicitly returns `()` as its body has no tail or `return` expression - -error[E0308]: mismatched types - --> $DIR/break-diverging-value.rs:25:25 - | -LL | fn loop_break_void() -> i32 { - | --------------- ^^^ expected `i32`, found `()` - | | - | implicitly returns `()` as its body has no tail or `return` expression - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/tests/ui/builtin-clone-unwind.rs b/tests/ui/builtin-clone-unwind.rs deleted file mode 100644 index 507ea045b4f..00000000000 --- a/tests/ui/builtin-clone-unwind.rs +++ /dev/null @@ -1,61 +0,0 @@ -//@ run-pass -//@ needs-unwind - -#![allow(unused_variables)] -#![allow(unused_imports)] - -// Test that builtin implementations of `Clone` cleanup everything -// in case of unwinding. - -use std::thread; -use std::rc::Rc; - -struct S(Rc<()>); - -impl Clone for S { - fn clone(&self) -> Self { - if Rc::strong_count(&self.0) == 7 { - panic!("oops"); - } - - S(self.0.clone()) - } -} - -fn main() { - let counter = Rc::new(()); - - // Unwinding with tuples... - let ccounter = counter.clone(); - let result = std::panic::catch_unwind(move || { - let _ = ( - S(ccounter.clone()), - S(ccounter.clone()), - S(ccounter.clone()), - S(ccounter) - ).clone(); - }); - - assert!(result.is_err()); - assert_eq!( - 1, - Rc::strong_count(&counter) - ); - - // ... and with arrays. - let ccounter = counter.clone(); - let child = std::panic::catch_unwind(move || { - let _ = [ - S(ccounter.clone()), - S(ccounter.clone()), - S(ccounter.clone()), - S(ccounter) - ].clone(); - }); - - assert!(child.is_err()); - assert_eq!( - 1, - Rc::strong_count(&counter) - ); -} diff --git a/tests/ui/can-copy-pod.rs b/tests/ui/can-copy-pod.rs deleted file mode 100644 index ffb8a08fa98..00000000000 --- a/tests/ui/can-copy-pod.rs +++ /dev/null @@ -1,15 +0,0 @@ -//@ run-pass - -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -// Tests that type parameters with the `Copy` are implicitly copyable. - -#![allow(dead_code)] - -fn can_copy_copy(v: T) { - let _a = v; - let _b = v; -} - -pub fn main() {} diff --git a/tests/ui/cancel-clean-via-immediate-rvalue-ref.rs b/tests/ui/cancel-clean-via-immediate-rvalue-ref.rs deleted file mode 100644 index 12d143bd989..00000000000 --- a/tests/ui/cancel-clean-via-immediate-rvalue-ref.rs +++ /dev/null @@ -1,9 +0,0 @@ -//@ run-pass - -fn foo(x: &mut Box) { - *x = Box::new(5); -} - -pub fn main() { - foo(&mut Box::new(4)); -} diff --git a/tests/ui/cannot-mutate-captured-non-mut-var.rs b/tests/ui/cannot-mutate-captured-non-mut-var.rs deleted file mode 100644 index 952dab25bf9..00000000000 --- a/tests/ui/cannot-mutate-captured-non-mut-var.rs +++ /dev/null @@ -1,15 +0,0 @@ -#![feature(unboxed_closures, tuple_trait)] - -use std::io::Read; - -fn to_fn_once>(f: F) -> F { f } - -fn main() { - let x = 1; - to_fn_once(move|| { x = 2; }); - //~^ ERROR: cannot assign to `x`, as it is not declared as mutable - - let s = std::io::stdin(); - to_fn_once(move|| { s.read_to_end(&mut Vec::new()); }); - //~^ ERROR: cannot borrow `s` as mutable, as it is not declared as mutable -} diff --git a/tests/ui/cannot-mutate-captured-non-mut-var.stderr b/tests/ui/cannot-mutate-captured-non-mut-var.stderr deleted file mode 100644 index 8d794f8251f..00000000000 --- a/tests/ui/cannot-mutate-captured-non-mut-var.stderr +++ /dev/null @@ -1,26 +0,0 @@ -error[E0594]: cannot assign to `x`, as it is not declared as mutable - --> $DIR/cannot-mutate-captured-non-mut-var.rs:9:25 - | -LL | to_fn_once(move|| { x = 2; }); - | ^^^^^ cannot assign - | -help: consider changing this to be mutable - | -LL | let mut x = 1; - | +++ - -error[E0596]: cannot borrow `s` as mutable, as it is not declared as mutable - --> $DIR/cannot-mutate-captured-non-mut-var.rs:13:25 - | -LL | to_fn_once(move|| { s.read_to_end(&mut Vec::new()); }); - | ^ cannot borrow as mutable - | -help: consider changing this to be mutable - | -LL | let mut s = std::io::stdin(); - | +++ - -error: aborting due to 2 previous errors - -Some errors have detailed explanations: E0594, E0596. -For more information about an error, try `rustc --explain E0594`. diff --git a/tests/ui/closures/closure-immut-capture-error.rs b/tests/ui/closures/closure-immut-capture-error.rs new file mode 100644 index 00000000000..19fe599f241 --- /dev/null +++ b/tests/ui/closures/closure-immut-capture-error.rs @@ -0,0 +1,23 @@ +//! Tests that mutation of captured immutable variables in closures are not permitted. + +#![feature(unboxed_closures, tuple_trait)] + +use std::io::Read; + +fn to_fn_once>(f: F) -> F { + f +} + +fn main() { + let x = 1; + to_fn_once(move || { + x = 2; + //~^ ERROR: cannot assign to `x`, as it is not declared as mutable + }); + + let s = std::io::stdin(); + to_fn_once(move || { + s.read_to_end(&mut Vec::new()); + //~^ ERROR: cannot borrow `s` as mutable, as it is not declared as mutable + }); +} diff --git a/tests/ui/closures/closure-immut-capture-error.stderr b/tests/ui/closures/closure-immut-capture-error.stderr new file mode 100644 index 00000000000..516cf7c074e --- /dev/null +++ b/tests/ui/closures/closure-immut-capture-error.stderr @@ -0,0 +1,26 @@ +error[E0594]: cannot assign to `x`, as it is not declared as mutable + --> $DIR/closure-immut-capture-error.rs:14:9 + | +LL | x = 2; + | ^^^^^ cannot assign + | +help: consider changing this to be mutable + | +LL | let mut x = 1; + | +++ + +error[E0596]: cannot borrow `s` as mutable, as it is not declared as mutable + --> $DIR/closure-immut-capture-error.rs:20:9 + | +LL | s.read_to_end(&mut Vec::new()); + | ^ cannot borrow as mutable + | +help: consider changing this to be mutable + | +LL | let mut s = std::io::stdin(); + | +++ + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0594, E0596. +For more information about an error, try `rustc --explain E0594`. diff --git a/tests/ui/codegen/rvalue-mut-ref-box-drop.rs b/tests/ui/codegen/rvalue-mut-ref-box-drop.rs new file mode 100644 index 00000000000..441820ad64e --- /dev/null +++ b/tests/ui/codegen/rvalue-mut-ref-box-drop.rs @@ -0,0 +1,13 @@ +//! Tests cleanup of a temporary `Box` rvalue passed as a mutable reference. +//! +//! - Issue: . + +//@ run-pass + +fn foo(x: &mut Box) { + *x = Box::new(5); +} + +pub fn main() { + foo(&mut Box::new(4)); +} diff --git a/tests/ui/loops/loop-break-never-type-mismatch.rs b/tests/ui/loops/loop-break-never-type-mismatch.rs new file mode 100644 index 00000000000..2be4e4f4ac5 --- /dev/null +++ b/tests/ui/loops/loop-break-never-type-mismatch.rs @@ -0,0 +1,56 @@ +//! Tests type mismatches with `break` and diverging types in loops + +#![feature(never_type)] + +fn loop_break_return() -> i32 { + let loop_value = loop { + break return 0; + }; // ok +} + +fn loop_break_loop() -> i32 { + let loop_value = loop { + break loop {}; + }; // ok +} + +fn loop_break_break() -> i32 { + //~^ ERROR mismatched types + let loop_value = loop { + break break; + }; +} + +fn loop_break_return_2() -> i32 { + let loop_value = loop { + break { + return 0; + () + }; + }; // ok +} + +enum Void {} + +fn get_void() -> Void { + panic!() +} + +fn loop_break_void() -> i32 { + //~^ ERROR mismatched types + let loop_value = loop { + break get_void(); + }; +} + +fn get_never() -> ! { + panic!() +} + +fn loop_break_never() -> i32 { + let loop_value = loop { + break get_never(); + }; // ok +} + +fn main() {} diff --git a/tests/ui/loops/loop-break-never-type-mismatch.stderr b/tests/ui/loops/loop-break-never-type-mismatch.stderr new file mode 100644 index 00000000000..e6868f375e2 --- /dev/null +++ b/tests/ui/loops/loop-break-never-type-mismatch.stderr @@ -0,0 +1,19 @@ +error[E0308]: mismatched types + --> $DIR/loop-break-never-type-mismatch.rs:17:26 + | +LL | fn loop_break_break() -> i32 { + | ---------------- ^^^ expected `i32`, found `()` + | | + | implicitly returns `()` as its body has no tail or `return` expression + +error[E0308]: mismatched types + --> $DIR/loop-break-never-type-mismatch.rs:39:25 + | +LL | fn loop_break_void() -> i32 { + | --------------- ^^^ expected `i32`, found `()` + | | + | implicitly returns `()` as its body has no tail or `return` expression + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0308`. diff --git a/tests/ui/traits/clone-unwind-rc-cleanup.rs b/tests/ui/traits/clone-unwind-rc-cleanup.rs new file mode 100644 index 00000000000..cd02050ea27 --- /dev/null +++ b/tests/ui/traits/clone-unwind-rc-cleanup.rs @@ -0,0 +1,46 @@ +//! Tests cleanup behavior of the built-in `Clone` impl for tuples during unwinding. + +//@ run-pass +//@ needs-unwind + +#![allow(unused_variables)] +#![allow(unused_imports)] + +use std::rc::Rc; +use std::thread; + +struct S(Rc<()>); + +impl Clone for S { + fn clone(&self) -> Self { + if Rc::strong_count(&self.0) == 7 { + panic!("oops"); + } + + S(self.0.clone()) + } +} + +fn main() { + let counter = Rc::new(()); + + // Unwinding with tuples... + let ccounter = counter.clone(); + let result = std::panic::catch_unwind(move || { + let _ = + (S(ccounter.clone()), S(ccounter.clone()), S(ccounter.clone()), S(ccounter)).clone(); + }); + + assert!(result.is_err()); + assert_eq!(1, Rc::strong_count(&counter)); + + // ... and with arrays. + let ccounter = counter.clone(); + let child = std::panic::catch_unwind(move || { + let _ = + [S(ccounter.clone()), S(ccounter.clone()), S(ccounter.clone()), S(ccounter)].clone(); + }); + + assert!(child.is_err()); + assert_eq!(1, Rc::strong_count(&counter)); +} diff --git a/tests/ui/traits/copy-trait-implicit-copy.rs b/tests/ui/traits/copy-trait-implicit-copy.rs new file mode 100644 index 00000000000..e06385587b4 --- /dev/null +++ b/tests/ui/traits/copy-trait-implicit-copy.rs @@ -0,0 +1,15 @@ +//! Tests that type parameters with the `Copy` are implicitly copyable. + +//@ run-pass + +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +#![allow(dead_code)] + +fn can_copy_copy(v: T) { + let _a = v; + let _b = v; +} + +pub fn main() {} -- cgit 1.4.1-3-g733a5