about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2023-08-05 13:23:12 +0200
committerRalf Jung <post@ralfj.de>2023-08-06 21:25:49 +0200
commitb66b322a2aaecbcc5dd254c799393cbb702946fe (patch)
treeda5205e23d558a4e0505ddc2ce7ed50c361cc407
parentbc720ad36b74c428b210c71c66e4490cec12b023 (diff)
downloadrust-b66b322a2aaecbcc5dd254c799393cbb702946fe.tar.gz
rust-b66b322a2aaecbcc5dd254c799393cbb702946fe.zip
add testcase that hits valtree_into_mplace with a custom DST
-rw-r--r--tests/ui/const-generics/slice-const-param.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/ui/const-generics/slice-const-param.rs b/tests/ui/const-generics/slice-const-param.rs
index 05d21e08d74..90c573ab365 100644
--- a/tests/ui/const-generics/slice-const-param.rs
+++ b/tests/ui/const-generics/slice-const-param.rs
@@ -11,9 +11,30 @@ pub fn function_with_bytes<const BYTES: &'static [u8]>() -> &'static [u8] {
     BYTES
 }
 
+// Also check the codepaths for custom DST
+#[derive(PartialEq, Eq)]
+struct MyStr(str);
+impl std::marker::ConstParamTy for MyStr {}
+
+fn function_with_my_str<const S: &'static MyStr>() -> &'static MyStr {
+    S
+}
+
+impl MyStr {
+    const fn new(s: &'static str) -> &'static MyStr {
+        unsafe { std::mem::transmute(s) }
+    }
+
+    fn as_str(&self) -> &str {
+        &self.0
+    }
+}
+
 pub fn main() {
     assert_eq!(function_with_str::<"Rust">(), "Rust");
     assert_eq!(function_with_str::<"ℇ㇈↦">(), "ℇ㇈↦");
     assert_eq!(function_with_bytes::<b"AAAA">(), &[0x41, 0x41, 0x41, 0x41]);
     assert_eq!(function_with_bytes::<{&[0x41, 0x41, 0x41, 0x41]}>(), b"AAAA");
+
+    assert_eq!(function_with_my_str::<{ MyStr::new("hello") }>().as_str(), "hello");
 }