summaryrefslogtreecommitdiffstats
path: root/src/test/ui/consts/const_in_pattern/accept_structural.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/consts/const_in_pattern/accept_structural.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/consts/const_in_pattern/accept_structural.rs')
-rw-r--r--src/test/ui/consts/const_in_pattern/accept_structural.rs66
1 files changed, 0 insertions, 66 deletions
diff --git a/src/test/ui/consts/const_in_pattern/accept_structural.rs b/src/test/ui/consts/const_in_pattern/accept_structural.rs
deleted file mode 100644
index 1f56f581c..000000000
--- a/src/test/ui/consts/const_in_pattern/accept_structural.rs
+++ /dev/null
@@ -1,66 +0,0 @@
-// run-pass
-
-#![warn(indirect_structural_match)]
-
-// This test is checking our logic for structural match checking by enumerating
-// the different kinds of const expressions. This test is collecting cases where
-// we have accepted the const expression as a pattern in the past and wish to
-// continue doing so.
-//
-// Even if a non-structural-match type is part of an expression in a const's
-// definition, that does not necessarily disqualify the const from being a match
-// pattern: in principle, we just need the types involved in the final value to
-// be structurally matchable.
-
-// See also RFC 1445
-
-#![feature(type_ascription)]
-
-#[derive(Copy, Clone, Debug)]
-struct NoPartialEq(u32);
-
-#[derive(Copy, Clone, Debug)]
-struct NoDerive(u32);
-
-// This impl makes `NoDerive` irreflexive.
-impl PartialEq for NoDerive { fn eq(&self, _: &Self) -> bool { false } }
-impl Eq for NoDerive { }
-
-type OND = Option<NoDerive>;
-
-fn main() {
- const FIELD1: u32 = NoPartialEq(1).0;
- match 1 { FIELD1 => dbg!(FIELD1), _ => panic!("whoops"), };
- const FIELD2: u32 = NoDerive(1).0;
- match 1 { FIELD2 => dbg!(FIELD2), _ => panic!("whoops"), };
-
- enum CLike { One = 1, #[allow(dead_code)] Two = 2, }
- const ONE_CAST: u32 = CLike::One as u32;
- match 1 { ONE_CAST => dbg!(ONE_CAST), _ => panic!("whoops"), };
-
- const NO_DERIVE_NONE: OND = None;
- const INDIRECT: OND = NO_DERIVE_NONE;
- match None { INDIRECT => dbg!(INDIRECT), _ => panic!("whoops"), };
-
- const TUPLE: (OND, OND) = (None, None);
- match (None, None) { TUPLE => dbg!(TUPLE), _ => panic!("whoops"), };
-
- const TYPE_ASCRIPTION: OND = type_ascribe!(None, OND);
- match None { TYPE_ASCRIPTION => dbg!(TYPE_ASCRIPTION), _ => panic!("whoops"), };
-
- const ARRAY: [OND; 2] = [None, None];
- match [None; 2] { ARRAY => dbg!(ARRAY), _ => panic!("whoops"), };
-
- const REPEAT: [OND; 2] = [None; 2];
- match [None, None] { REPEAT => dbg!(REPEAT), _ => panic!("whoops"), };
-
- trait Trait: Sized { const ASSOC: Option<Self>; }
- impl Trait for NoDerive { const ASSOC: Option<NoDerive> = None; }
- match None { NoDerive::ASSOC => dbg!(NoDerive::ASSOC), _ => panic!("whoops"), };
-
- const BLOCK: OND = { NoDerive(10); None };
- match None { BLOCK => dbg!(BLOCK), _ => panic!("whoops"), };
-
- const ADDR_OF: &OND = &None;
- match &None { ADDR_OF => dbg!(ADDR_OF), _ => panic!("whoops"), };
-}