151 lines
2.5 KiB
Rust
151 lines
2.5 KiB
Rust
// 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.
|
|
|
|
#![feature(custom_attribute)]
|
|
|
|
macro_rules! stmt_mac {
|
|
() => {
|
|
fn b() {}
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
#[attr]
|
|
fn a() {}
|
|
|
|
#[attr] //~ ERROR attributes on expressions are experimental
|
|
{
|
|
|
|
}
|
|
|
|
#[attr]
|
|
5;
|
|
|
|
#[attr]
|
|
stmt_mac!();
|
|
}
|
|
|
|
// Check that cfg works right
|
|
|
|
#[cfg(unset)]
|
|
fn c() {
|
|
#[attr]
|
|
5;
|
|
}
|
|
|
|
#[cfg(not(unset))]
|
|
fn j() {
|
|
#[attr]
|
|
5;
|
|
}
|
|
|
|
#[cfg_attr(not(unset), cfg(unset))]
|
|
fn d() {
|
|
#[attr]
|
|
8;
|
|
}
|
|
|
|
#[cfg_attr(not(unset), cfg(not(unset)))]
|
|
fn i() {
|
|
#[attr]
|
|
8;
|
|
}
|
|
|
|
// check that macro expansion and cfg works right
|
|
|
|
macro_rules! item_mac {
|
|
($e:ident) => {
|
|
fn $e() {
|
|
#[attr]
|
|
42;
|
|
|
|
#[cfg(unset)]
|
|
fn f() {
|
|
#[attr]
|
|
5;
|
|
}
|
|
|
|
#[cfg(not(unset))]
|
|
fn k() {
|
|
#[attr]
|
|
5;
|
|
}
|
|
|
|
#[cfg_attr(not(unset), cfg(unset))]
|
|
fn g() {
|
|
#[attr]
|
|
8;
|
|
}
|
|
|
|
#[cfg_attr(not(unset), cfg(not(unset)))]
|
|
fn h() {
|
|
#[attr]
|
|
8;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
item_mac!(e);
|
|
|
|
// check that the gate visitor works right:
|
|
|
|
extern {
|
|
#[cfg(unset)]
|
|
fn x(a: [u8; #[attr] 5]);
|
|
fn y(a: [u8; #[attr] 5]); //~ ERROR 15701
|
|
}
|
|
|
|
struct Foo;
|
|
impl Foo {
|
|
#[cfg(unset)]
|
|
const X: u8 = #[attr] 5;
|
|
const Y: u8 = #[attr] 5; //~ ERROR 15701
|
|
}
|
|
|
|
trait Bar {
|
|
#[cfg(unset)]
|
|
const X: [u8; #[attr] 5];
|
|
const Y: [u8; #[attr] 5]; //~ ERROR 15701
|
|
}
|
|
|
|
struct Joyce {
|
|
#[cfg(unset)]
|
|
field: [u8; #[attr] 5],
|
|
field2: [u8; #[attr] 5] //~ ERROR 15701
|
|
}
|
|
|
|
struct Walky(
|
|
#[cfg(unset)] [u8; #[attr] 5],
|
|
[u8; #[attr] 5] //~ ERROR 15701
|
|
);
|
|
|
|
enum Mike {
|
|
Happy(
|
|
#[cfg(unset)] [u8; #[attr] 5],
|
|
[u8; #[attr] 5] //~ ERROR 15701
|
|
),
|
|
Angry {
|
|
#[cfg(unset)]
|
|
field: [u8; #[attr] 5],
|
|
field2: [u8; #[attr] 5] //~ ERROR 15701
|
|
}
|
|
}
|
|
|
|
fn pat() {
|
|
match 5 {
|
|
#[cfg(unset)]
|
|
5 => #[attr] (),
|
|
6 => #[attr] (), //~ ERROR 15701
|
|
_ => (),
|
|
}
|
|
}
|