diff options
| author | Manish Goregaokar <manishsmail@gmail.com> | 2015-02-27 11:44:12 +0530 |
|---|---|---|
| committer | Manish Goregaokar <manishsmail@gmail.com> | 2015-02-27 22:07:03 +0530 |
| commit | ef80ade4069aede2e7c08b04556177ce7ea9ae3d (patch) | |
| tree | 8506cb13936fa5e60c8eca8cacf807dfe9c0f8a7 /src | |
| parent | 91569a95f16580f05f9dcb4b6d6eff50203cdde8 (diff) | |
| parent | 7074346e4f092064c5a5fa276be81d08951f56c9 (diff) | |
| download | rust-ef80ade4069aede2e7c08b04556177ce7ea9ae3d.tar.gz rust-ef80ade4069aede2e7c08b04556177ce7ea9ae3d.zip | |
Rollup merge of #22809 - nikomatsakis:issue-22655-infinite-recursion, r=pnkfelix
Change MarkerTrait to be invariant. This is a (small) loss of expressiveness, but is necessary for now to work around #22806. Fixes #22655. r? @pnkfelix
Diffstat (limited to 'src')
| -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 ()>>(); +} |
