-
Notifications
You must be signed in to change notification settings - Fork 13.4k
static recursion test added to compile-fail test suite #39834
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This won't work, and is not what @jseyfried meant. Just make one line of code, followed by one line of comment, then one line of code, etc. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, I figured, it's just that the problem here is that it complains that the issue is always at line 21, and it is expecting 3 errors, which is confusing to me. Any ideas on why that is happening There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this:
fails with this error:
Sorry, I probably should have led with this in the comments as opposed to making a dumb looking edit. I don't understand why line 21 throws 3 of the same error There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm seems its a bug or something. See, that's why we are adding these tests. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think I'll approve it and then file a PR to fix the error message bug. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Cool ^_^ There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm seems its more complicated than I thought. I think I'll let it be, its "only" a feature gate test. But I'll file an issue so that it doesn't get forgotten. |
||
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]); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: current year