summaryrefslogtreecommitdiffstats
path: root/src/test/ui/generator/drop-tracking-parent-expression.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:19:13 +0000
commit218caa410aa38c29984be31a5229b9fa717560ee (patch)
treec54bd55eeb6e4c508940a30e94c0032fbd45d677 /src/test/ui/generator/drop-tracking-parent-expression.rs
parentReleasing progress-linux version 1.67.1+dfsg1-1~progress7.99u1. (diff)
downloadrustc-218caa410aa38c29984be31a5229b9fa717560ee.tar.xz
rustc-218caa410aa38c29984be31a5229b9fa717560ee.zip
Merging upstream version 1.68.2+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/generator/drop-tracking-parent-expression.rs')
-rw-r--r--src/test/ui/generator/drop-tracking-parent-expression.rs69
1 files changed, 0 insertions, 69 deletions
diff --git a/src/test/ui/generator/drop-tracking-parent-expression.rs b/src/test/ui/generator/drop-tracking-parent-expression.rs
deleted file mode 100644
index d40f1b8f6..000000000
--- a/src/test/ui/generator/drop-tracking-parent-expression.rs
+++ /dev/null
@@ -1,69 +0,0 @@
-// compile-flags: -Zdrop-tracking
-#![feature(generators, negative_impls, rustc_attrs)]
-
-macro_rules! type_combinations {
- (
- $( $name:ident => { $( $tt:tt )* } );* $(;)?
- ) => { $(
- mod $name {
- $( $tt )*
-
- impl !Sync for Client {}
- impl !Send for Client {}
- }
-
- // Struct update syntax. This fails because the Client used in the update is considered
- // dropped *after* the yield.
- {
- let g = move || match drop($name::Client { ..$name::Client::default() }) {
- //~^ `significant_drop::Client` which is not `Send`
- //~| `insignificant_dtor::Client` which is not `Send`
- //~| `derived_drop::Client` which is not `Send`
- _ => yield,
- };
- assert_send(g);
- //~^ ERROR cannot be sent between threads
- //~| ERROR cannot be sent between threads
- //~| ERROR cannot be sent between threads
- }
-
- // Simple owned value. This works because the Client is considered moved into `drop`,
- // even though the temporary expression doesn't end until after the yield.
- {
- let g = move || match drop($name::Client::default()) {
- _ => yield,
- };
- assert_send(g);
- }
- )* }
-}
-
-fn assert_send<T: Send>(_thing: T) {}
-
-fn main() {
- type_combinations!(
- // OK
- copy => { #[derive(Copy, Clone, Default)] pub struct Client; };
- // NOT OK: MIR borrowck thinks that this is used after the yield, even though
- // this has no `Drop` impl and only the drops of the fields are observable.
- // FIXME: this should compile.
- derived_drop => { #[derive(Default)] pub struct Client { pub nickname: String } };
- // NOT OK
- significant_drop => {
- #[derive(Default)]
- pub struct Client;
- impl Drop for Client {
- fn drop(&mut self) {}
- }
- };
- // NOT OK (we need to agree with MIR borrowck)
- insignificant_dtor => {
- #[derive(Default)]
- #[rustc_insignificant_dtor]
- pub struct Client;
- impl Drop for Client {
- fn drop(&mut self) {}
- }
- };
- );
-}