blob: 9bf759af19af7ab27efca934bc2955fe38f188b4 [file] [edit]
fn allowed<F>(
data: &str,
f1: fn(msg: String),
f2: fn(_: String),
f3: fn(String, msg: String),
f4: fn(msg: String, String),
f5: fn(duplicate_name: bool, duplicate_name: bool),
) { }
// Patterns are semantically rejected
fn semantics<F>(
pat1: fn(1..3: bool),
//~^ ERROR patterns aren't allowed in function pointer types
pat2: fn((x, y): (bool, bool)),
//~^ ERROR patterns aren't allowed in function pointer types
pat3: fn(Thing { a, b }: Thing),
//~^ ERROR patterns aren't allowed in function pointer types
pat4: fn(NoThing { a, b }: NoThing),
//~^ ERROR patterns aren't allowed in function pointer types
//~| ERROR cannot find type `NoThing` in this scope
pat5: fn((((((x))))): bool),
//~^ ERROR patterns aren't allowed in function pointer types
self1: fn(self),
//~^ ERROR `self` parameter is only allowed in associated functions
self2: fn(self, self),
//~^ ERROR `self` parameter is only allowed in associated functions
//~| ERROR unexpected `self` parameter in function
self3: fn(bool, self),
//~^ ERROR unexpected `self` parameter in function
restricted_pat1: fn(mut x: ()),
//~^ ERROR patterns aren't allowed in function pointer types
restricted_pat2: fn(&x: ()),
//~^ ERROR patterns aren't allowed in function pointer types
restricted_pat3: fn(&&x: ()),
//~^ ERROR patterns aren't allowed in function pointer types
restricted_pat4: fn(false: ()),
//~^ ERROR patterns aren't allowed in function pointer types
restricted_pat5: fn(&_: ()),
//~^ ERROR patterns aren't allowed in function pointer types
restricted_pat6: fn(&true: ()),
//~^ ERROR patterns aren't allowed in function pointer types
) { }
// Patterns are also syntactically rejected, but restricted patterns are not
#[cfg(false)]
fn syntax<F>(
pat1: fn(1..3: bool),
//~^ ERROR patterns aren't allowed in function pointer types
pat2: fn((x, y): (bool, bool)),
//~^ ERROR patterns aren't allowed in function pointer types
pat3: fn(Thing { a, b }: Thing),
//~^ ERROR patterns aren't allowed in function pointer types
pat4: fn(NoThing { a, b }: NoThing),
//~^ ERROR patterns aren't allowed in function pointer types
pat5: fn((((((x))))): bool),
//~^ ERROR patterns aren't allowed in function pointer types
self1: fn(self),
self2: fn(self, self),
//~^ ERROR unexpected `self` parameter in function
self3: fn(bool, self),
//~^ ERROR unexpected `self` parameter in function
restricted_pat1: fn(mut x: ()),
restricted_pat2: fn(&x: ()),
restricted_pat3: fn(&&x: ()),
restricted_pat4: fn(false: ()),
restricted_pat5: fn(&_: ()),
restricted_pat6: fn(&true: ()),
) { }
struct Thing { a: bool, b: bool }
fn main() {
}