about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2019-12-11 10:09:40 -0500
committerNiko Matsakis <niko@alum.mit.edu>2019-12-14 09:01:13 -0500
commitdc49b2cdfde4617b58f5b1e1b18171c06eb417c6 (patch)
tree2ae7bf2eef2f36124d1130437e06663d04ecc7d3 /src/test
parentd286113024ce50ada7a34f00041f4ff41f3217e6 (diff)
downloadrust-dc49b2cdfde4617b58f5b1e1b18171c06eb417c6.tar.gz
rust-dc49b2cdfde4617b58f5b1e1b18171c06eb417c6.zip
Add regression test for #66757
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/never_type/never-value-fallback-issue-66757.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/test/ui/never_type/never-value-fallback-issue-66757.rs b/src/test/ui/never_type/never-value-fallback-issue-66757.rs
new file mode 100644
index 00000000000..f2e9e087307
--- /dev/null
+++ b/src/test/ui/never_type/never-value-fallback-issue-66757.rs
@@ -0,0 +1,29 @@
+// Regression test for #66757
+//
+// Test than when you have a `!` value (e.g., the local variable
+// never) and an uninferred variable (here the argument to `From`) it
+// doesn't fallback to `()` but rather `!`.
+//
+// run-pass
+
+#![feature(never_type)]
+
+// FIXME(#67225) -- this should be true even without the fallback gate.
+#![feature(never_type_fallback)]
+
+struct E;
+
+impl From<!> for E {
+    fn from(_: !) -> E {
+        E
+    }
+}
+
+#[allow(unreachable_code)]
+#[allow(dead_code)]
+fn foo(never: !) {
+    <E as From<!>>::from(never);  // Ok
+    <E as From<_>>::from(never);  // Inference fails here
+}
+
+fn main() { }