summaryrefslogtreecommitdiffstats
path: root/src/test/ui/rfc-2632-const-trait-impl/const-drop.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/rfc-2632-const-trait-impl/const-drop.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/rfc-2632-const-trait-impl/const-drop.rs')
-rw-r--r--src/test/ui/rfc-2632-const-trait-impl/const-drop.rs113
1 files changed, 0 insertions, 113 deletions
diff --git a/src/test/ui/rfc-2632-const-trait-impl/const-drop.rs b/src/test/ui/rfc-2632-const-trait-impl/const-drop.rs
deleted file mode 100644
index b0fc3adf9..000000000
--- a/src/test/ui/rfc-2632-const-trait-impl/const-drop.rs
+++ /dev/null
@@ -1,113 +0,0 @@
-// run-pass
-// revisions: stock precise
-#![feature(const_trait_impl)]
-#![feature(const_mut_refs)]
-#![feature(never_type)]
-#![cfg_attr(precise, feature(const_precise_live_drops))]
-
-use std::marker::Destruct;
-
-struct S<'a>(&'a mut u8);
-
-impl<'a> const Drop for S<'a> {
- fn drop(&mut self) {
- *self.0 += 1;
- }
-}
-
-const fn a<T: ~const Destruct>(_: T) {}
-
-const fn b() -> u8 {
- let mut c = 0;
- let _ = S(&mut c);
- a(S(&mut c));
- c
-}
-
-const C: u8 = b();
-
-macro_rules! implements_const_drop {
- ($($exp:expr),*$(,)?) => {
- $(
- const _: () = a($exp);
- )*
- }
-}
-
-#[allow(dead_code)]
-mod t {
- pub struct Foo;
- pub enum Bar { A }
- pub fn foo() {}
- pub struct ConstDrop;
-
- impl const Drop for ConstDrop {
- fn drop(&mut self) {}
- }
-
- pub struct HasConstDrop(pub ConstDrop);
- pub struct TrivialFields(pub u8, pub i8, pub usize, pub isize);
-
- #[const_trait]
- pub trait SomeTrait {
- fn foo();
- }
- impl const SomeTrait for () {
- fn foo() {}
- }
- // non-const impl
- impl SomeTrait for i32 {
- fn foo() {}
- }
-
- pub struct ConstDropWithBound<T: ~const SomeTrait>(pub core::marker::PhantomData<T>);
-
- impl<T: ~const SomeTrait> const Drop for ConstDropWithBound<T> {
- fn drop(&mut self) {
- T::foo();
- }
- }
-
- pub struct ConstDropWithNonconstBound<T: SomeTrait>(pub core::marker::PhantomData<T>);
-
- impl<T: SomeTrait> const Drop for ConstDropWithNonconstBound<T> {
- fn drop(&mut self) {
- // Note: we DON'T use the `T: SomeTrait` bound
- }
- }
-}
-
-use t::*;
-
-implements_const_drop! {
- 1u8,
- 2,
- 3.0,
- Foo,
- Bar::A,
- foo,
- ConstDrop,
- HasConstDrop(ConstDrop),
- TrivialFields(1, 2, 3, 4),
- &1,
- &1 as *const i32,
- ConstDropWithBound::<()>,
- ConstDropWithNonconstBound::<i32>,
- Result::<i32, !>::Ok(1),
-}
-
-fn main() {
- struct HasDropGlue(#[allow(unused_tuple_struct_fields)] Box<u8>);
- struct HasDropImpl;
- impl Drop for HasDropImpl {
- fn drop(&mut self) {
- println!("not trivial drop");
- }
- }
-
- // These types should pass because ~const in a non-const context should have no effect.
- a(HasDropGlue(Box::new(0)));
- a(HasDropImpl);
-
- assert_eq!(C, 2);
-}