diff options
| author | Jakub Wieczorek <jakub@jakub.cc> | 2014-10-16 21:40:21 +0200 |
|---|---|---|
| committer | Jakub Wieczorek <jakub@jakub.cc> | 2014-10-17 00:27:12 +0200 |
| commit | 64716d529a9febcb035fabd444c32872aa55fafe (patch) | |
| tree | f71537b42120dbcb0af4f6f043056882730b8b43 | |
| parent | f3d46bda657d71610b4db74792fe66d407176d46 (diff) | |
| download | rust-64716d529a9febcb035fabd444c32872aa55fafe.tar.gz rust-64716d529a9febcb035fabd444c32872aa55fafe.zip | |
Add tests for a few fixed issues
| -rw-r--r-- | src/libsyntax/ext/base.rs | 2 | ||||
| -rw-r--r-- | src/test/compile-fail/infinite-macro-expansion.rs | 2 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-13847.rs | 14 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-15207.rs | 13 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-16048.rs | 36 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-16098.rs | 28 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-16562.rs | 26 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-16709.rs | 23 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-16747.rs | 27 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-17025.rs | 20 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-17450.rs | 19 | ||||
| -rw-r--r-- | src/test/compile-fail/issue-17636.rs | 19 | ||||
| -rw-r--r-- | src/test/run-pass/issue-13105.rs | 15 | ||||
| -rw-r--r-- | src/test/run-pass/issue-13837.rs | 13 | ||||
| -rw-r--r-- | src/test/run-pass/issue-15261.rs | 15 | ||||
| -rw-r--r-- | src/test/run-pass/issue-16256.rs | 14 | ||||
| -rw-r--r-- | src/test/run-pass/issue-16596.rs | 27 | ||||
| -rw-r--r-- | src/test/run-pass/issue-17121.rs | 39 | ||||
| -rw-r--r-- | src/test/run-pass/issue-9249.rs | 12 | ||||
| -rw-r--r-- | src/test/run-pass/parse-fail.rs | 2 |
20 files changed, 363 insertions, 3 deletions
diff --git a/src/libsyntax/ext/base.rs b/src/libsyntax/ext/base.rs index a137f6e78b8..8b3ae3028e3 100644 --- a/src/libsyntax/ext/base.rs +++ b/src/libsyntax/ext/base.rs @@ -557,7 +557,7 @@ impl<'a> ExtCtxt<'a> { self.recursion_count += 1; if self.recursion_count > self.ecfg.recursion_limit { self.span_fatal(ei.call_site, - format!("Recursion limit reached while expanding the macro `{}`", + format!("recursion limit reached while expanding the macro `{}`", ei.callee.name).as_slice()); } diff --git a/src/test/compile-fail/infinite-macro-expansion.rs b/src/test/compile-fail/infinite-macro-expansion.rs index 3ea5671735d..67a7cdf1024 100644 --- a/src/test/compile-fail/infinite-macro-expansion.rs +++ b/src/test/compile-fail/infinite-macro-expansion.rs @@ -12,7 +12,7 @@ macro_rules! recursive( () => ( - recursive!() //~ ERROR Recursion limit reached while expanding the macro `recursive` + recursive!() //~ ERROR recursion limit reached while expanding the macro `recursive` ) ) diff --git a/src/test/compile-fail/issue-13847.rs b/src/test/compile-fail/issue-13847.rs new file mode 100644 index 00000000000..fb6d1d4fc6e --- /dev/null +++ b/src/test/compile-fail/issue-13847.rs @@ -0,0 +1,14 @@ +// Copyright 2014 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. + +fn main() { + return.is_failure +//~^ ERROR attempted access of field `is_failure` on type `!`, but no field with that name was found +} diff --git a/src/test/compile-fail/issue-15207.rs b/src/test/compile-fail/issue-15207.rs new file mode 100644 index 00000000000..f1c0b622ae4 --- /dev/null +++ b/src/test/compile-fail/issue-15207.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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. + +fn main() { + loop { break.push(1); } //~ ERROR type `!` does not implement any method in scope named `push` +} diff --git a/src/test/compile-fail/issue-16048.rs b/src/test/compile-fail/issue-16048.rs new file mode 100644 index 00000000000..dbd3336962b --- /dev/null +++ b/src/test/compile-fail/issue-16048.rs @@ -0,0 +1,36 @@ +// Copyright 2014 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. + +trait NoLifetime { + fn get<'p, T : Test<'p>>(&self) -> T; +} + +trait Test<'p> { + fn new(buf: &'p mut [u8]) -> Self; +} + +struct Foo<'a> { + buf: &'a mut [u8], +} + +impl<'a> Test<'a> for Foo<'a> { + fn new(buf: &'a mut [u8]) -> Foo<'a> { + Foo { buf: buf } + } +} + +impl<'a> NoLifetime for Foo<'a> { + fn get<'p, T : Test<'a>>(&self) -> T { +//~^ ERROR lifetime parameters or bounds on method `get` do not match the trait declaration + return *self as T; //~ ERROR non-scalar cast: `Foo<'a>` as `T` + } +} + +fn main() {} diff --git a/src/test/compile-fail/issue-16098.rs b/src/test/compile-fail/issue-16098.rs new file mode 100644 index 00000000000..5adcd7c2bb6 --- /dev/null +++ b/src/test/compile-fail/issue-16098.rs @@ -0,0 +1,28 @@ +// Copyright 2014 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. + +#![feature(macro_rules)] + +macro_rules! prob1 { + (0) => { + 0 + }; + ($n:expr) => { + if ($n % 3 == 0) || ($n % 5 == 0) { + $n + prob1!($n - 1); //~ ERROR recursion limit reached while expanding the macro `prob1` + } else { + prob1!($n - 1); + } + }; +} + +fn main() { + println!("Problem 1: {}", prob1!(1000)); +} diff --git a/src/test/compile-fail/issue-16562.rs b/src/test/compile-fail/issue-16562.rs new file mode 100644 index 00000000000..1e69fb7bfc9 --- /dev/null +++ b/src/test/compile-fail/issue-16562.rs @@ -0,0 +1,26 @@ +// Copyright 2014 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. + +trait MatrixShape {} + +struct Col<D, C> { + data: D, + col: C, +} + +impl<T, M: MatrixShape> Collection for Col<M, uint> { +//~^ ERROR unable to infer enough type information to locate the impl of the trait +//~^^ NOTE the trait `core::kinds::Sized` must be implemented because it is required by + fn len(&self) -> uint { + unimplemented!() + } +} + +fn main() {} diff --git a/src/test/compile-fail/issue-16709.rs b/src/test/compile-fail/issue-16709.rs new file mode 100644 index 00000000000..fc15801eb75 --- /dev/null +++ b/src/test/compile-fail/issue-16709.rs @@ -0,0 +1,23 @@ +// Copyright 2014 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. + +use std::ptr; +use std::raw; + +fn main() { + unsafe { + let nil: *const u8 = ptr::null(); + let slice: raw::Slice<u8> = + Slice { //~ ERROR use of trait `Slice` as a struct constructor [E0159] + data: nil, + len: 0, + }; + } +} diff --git a/src/test/compile-fail/issue-16747.rs b/src/test/compile-fail/issue-16747.rs new file mode 100644 index 00000000000..012dc01ca97 --- /dev/null +++ b/src/test/compile-fail/issue-16747.rs @@ -0,0 +1,27 @@ +// Copyright 2014 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. + +trait ListItem<'a> { + fn list_name() -> &'a str; +} + +struct List<'a, T: ListItem<'a>> { +//~^ ERROR the parameter type `T` may not live long enough; consider adding an explicit lifetime bo +//~^^ NOTE ...so that the reference type `&'a [T]` does not outlive the data it points at + slice: &'a [T] +} + +impl<'a, T: ListItem<'a>> Collection for List<'a, T> { + fn len(&self) -> uint { + 0 + } +} + +fn main() {} diff --git a/src/test/compile-fail/issue-17025.rs b/src/test/compile-fail/issue-17025.rs new file mode 100644 index 00000000000..1efc78e13b8 --- /dev/null +++ b/src/test/compile-fail/issue-17025.rs @@ -0,0 +1,20 @@ +// Copyright 2014 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. + +enum A { + B(char), + C([Box<A>]), +} + +fn c(c:char) -> A { + B(c) //~ ERROR cannot move a value of type A: the size of A cannot be statically determined +} + +pub fn main() {} diff --git a/src/test/compile-fail/issue-17450.rs b/src/test/compile-fail/issue-17450.rs new file mode 100644 index 00000000000..ca611c62577 --- /dev/null +++ b/src/test/compile-fail/issue-17450.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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. + +#![allow(dead_code)] + +static mut x: int = 3; +static mut y: int = unsafe { + x +//~^ ERROR cannot refer to other statics by value, use the address-of operator or a constant instea +}; + +fn main() {} diff --git a/src/test/compile-fail/issue-17636.rs b/src/test/compile-fail/issue-17636.rs new file mode 100644 index 00000000000..635a184a9d3 --- /dev/null +++ b/src/test/compile-fail/issue-17636.rs @@ -0,0 +1,19 @@ +// Copyright 2014 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. + +trait MyItem<T> {} +impl<T> MyItem<T> for T {} + +pub fn build_archive<'a, I: MyItem<&'a (|&uint|:'a)>>(files: I) {} + +fn main() { + build_archive(&(|_| { })); +//~^ ERROR unable to infer enough type information to locate the impl of the trait `MyItem<&|&uint| +} diff --git a/src/test/run-pass/issue-13105.rs b/src/test/run-pass/issue-13105.rs new file mode 100644 index 00000000000..7fab36bd64e --- /dev/null +++ b/src/test/run-pass/issue-13105.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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. + +trait Foo { + fn quux(u8) {} +} + +fn main() {} diff --git a/src/test/run-pass/issue-13837.rs b/src/test/run-pass/issue-13837.rs new file mode 100644 index 00000000000..221115a0869 --- /dev/null +++ b/src/test/run-pass/issue-13837.rs @@ -0,0 +1,13 @@ +// Copyright 2014 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 TEST_VALUE : *const [int, ..2] = 0x1234 as *const [int, ..2]; + +fn main() {} diff --git a/src/test/run-pass/issue-15261.rs b/src/test/run-pass/issue-15261.rs new file mode 100644 index 00000000000..fbbd40895b2 --- /dev/null +++ b/src/test/run-pass/issue-15261.rs @@ -0,0 +1,15 @@ +// Copyright 2014 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 n_mut: uint = 0; + +static n: &'static uint = unsafe{ &n_mut }; + +fn main() {} diff --git a/src/test/run-pass/issue-16256.rs b/src/test/run-pass/issue-16256.rs new file mode 100644 index 00000000000..48ea3a93296 --- /dev/null +++ b/src/test/run-pass/issue-16256.rs @@ -0,0 +1,14 @@ +// Copyright 2014 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. + +fn main() { + let mut buf = Vec::new(); + |c: u8| buf.push(c); +} diff --git a/src/test/run-pass/issue-16596.rs b/src/test/run-pass/issue-16596.rs new file mode 100644 index 00000000000..df959fa0bda --- /dev/null +++ b/src/test/run-pass/issue-16596.rs @@ -0,0 +1,27 @@ +// Copyright 2014 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. + +trait MatrixRow {} + +struct Mat; + +impl<'a> MatrixRow for &'a Mat {} + +struct Rows<M: MatrixRow> { + mat: M, +} + +impl<'a> Iterator<()> for Rows<&'a Mat> { + fn next(&mut self) -> Option<()> { + unimplemented!() + } +} + +fn main() {} diff --git a/src/test/run-pass/issue-17121.rs b/src/test/run-pass/issue-17121.rs new file mode 100644 index 00000000000..f53bedc6dac --- /dev/null +++ b/src/test/run-pass/issue-17121.rs @@ -0,0 +1,39 @@ +// Copyright 2014 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. + +use std::io::BufReader; +use std::io::BufferedReader; +use std::io::File; +use std::io::IoResult; + +struct Lexer<R: Reader> +{ + reader: BufferedReader<R>, +} + +impl<R: Reader> Lexer<R> +{ + pub fn new_from_reader(r: R) -> Lexer<R> + { + Lexer{reader: BufferedReader::new(r)} + } + + pub fn new_from_file(p: Path) -> IoResult<Lexer<File>> + { + Ok(Lexer::new_from_reader(try!(File::open(&p)))) + } + + pub fn new_from_str<'a>(s: &'a str) -> Lexer<BufReader<'a>> + { + Lexer::new_from_reader(BufReader::new(s.as_bytes())) + } +} + +fn main() {} diff --git a/src/test/run-pass/issue-9249.rs b/src/test/run-pass/issue-9249.rs new file mode 100644 index 00000000000..013aef57223 --- /dev/null +++ b/src/test/run-pass/issue-9249.rs @@ -0,0 +1,12 @@ +// Copyright 2014 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 DATA:&'static [&'static str] = ["my string"]; +fn main() { } diff --git a/src/test/run-pass/parse-fail.rs b/src/test/run-pass/parse-fail.rs index 52a857e21e5..34c5bf0234f 100644 --- a/src/test/run-pass/parse-fail.rs +++ b/src/test/run-pass/parse-fail.rs @@ -10,6 +10,6 @@ #![allow(unreachable_code)] -fn dont_call_me() { fail!(); println!("{}", 1); } +fn dont_call_me() { fail!(); println!("{}", 1i); } pub fn main() { } |
