mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 23:34:48 +00:00
Add test for unsupported bound relaxation with incorrect behavior
This commit is contained in:
parent
3ab6b60337
commit
4156473bca
21
src/test/ui/issues/issue-87199.rs
Normal file
21
src/test/ui/issues/issue-87199.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Regression test for issue #87199, where attempting to relax a bound
|
||||||
|
// other than the only supported `?Sized` would still cause the compiler
|
||||||
|
// to assume that the `Sized` bound was relaxed.
|
||||||
|
|
||||||
|
// check-fail
|
||||||
|
|
||||||
|
// Check that these function definitions only emit warnings, not errors
|
||||||
|
fn arg<T: ?Send>(_: T) {}
|
||||||
|
//~^ warning: default bound relaxed for a type parameter, but this does nothing
|
||||||
|
//~^^ the size for values of type `T`
|
||||||
|
fn ref_arg<T: ?Send>(_: &T) {}
|
||||||
|
//~^ warning: default bound relaxed for a type parameter, but this does nothing
|
||||||
|
fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() }
|
||||||
|
//~^ warning: default bound relaxed for a type parameter, but this does nothing
|
||||||
|
//~^^ the size for values of type `impl Iterator+?Sized` cannot be known
|
||||||
|
|
||||||
|
// Check that there's no `?Sized` relaxation!
|
||||||
|
fn main() {
|
||||||
|
ref_arg::<i32>(&5);
|
||||||
|
ref_arg::<[i32]>(&[5]);
|
||||||
|
}
|
44
src/test/ui/issues/issue-87199.stderr
Normal file
44
src/test/ui/issues/issue-87199.stderr
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
warning: default bound relaxed for a type parameter, but this does nothing because the given bound is not a default; only `?Sized` is supported
|
||||||
|
--> $DIR/issue-87199.rs:8:8
|
||||||
|
|
|
||||||
|
LL | fn arg<T: ?Send>(_: T) {}
|
||||||
|
| ^
|
||||||
|
|
||||||
|
warning: default bound relaxed for a type parameter, but this does nothing because the given bound is not a default; only `?Sized` is supported
|
||||||
|
--> $DIR/issue-87199.rs:11:12
|
||||||
|
|
|
||||||
|
LL | fn ref_arg<T: ?Send>(_: &T) {}
|
||||||
|
| ^
|
||||||
|
|
||||||
|
warning: default bound relaxed for a type parameter, but this does nothing because the given bound is not a default; only `?Sized` is supported
|
||||||
|
--> $DIR/issue-87199.rs:13:13
|
||||||
|
|
|
||||||
|
LL | fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() }
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error[E0277]: the size for values of type `impl Iterator+?Sized` cannot be known at compilation time
|
||||||
|
--> $DIR/issue-87199.rs:13:13
|
||||||
|
|
|
||||||
|
LL | fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() }
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
|
||||||
|
|
|
||||||
|
= help: the trait `Sized` is not implemented for `impl Iterator+?Sized`
|
||||||
|
= note: the return type of a function must have a statically known size
|
||||||
|
|
||||||
|
error[E0277]: the size for values of type `T` cannot be known at compilation time
|
||||||
|
--> $DIR/issue-87199.rs:8:18
|
||||||
|
|
|
||||||
|
LL | fn arg<T: ?Send>(_: T) {}
|
||||||
|
| - ^ doesn't have a size known at compile-time
|
||||||
|
| |
|
||||||
|
| this type parameter needs to be `std::marker::Sized`
|
||||||
|
|
|
||||||
|
= help: unsized fn params are gated as an unstable feature
|
||||||
|
help: function arguments must have a statically known size, borrowed types always have a known size
|
||||||
|
|
|
||||||
|
LL | fn arg<T: ?Send>(_: &T) {}
|
||||||
|
| ^
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors; 3 warnings emitted
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0277`.
|
Loading…
Reference in New Issue
Block a user