diff options
| author | bors <bors@rust-lang.org> | 2015-11-06 13:13:08 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-11-06 13:13:08 +0000 |
| commit | 7cd8f69a4f06d41979f95c48ec6bca2310fae995 (patch) | |
| tree | 99ded824d6de7a9e8b0748cdfe45e493e5a4e652 /src/test | |
| parent | 2f59977d96ebe5cf5fc000bf27e3f663cad3250c (diff) | |
| parent | 1d693976df991c4e1e9bc9c823ccb71e70c6f397 (diff) | |
| download | rust-7cd8f69a4f06d41979f95c48ec6bca2310fae995.tar.gz rust-7cd8f69a4f06d41979f95c48ec6bca2310fae995.zip | |
Auto merge of #29620 - petrochenkov:reachable2, r=alexcrichton
Handle them in `middle::reachable` instead (no optimizations so far, just drop all trait impl items into the reachable set, as before). Addresses the concerns from https://github.com/rust-lang/rust/pull/29291#discussion_r43672413 \+ In `middle::reachable` don't treat impls of `Drop` specially, they are subsumed by the general impl treatment. \+ Add some tests checking reachability of trait methods written in UFCS form \+ Minor refactoring in the second commit r? @alexcrichton
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/auxiliary/issue-11225-1.rs | 5 | ||||
| -rw-r--r-- | src/test/auxiliary/issue-11225-2.rs | 6 | ||||
| -rw-r--r-- | src/test/auxiliary/issue-11225-3.rs | 11 | ||||
| -rw-r--r-- | src/test/run-pass/issue-11225-1.rs | 1 | ||||
| -rw-r--r-- | src/test/run-pass/issue-11225-2.rs | 1 | ||||
| -rw-r--r-- | src/test/run-pass/issue-11225-3.rs | 3 |
6 files changed, 25 insertions, 2 deletions
diff --git a/src/test/auxiliary/issue-11225-1.rs b/src/test/auxiliary/issue-11225-1.rs index 37543ea1d3c..e1ec15be927 100644 --- a/src/test/auxiliary/issue-11225-1.rs +++ b/src/test/auxiliary/issue-11225-1.rs @@ -11,13 +11,18 @@ mod inner { pub trait Trait { fn f(&self) { f(); } + fn f_ufcs(&self) { f_ufcs(); } } impl Trait for isize {} fn f() {} + fn f_ufcs() {} } pub fn foo<T: inner::Trait>(t: T) { t.f(); } +pub fn foo_ufcs<T: inner::Trait>(t: T) { + T::f_ufcs(&t); +} diff --git a/src/test/auxiliary/issue-11225-2.rs b/src/test/auxiliary/issue-11225-2.rs index f12e4c9b6e7..25110edda27 100644 --- a/src/test/auxiliary/issue-11225-2.rs +++ b/src/test/auxiliary/issue-11225-2.rs @@ -14,15 +14,18 @@ mod inner { pub struct Foo; pub trait Trait { fn f(&self); + fn f_ufcs(&self); } impl Trait for Foo { fn f(&self) { } + fn f_ufcs(&self) { } } } pub trait Outer { fn foo<T: Trait>(&self, t: T) { t.f(); } + fn foo_ufcs<T: Trait>(&self, t: T) { T::f(&t); } } impl Outer for isize {} @@ -30,3 +33,6 @@ impl Outer for isize {} pub fn foo<T: Outer>(t: T) { t.foo(inner::Foo); } +pub fn foo_ufcs<T: Outer>(t: T) { + T::foo_ufcs(&t, inner::Foo) +} diff --git a/src/test/auxiliary/issue-11225-3.rs b/src/test/auxiliary/issue-11225-3.rs index 51d73925dff..d48fb68ba0f 100644 --- a/src/test/auxiliary/issue-11225-3.rs +++ b/src/test/auxiliary/issue-11225-3.rs @@ -10,20 +10,29 @@ trait PrivateTrait { fn private_trait_method(&self); + fn private_trait_method_ufcs(&self); } struct PrivateStruct; impl PrivateStruct { fn private_inherent_method(&self) { } + fn private_inherent_method_ufcs(&self) { } } impl PrivateTrait for PrivateStruct { fn private_trait_method(&self) { } + fn private_trait_method_ufcs(&self) { } } #[inline] -pub fn public_generic_function() { +pub fn public_inlinable_function() { PrivateStruct.private_trait_method(); PrivateStruct.private_inherent_method(); } + +#[inline] +pub fn public_inlinable_function_ufcs() { + PrivateStruct::private_trait_method(&PrivateStruct); + PrivateStruct::private_inherent_method(&PrivateStruct); +} diff --git a/src/test/run-pass/issue-11225-1.rs b/src/test/run-pass/issue-11225-1.rs index a74fdbe3de4..60789be62b3 100644 --- a/src/test/run-pass/issue-11225-1.rs +++ b/src/test/run-pass/issue-11225-1.rs @@ -16,4 +16,5 @@ extern crate issue_11225_1 as foo; pub fn main() { foo::foo(1); + foo::foo_ufcs(1); } diff --git a/src/test/run-pass/issue-11225-2.rs b/src/test/run-pass/issue-11225-2.rs index c6fc5e8b484..540183b7ef4 100644 --- a/src/test/run-pass/issue-11225-2.rs +++ b/src/test/run-pass/issue-11225-2.rs @@ -16,4 +16,5 @@ extern crate issue_11225_2 as foo; pub fn main() { foo::foo(1); + foo::foo_ufcs(1); } diff --git a/src/test/run-pass/issue-11225-3.rs b/src/test/run-pass/issue-11225-3.rs index 046c145e70e..317c3d3222d 100644 --- a/src/test/run-pass/issue-11225-3.rs +++ b/src/test/run-pass/issue-11225-3.rs @@ -15,5 +15,6 @@ extern crate issue_11225_3; pub fn main() { - issue_11225_3::public_generic_function(); + issue_11225_3::public_inlinable_function(); + issue_11225_3::public_inlinable_function_ufcs(); } |
