| // Regression test for the ICE described in #87046. |
| |
| #![crate_type="lib"] |
| #![allow(unreachable_patterns)] |
| |
| #[derive(PartialEq, Eq)] |
| #[repr(transparent)] |
| pub struct Username(str); |
| |
| pub const ROOT_USER: &Username = Username::from_str("root"); |
| |
| impl Username { |
| pub const fn from_str(raw: &str) -> &Self { |
| union Transmute<'a> { |
| raw: &'a str, |
| typed: &'a Username, |
| } |
| |
| unsafe { Transmute { raw }.typed } |
| } |
| |
| pub const fn as_str(&self) -> &str { |
| &self.0 |
| } |
| |
| pub fn is_root(&self) -> bool { |
| match self { |
| ROOT_USER => true, |
| //~^ ERROR: cannot use unsized non-slice type `Username` in constant patterns |
| _ => false, |
| } |
| } |
| } |