| // Copyright 2012 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. |
| |
| // compile-flags: --crate-type=lib |
| |
| // A bunch of tests for syntactic forms involving blocks that were |
| // previously ambiguous (e.g. 'if true { } *val;' gets parsed as a |
| // binop) |
| |
| |
| use std::cell::Cell; |
| |
| fn test1() { let val = &0; { } *val; } |
| |
| fn test2() -> isize { let val = &0; { } *val } |
| |
| #[derive(Copy, Clone)] |
| struct S { eax: isize } |
| |
| fn test3() { |
| let regs = &Cell::new(S {eax: 0}); |
| match true { true => { } _ => { } } |
| regs.set(S {eax: 1}); |
| } |
| |
| fn test4() -> bool { let regs = &true; if true { } *regs || false } |
| |
| fn test5() -> (isize, isize) { { } (0, 1) } |
| |
| fn test6() -> bool { { } (true || false) && true } |
| |
| fn test7() -> usize { |
| let regs = &0; |
| match true { true => { } _ => { } } |
| (*regs < 2) as usize |
| } |
| |
| fn test8() -> isize { |
| let val = &0; |
| match true { |
| true => { } |
| _ => { } |
| } |
| if *val < 1 { |
| 0 |
| } else { |
| 1 |
| } |
| } |
| |
| fn test9() { |
| let regs = &Cell::new(0); |
| match true { true => { } _ => { } } regs.set(regs.get() + 1); |
| } |
| |
| fn test10() -> isize { |
| let regs = vec![0]; |
| match true { true => { } _ => { } } |
| regs[0] |
| } |
| |
| fn test11() -> Vec<isize> { if true { } vec![1, 2] } |