summaryrefslogtreecommitdiffstats
path: root/src/test/ui/generic-associated-types/issue-68641-check-gat-bounds.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/generic-associated-types/issue-68641-check-gat-bounds.rs')
-rw-r--r--src/test/ui/generic-associated-types/issue-68641-check-gat-bounds.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/test/ui/generic-associated-types/issue-68641-check-gat-bounds.rs b/src/test/ui/generic-associated-types/issue-68641-check-gat-bounds.rs
new file mode 100644
index 000000000..617d985dc
--- /dev/null
+++ b/src/test/ui/generic-associated-types/issue-68641-check-gat-bounds.rs
@@ -0,0 +1,31 @@
+// Regression test for #68641
+
+#![feature(generic_associated_types)]
+
+trait UnsafeCopy {
+ type Item<'a>: Copy;
+
+ fn copy<'a>(item: &Self::Item<'a>) -> Self::Item<'a> {
+ *item
+ }
+}
+
+impl<T> UnsafeCopy for T {
+ type Item<'a> = T;
+ //~^ ERROR the trait bound `T: Copy` is not satisfied
+}
+
+fn main() {
+ let mut s = String::from("Hello world!");
+
+ let copy = String::copy(&s);
+
+ // Do we indeed point to the samme memory?
+ assert!(s.as_ptr() == copy.as_ptr());
+
+ // Any use of `copy` is certeinly UB after this
+ drop(s);
+
+ // UB UB UB UB UB!!
+ println!("{}", copy);
+}