rust/tests/ui/parser/default-on-wrong-item-kind.rs

141 lines
7.2 KiB
Rust

// Test parsing for `default` where it doesn't belong.
// Specifically, we are interested in kinds of items or items in certain contexts.
// Also test item kinds in `extern` blocks and associated contexts which are not allowed there.
fn main() {}
#[cfg(FALSE)]
mod free_items {
default extern crate foo; //~ ERROR an extern crate cannot be `default`
default use foo; //~ ERROR a `use` import cannot be `default`
default static foo: u8; //~ ERROR a static item cannot be `default`
default const foo: u8;
default fn foo();
default mod foo {} //~ ERROR a module cannot be `default`
default extern "C" {} //~ ERROR an extern block cannot be `default`
default type foo = u8;
default enum foo {} //~ ERROR an enum cannot be `default`
default struct foo {} //~ ERROR a struct cannot be `default`
default union foo {} //~ ERROR a union cannot be `default`
default trait foo {} //~ ERROR a trait cannot be `default`
default trait foo = Ord; //~ ERROR a trait alias cannot be `default`
default impl foo {}
default!();
default::foo::bar!();
default default!(); //~ ERROR an item macro invocation cannot be `default`
default default::foo::bar!(); //~ ERROR an item macro invocation cannot be `default`
default macro foo {} //~ ERROR a macro definition cannot be `default`
default macro_rules! foo {} //~ ERROR a macro definition cannot be `default`
}
#[cfg(FALSE)]
extern "C" {
default extern crate foo; //~ ERROR an extern crate cannot be `default`
//~^ ERROR extern crate is not supported in `extern` blocks
default use foo; //~ ERROR a `use` import cannot be `default`
//~^ ERROR `use` import is not supported in `extern` blocks
default static foo: u8; //~ ERROR a static item cannot be `default`
default const foo: u8;
//~^ ERROR extern items cannot be `const`
default fn foo();
default mod foo {} //~ ERROR a module cannot be `default`
//~^ ERROR module is not supported in `extern` blocks
default extern "C" {} //~ ERROR an extern block cannot be `default`
//~^ ERROR extern block is not supported in `extern` blocks
default type foo = u8;
default enum foo {} //~ ERROR an enum cannot be `default`
//~^ ERROR enum is not supported in `extern` blocks
default struct foo {} //~ ERROR a struct cannot be `default`
//~^ ERROR struct is not supported in `extern` blocks
default union foo {} //~ ERROR a union cannot be `default`
//~^ ERROR union is not supported in `extern` blocks
default trait foo {} //~ ERROR a trait cannot be `default`
//~^ ERROR trait is not supported in `extern` blocks
default trait foo = Ord; //~ ERROR a trait alias cannot be `default`
//~^ ERROR trait alias is not supported in `extern` blocks
default impl foo {}
//~^ ERROR implementation is not supported in `extern` blocks
default!();
default::foo::bar!();
default default!(); //~ ERROR an item macro invocation cannot be `default`
default default::foo::bar!(); //~ ERROR an item macro invocation cannot be `default`
default macro foo {} //~ ERROR a macro definition cannot be `default`
//~^ ERROR macro definition is not supported in `extern` blocks
default macro_rules! foo {} //~ ERROR a macro definition cannot be `default`
//~^ ERROR macro definition is not supported in `extern` blocks
}
#[cfg(FALSE)]
impl S {
default extern crate foo; //~ ERROR an extern crate cannot be `default`
//~^ ERROR extern crate is not supported in `trait`s or `impl`s
default use foo; //~ ERROR a `use` import cannot be `default`
//~^ ERROR `use` import is not supported in `trait`s or `impl`s
default static foo: u8; //~ ERROR a static item cannot be `default`
//~^ ERROR associated `static` items are not allowed
default const foo: u8;
default fn foo();
default mod foo {}//~ ERROR a module cannot be `default`
//~^ ERROR module is not supported in `trait`s or `impl`s
default extern "C" {} //~ ERROR an extern block cannot be `default`
//~^ ERROR extern block is not supported in `trait`s or `impl`s
default type foo = u8;
default enum foo {} //~ ERROR an enum cannot be `default`
//~^ ERROR enum is not supported in `trait`s or `impl`s
default struct foo {} //~ ERROR a struct cannot be `default`
//~^ ERROR struct is not supported in `trait`s or `impl`s
default union foo {} //~ ERROR a union cannot be `default`
//~^ ERROR union is not supported in `trait`s or `impl`s
default trait foo {} //~ ERROR a trait cannot be `default`
//~^ ERROR trait is not supported in `trait`s or `impl`s
default trait foo = Ord; //~ ERROR a trait alias cannot be `default`
//~^ ERROR trait alias is not supported in `trait`s or `impl`s
default impl foo {}
//~^ ERROR implementation is not supported in `trait`s or `impl`s
default!();
default::foo::bar!();
default default!(); //~ ERROR an item macro invocation cannot be `default`
default default::foo::bar!(); //~ ERROR an item macro invocation cannot be `default`
default macro foo {} //~ ERROR a macro definition cannot be `default`
//~^ ERROR macro definition is not supported in `trait`s or `impl`s
default macro_rules! foo {} //~ ERROR a macro definition cannot be `default`
//~^ ERROR macro definition is not supported in `trait`s or `impl`s
}
#[cfg(FALSE)]
trait T {
default extern crate foo; //~ ERROR an extern crate cannot be `default`
//~^ ERROR extern crate is not supported in `trait`s or `impl`s
default use foo; //~ ERROR a `use` import cannot be `default`
//~^ ERROR `use` import is not supported in `trait`s or `impl`s
default static foo: u8; //~ ERROR a static item cannot be `default`
//~^ ERROR associated `static` items are not allowed
default const foo: u8;
default fn foo();
default mod foo {}//~ ERROR a module cannot be `default`
//~^ ERROR module is not supported in `trait`s or `impl`s
default extern "C" {} //~ ERROR an extern block cannot be `default`
//~^ ERROR extern block is not supported in `trait`s or `impl`s
default type foo = u8;
default enum foo {} //~ ERROR an enum cannot be `default`
//~^ ERROR enum is not supported in `trait`s or `impl`s
default struct foo {} //~ ERROR a struct cannot be `default`
//~^ ERROR struct is not supported in `trait`s or `impl`s
default union foo {} //~ ERROR a union cannot be `default`
//~^ ERROR union is not supported in `trait`s or `impl`s
default trait foo {} //~ ERROR a trait cannot be `default`
//~^ ERROR trait is not supported in `trait`s or `impl`s
default trait foo = Ord; //~ ERROR a trait alias cannot be `default`
//~^ ERROR trait alias is not supported in `trait`s or `impl`s
default impl foo {}
//~^ ERROR implementation is not supported in `trait`s or `impl`s
default!();
default::foo::bar!();
default default!(); //~ ERROR an item macro invocation cannot be `default`
default default::foo::bar!(); //~ ERROR an item macro invocation cannot be `default`
default macro foo {} //~ ERROR a macro definition cannot be `default`
//~^ ERROR macro definition is not supported in `trait`s or `impl`s
default macro_rules! foo {} //~ ERROR a macro definition cannot be `default`
//~^ ERROR macro definition is not supported in `trait`s or `impl`s
}