Move /src/test to /tests
This commit is contained in:
parent
ca855e6e42
commit
cf2dff2b1e
27592 changed files with 0 additions and 0 deletions
|
|
@ -0,0 +1,30 @@
|
|||
// compile-flags: -C opt-level=3
|
||||
// run-pass
|
||||
|
||||
fn foo(_i: i32) -> i32 {
|
||||
1
|
||||
}
|
||||
fn bar(_i: i32) -> i32 {
|
||||
1
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let x: fn(i32) -> i32 = foo;
|
||||
let y: fn(i32) -> i32 = bar;
|
||||
|
||||
let s1;
|
||||
if x == y {
|
||||
s1 = "same".to_string();
|
||||
} else {
|
||||
s1 = format!("{:?}, {:?}", x, y);
|
||||
}
|
||||
|
||||
let s2;
|
||||
if x == y {
|
||||
s2 = "same".to_string();
|
||||
} else {
|
||||
s2 = format!("{:?}, {:?}", x, y);
|
||||
}
|
||||
|
||||
assert_eq!(s1, s2);
|
||||
}
|
||||
54
tests/ui/function-pointer/issue-102289.rs
Normal file
54
tests/ui/function-pointer/issue-102289.rs
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
// check-pass
|
||||
|
||||
pub(crate) trait Parser: Sized {
|
||||
type Output;
|
||||
fn parse(&mut self, _input: &str) -> Result<(), ()> {
|
||||
loop {}
|
||||
}
|
||||
fn map<F, B>(self, _f: F) -> Map<Self, F>
|
||||
where
|
||||
F: FnMut(Self::Output) -> B,
|
||||
{
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) struct Chainl1<P, Op>(P, Op);
|
||||
impl<P, Op> Parser for Chainl1<P, Op>
|
||||
where
|
||||
P: Parser,
|
||||
Op: Parser,
|
||||
Op::Output: FnOnce(P::Output, P::Output) -> P::Output,
|
||||
{
|
||||
type Output = P::Output;
|
||||
}
|
||||
pub(crate) fn chainl1<P, Op>(_parser: P, _op: Op) -> Chainl1<P, Op>
|
||||
where
|
||||
P: Parser,
|
||||
Op: Parser,
|
||||
Op::Output: FnOnce(P::Output, P::Output) -> P::Output,
|
||||
{
|
||||
loop {}
|
||||
}
|
||||
|
||||
pub(crate) struct Map<P, F>(P, F);
|
||||
impl<A, B, P, F> Parser for Map<P, F>
|
||||
where
|
||||
P: Parser<Output = A>,
|
||||
F: FnMut(A) -> B,
|
||||
{
|
||||
type Output = B;
|
||||
}
|
||||
|
||||
impl Parser for u32 {
|
||||
type Output = ();
|
||||
}
|
||||
|
||||
pub fn chainl1_error_consume() {
|
||||
fn first<T, U>(t: T, _: U) -> T {
|
||||
t
|
||||
}
|
||||
let _ = chainl1(1, 1.map(|_| first)).parse("");
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
15
tests/ui/function-pointer/sized-ret-with-binder.rs
Normal file
15
tests/ui/function-pointer/sized-ret-with-binder.rs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(unboxed_closures)]
|
||||
|
||||
fn is_fn<T: for<'a> Fn<(&'a (),)>>() {}
|
||||
fn is_fn2<T: for<'a, 'b> Fn<(&'a &'b (),)>>() {}
|
||||
|
||||
struct Outlives<'a, 'b>(std::marker::PhantomData<&'a &'b ()>);
|
||||
|
||||
fn main() {
|
||||
is_fn::<for<'a> fn(&'a ()) -> &'a ()>();
|
||||
is_fn::<for<'a> fn(&'a ()) -> &'a dyn std::fmt::Debug>();
|
||||
is_fn2::<for<'a, 'b> fn(&'a &'b ()) -> Outlives<'a, 'b>>();
|
||||
is_fn2::<for<'a, 'b> fn(&'a &'b ()) -> (&'a (), &'a ())>();
|
||||
}
|
||||
15
tests/ui/function-pointer/unsized-ret.rs
Normal file
15
tests/ui/function-pointer/unsized-ret.rs
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#![feature(fn_traits)]
|
||||
#![feature(unboxed_closures)]
|
||||
#![feature(tuple_trait)]
|
||||
|
||||
fn foo<F: Fn<T>, T:std::marker::Tuple>(f: Option<F>, t: T) {
|
||||
let y = (f.unwrap()).call(t);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
foo::<fn() -> str, _>(None, ());
|
||||
//~^ ERROR the size for values of type `str` cannot be known at compilation time
|
||||
|
||||
foo::<for<'a> fn(&'a ()) -> (dyn std::fmt::Display + 'a), _>(None, (&(),));
|
||||
//~^ ERROR the size for values of type `(dyn std::fmt::Display + 'a)` cannot be known at compilation time
|
||||
}
|
||||
35
tests/ui/function-pointer/unsized-ret.stderr
Normal file
35
tests/ui/function-pointer/unsized-ret.stderr
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
error[E0277]: the size for values of type `str` cannot be known at compilation time
|
||||
--> $DIR/unsized-ret.rs:10:27
|
||||
|
|
||||
LL | foo::<fn() -> str, _>(None, ());
|
||||
| --------------------- ^^^^ doesn't have a size known at compile-time
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= help: within `fn() -> str`, the trait `Sized` is not implemented for `str`
|
||||
= note: required because it appears within the type `fn() -> str`
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/unsized-ret.rs:5:11
|
||||
|
|
||||
LL | fn foo<F: Fn<T>, T:std::marker::Tuple>(f: Option<F>, t: T) {
|
||||
| ^^^^^ required by this bound in `foo`
|
||||
|
||||
error[E0277]: the size for values of type `(dyn std::fmt::Display + 'a)` cannot be known at compilation time
|
||||
--> $DIR/unsized-ret.rs:13:66
|
||||
|
|
||||
LL | foo::<for<'a> fn(&'a ()) -> (dyn std::fmt::Display + 'a), _>(None, (&(),));
|
||||
| ------------------------------------------------------------ ^^^^ doesn't have a size known at compile-time
|
||||
| |
|
||||
| required by a bound introduced by this call
|
||||
|
|
||||
= help: within `for<'a> fn(&'a ()) -> (dyn std::fmt::Display + 'a)`, the trait `for<'a> Sized` is not implemented for `(dyn std::fmt::Display + 'a)`
|
||||
= note: required because it appears within the type `for<'a> fn(&'a ()) -> (dyn Display + 'a)`
|
||||
note: required by a bound in `foo`
|
||||
--> $DIR/unsized-ret.rs:5:11
|
||||
|
|
||||
LL | fn foo<F: Fn<T>, T:std::marker::Tuple>(f: Option<F>, t: T) {
|
||||
| ^^^^^ required by this bound in `foo`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0277`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue