blob: b34e18520793a3f5c4b62f06cfb617268db07d44 [file] [log] [blame]
// 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.
// pp-exact
#![feature(custom_attribute)]
#![feature(box_syntax)]
#![feature(stmt_expr_attributes)]
fn main() { }
fn _0() {
#[attr]
foo();
}
fn _1() {
#[attr]
unsafe {
// code
}
}
fn _2() {
#[attr]
{ foo(); }
{
#![attr]
foo()
}
}
fn _3() {
#[attr]
match () { _ => { } }
}
fn _4() {
#[attr]
match () {
#![attr]
_ => (),
}
let _ =
#[attr] match () {
#![attr]
() => (),
};
}
fn _5() {
#[attr]
let x = 1;
let x = #[attr] 1;
let y = ();
let z = ();
foo3(x, #[attr] y, z);
qux(3 + #[attr] 2);
}
fn _6() {
#[attr]
[#![attr] 1, 2, 3];
let _ = #[attr] [#![attr] 1, 2, 3];
#[attr]
[#![attr] 1; 4];
let _ = #[attr] [#![attr] 1; 4];
}
struct Foo {
data: (),
}
struct Bar(());
fn _7() {
#[attr]
Foo{#![attr] data: (),};
let _ = #[attr] Foo{#![attr] data: (),};
}
fn _8() {
#[attr]
(#![attr] );
#[attr]
(#![attr] 0);
#[attr]
(#![attr] 0,);
#[attr]
(#![attr] 0, 1);
}
fn _9() {
macro_rules! stmt_mac(( ) => { let _ = ( ) ; });
#[attr]
stmt_mac!();
/*
// pre existing pp bug: delimiter styles gets lost:
#[attr]
stmt_mac!{ };
#[attr]
stmt_mac![];
#[attr]
stmt_mac!{ } // pre-existing pp bug: compiler ICEs with a None unwrap
*/
let _ = ();
}
macro_rules! expr_mac(( ) => { ( ) });
fn _10() {
let _ = #[attr] expr_mac!();
/*
// pre existing pp bug: delimiter styles gets lost:
let _ = #[attr] expr_mac![];
let _ = #[attr] expr_mac!{};
*/
}
fn _11() {
let _ = #[attr] box 0;
let _: [(); 0] = #[attr] [#![attr] ];
let _ = #[attr] [#![attr] 0, 0];
let _ = #[attr] [#![attr] 0; 0];
let _ = #[attr] foo();
let _ = #[attr] 1i32.clone();
let _ = #[attr] (#![attr] );
let _ = #[attr] (#![attr] 0);
let _ = #[attr] (#![attr] 0,);
let _ = #[attr] (#![attr] 0, 0);
let _ = #[attr] 0 + #[attr] 0;
let _ = #[attr] !0;
let _ = #[attr] -0i32;
let _ = #[attr] false;
let _ = #[attr] 'c';
let _ = #[attr] 0;
let _ = #[attr] 0 as usize;
let _ =
#[attr] while false {
#![attr]
};
let _ =
#[attr] while let None = Some(()) {
#![attr]
};
let _ =
#[attr] for _ in 0..0 {
#![attr]
};
// FIXME: pp bug, two spaces after the loop
let _ =
#[attr] loop {
#![attr]
};
let _ =
#[attr] match false {
#![attr]
_ => (),
};
let _ = #[attr] || #[attr] ();
let _ = #[attr] move || #[attr] ();
let _ =
#[attr] ||
{
#![attr]
#[attr]
()
};
let _ =
#[attr] move ||
{
#![attr]
#[attr]
()
};
let _ =
#[attr] {
#![attr]
};
let _ =
#[attr] {
#![attr]
let _ = ();
};
let _ =
#[attr] {
#![attr]
let _ = ();
()
};
let mut x = 0;
let _ = #[attr] x = 15;
let _ = #[attr] x += 15;
let s = Foo{data: (),};
let _ = #[attr] s.data;
let _ = (#[attr] s).data;
let t = Bar(());
let _ = #[attr] t.0;
let _ = (#[attr] t).0;
let v = vec!(0);
let _ = #[attr] v[0];
let _ = (#[attr] v)[0];
let _ = #[attr] 0..#[attr] 0;
let _ = #[attr] 0..;
let _ = #[attr] (0..0);
let _ = #[attr] (0..);
let _ = #[attr] (..0);
let _ = #[attr] (..);
let _: fn(&u32) -> u32 = #[attr] std::clone::Clone::clone;
let _ = #[attr] &0;
let _ = #[attr] &mut 0;
let _ = #[attr] &#[attr] 0;
let _ = #[attr] &mut #[attr] 0;
// FIXME: pp bug, extra space after keyword?
while false { let _ = #[attr] continue ; }
while true { let _ = #[attr] break ; }
|| #[attr] return;
let _ = #[attr] expr_mac!();
/* FIXME: pp bug, losing delimiter styles
let _ = #[attr] expr_mac![];
let _ = #[attr] expr_mac!{};
*/
let _ = #[attr] Foo{#![attr] data: (),};
let _ = #[attr] Foo{#![attr] ..s};
let _ = #[attr] Foo{#![attr] data: (), ..s};
let _ = #[attr] (#![attr] 0);
}
fn _12() {
#[attr]
let _ = 0;
#[attr]
0;
#[attr]
expr_mac!();
#[attr]
{
#![attr]
}
}
/////////////////
fn foo() { }
fn foo3(_: i32, _: (), _: ()) { }
fn qux(_: i32) { }