diff options
| -rw-r--r-- | src/libcore/marker.rs | 8 | ||||
| -rw-r--r-- | src/test/run-pass/traits-issue-22655.rs | 29 |
2 files changed, 36 insertions, 1 deletions
diff --git a/src/libcore/marker.rs b/src/libcore/marker.rs index 6c934a998de..868a671b956 100644 --- a/src/libcore/marker.rs +++ b/src/libcore/marker.rs @@ -275,7 +275,13 @@ macro_rules! impls{ /// any methods, but instead is used to gate access to data. /// /// FIXME. Better documentation needed here! -pub trait MarkerTrait : PhantomFn<Self> { } +pub trait MarkerTrait : PhantomFn<Self,Self> { } +// ~~~~~ <-- FIXME(#22806)? +// +// Marker trait has been made invariant so as to avoid inf recursion, +// but we should ideally solve the underlying problem. That's a bit +// complicated. + impl<T:?Sized> MarkerTrait for T { } /// `PhantomFn` is a marker trait for use with traits that contain diff --git a/src/test/run-pass/traits-issue-22655.rs b/src/test/run-pass/traits-issue-22655.rs new file mode 100644 index 00000000000..18c7cfb0850 --- /dev/null +++ b/src/test/run-pass/traits-issue-22655.rs @@ -0,0 +1,29 @@ +// Copyright 2015 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. + +// Regression test for issue #22655: This test should not lead to +// infinite recursion. + +unsafe impl<T: Send + ?Sized> Send for Unique<T> { } + +pub struct Unique<T:?Sized> { + pointer: *const T, +} + +pub struct Node<V> { + vals: V, + edges: Unique<Node<V>>, +} + +fn is_send<T: Send>() {} + +fn main() { + is_send::<Node<&'static ()>>(); +} |
