diff options
| author | bors <bors@rust-lang.org> | 2014-10-18 04:32:16 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-10-18 04:32:16 +0000 |
| commit | 2c0f87610d8fdcb6a90cd8dd1a372fe0ccc8a418 (patch) | |
| tree | 8d4eee30cd81bc590ee5314e68727ef97b367887 /src/test | |
| parent | 1270f8e77a53b5be5ea3de10440c79394c0ad025 (diff) | |
| parent | f4a7d32c8b53649d20735c8a90469b08fe7cc3dc (diff) | |
| download | rust-2c0f87610d8fdcb6a90cd8dd1a372fe0ccc8a418.tar.gz rust-2c0f87610d8fdcb6a90cd8dd1a372fe0ccc8a418.zip | |
auto merge of #18022 : nikomatsakis/rust/issue-18019, r=pcwalton
Only consider impliciy unboxed closure impl if the obligation is actually for `Fn`, `FnMut`, or `FnOnce`. Fixes #18019 r? @pcwalton
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/compile-fail/type-params-in-different-spaces-2.rs | 11 | ||||
| -rw-r--r-- | src/test/run-pass/multidispatch-infer-from-single-impl.rs | 32 |
2 files changed, 36 insertions, 7 deletions
diff --git a/src/test/compile-fail/type-params-in-different-spaces-2.rs b/src/test/compile-fail/type-params-in-different-spaces-2.rs index d1bbda932cb..9be64bf5346 100644 --- a/src/test/compile-fail/type-params-in-different-spaces-2.rs +++ b/src/test/compile-fail/type-params-in-different-spaces-2.rs @@ -8,28 +8,25 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +// Test static calls to make sure that we align the Self and input +// type parameters on a trait correctly. + trait Tr<T> { fn op(T) -> Self; } -// these compile as if Self: Tr<U>, even tho only Self: Tr<Self or T> trait A: Tr<Self> { fn test<U>(u: U) -> Self { Tr::op(u) //~ ERROR not implemented } } + trait B<T>: Tr<T> { fn test<U>(u: U) -> Self { Tr::op(u) //~ ERROR not implemented } } -impl<T> Tr<T> for T { - fn op(t: T) -> T { t } -} -impl<T> A for T {} - fn main() { - std::io::println(A::test((&7306634593706211700, 8))); } diff --git a/src/test/run-pass/multidispatch-infer-from-single-impl.rs b/src/test/run-pass/multidispatch-infer-from-single-impl.rs new file mode 100644 index 00000000000..f4ca67548fd --- /dev/null +++ b/src/test/run-pass/multidispatch-infer-from-single-impl.rs @@ -0,0 +1,32 @@ +// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test that we correctly infer that `E` must be `()` here. This is +// known because there is just one impl that could apply where +// `Self=()`. + +pub trait FromError<E> { + fn from_error(err: E) -> Self; +} + +impl<E> FromError<E> for E { + fn from_error(err: E) -> E { + err + } +} + +fn test() -> Result<(), ()> { + Err(FromError::from_error(())) +} + +fn main() { + let result = (|| Err(FromError::from_error(())))(); + let foo: () = result.unwrap_or(()); +} |
