about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2019-06-09 03:04:56 +0900
committerYuki Okushi <huyuumi.dev@gmail.com>2019-06-09 03:04:56 +0900
commitd69d0d7aa76af6496c6d623990ae6e20ecc4f947 (patch)
tree4daa366866ea441fa1261f9baa8fabdde273695e
parentc5295ac64a8f2c7aee9cdd13b8fe00b82aff8435 (diff)
downloadrust-d69d0d7aa76af6496c6d623990ae6e20ecc4f947.tar.gz
rust-d69d0d7aa76af6496c6d623990ae6e20ecc4f947.zip
Add test for ICE
-rw-r--r--src/test/ui/traits/trait-with-dst.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/test/ui/traits/trait-with-dst.rs b/src/test/ui/traits/trait-with-dst.rs
new file mode 100644
index 00000000000..86d6585bc61
--- /dev/null
+++ b/src/test/ui/traits/trait-with-dst.rs
@@ -0,0 +1,22 @@
+// compile-pass
+// #55266
+
+struct VTable<DST: ?Sized> {
+    _to_dst_ptr: fn(*mut ()) -> *mut DST,
+}
+
+trait HasVTableFor<DST: ?Sized + 'static> {
+    const VTABLE: &'static VTable<DST>;
+}
+
+impl<T, DST: ?Sized + 'static> HasVTableFor<DST> for T {
+    const VTABLE: &'static VTable<DST> = &VTable {
+        _to_dst_ptr: |_: *mut ()| unsafe { std::mem::zeroed() },
+    };
+}
+
+pub fn push<DST: ?Sized + 'static, T>() {
+    <T as HasVTableFor<DST>>::VTABLE;
+}
+
+fn main() {}