diff options
| author | Corey Farwell <coreyf@rwell.org> | 2017-02-15 23:48:15 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-02-15 23:48:15 -0500 |
| commit | 4a07be3bea22d57964e02909b6570fc436a4b82e (patch) | |
| tree | 1850a08463d830210eeeaf48828c26ee6956d5b1 | |
| parent | 01ccaa3673011c028caf2cc781f36462fb2951f7 (diff) | |
| parent | cf20d8e23cb590ab405476ce0ad184d9856be9cd (diff) | |
| download | rust-4a07be3bea22d57964e02909b6570fc436a4b82e.tar.gz rust-4a07be3bea22d57964e02909b6570fc436a4b82e.zip | |
Rollup merge of #39834 - cseale:feature-gate-static-recursion, r=est31
static recursion test added to compile-fail test suite Issue #39059 r? @est31
| -rw-r--r-- | src/test/compile-fail/feature-gate-static_recursion.rs | 49 | ||||
| -rw-r--r-- | src/tools/tidy/src/features.rs | 2 |
2 files changed, 50 insertions, 1 deletions
diff --git a/src/test/compile-fail/feature-gate-static_recursion.rs b/src/test/compile-fail/feature-gate-static_recursion.rs new file mode 100644 index 00000000000..bd20c891d8e --- /dev/null +++ b/src/test/compile-fail/feature-gate-static_recursion.rs @@ -0,0 +1,49 @@ +// 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. + +static mut S: *const u8 = unsafe { &S as *const *const u8 as *const u8 }; +//~^ ERROR recursive static (see issue #29719) + +struct StaticDoubleLinked { + prev: &'static StaticDoubleLinked, + next: &'static StaticDoubleLinked, + data: i32, + head: bool, +} + +static L1: StaticDoubleLinked = StaticDoubleLinked{prev: &L3, next: &L2, data: 1, head: true}; +//~^ ERROR recursive static (see issue #29719) +//~^^ ERROR recursive static (see issue #29719) +//~^^^ ERROR recursive static (see issue #29719) +static L2: StaticDoubleLinked = StaticDoubleLinked{prev: &L1, next: &L3, data: 2, head: false}; +static L3: StaticDoubleLinked = StaticDoubleLinked{prev: &L2, next: &L1, data: 3, head: false}; + + +pub fn main() { + unsafe { assert_eq!(S, *(S as *const *const u8)); } + + let mut test_vec = Vec::new(); + let mut cur = &L1; + loop { + test_vec.push(cur.data); + cur = cur.next; + if cur.head { break } + } + assert_eq!(&test_vec, &[1,2,3]); + + let mut test_vec = Vec::new(); + let mut cur = &L1; + loop { + cur = cur.prev; + test_vec.push(cur.data); + if cur.head { break } + } + assert_eq!(&test_vec, &[3,2,1]); +} diff --git a/src/tools/tidy/src/features.rs b/src/tools/tidy/src/features.rs index cb6e73237d5..13f272517b1 100644 --- a/src/tools/tidy/src/features.rs +++ b/src/tools/tidy/src/features.rs @@ -166,7 +166,7 @@ pub fn check(path: &Path, bad: &mut bool) { // FIXME get this whitelist empty. let whitelist = vec