diff options
| author | bors <bors@rust-lang.org> | 2021-07-22 05:02:50 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-07-22 05:02:50 +0000 |
| commit | 7db08eeb0057de86ea2bdbd4c3a085cb8516b653 (patch) | |
| tree | e316a0d57d088d13f9fd22aba0556f3bd003c29d /src | |
| parent | 8024983ea73e1d1c16720a424d39fd1c239eee68 (diff) | |
| parent | 3dbe0cebd876572d7ff692041a825ed4b0a4316a (diff) | |
| download | rust-7db08eeb0057de86ea2bdbd4c3a085cb8516b653.tar.gz rust-7db08eeb0057de86ea2bdbd4c3a085cb8516b653.zip | |
Auto merge of #87250 - robojumper:87199-sized-relaxation, r=nikomatsakis
Fix implicit Sized relaxation when attempting to relax other, unsupported trait Fixes #87199. Do note that this bug fix causes code like the `ref_arg::<[i32]>(&[5]);` line in the test case in combination with an affected function to no longer compile.
Diffstat (limited to 'src')
| -rw-r--r-- | src/test/ui/issues/issue-87199.rs | 20 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-87199.stderr | 36 |
2 files changed, 56 insertions, 0 deletions
diff --git a/src/test/ui/issues/issue-87199.rs b/src/test/ui/issues/issue-87199.rs new file mode 100644 index 00000000000..a80a64a2f87 --- /dev/null +++ b/src/test/ui/issues/issue-87199.rs @@ -0,0 +1,20 @@ +// 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 +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 + +// Check that there's no `?Sized` relaxation! +fn main() { + ref_arg::<i32>(&5); + ref_arg::<[i32]>(&[5]); + //~^ the size for values of type `[i32]` cannot be known +} diff --git a/src/test/ui/issues/issue-87199.stderr b/src/test/ui/issues/issue-87199.stderr new file mode 100644 index 00000000000..e3a8e82a09f --- /dev/null +++ b/src/test/ui/issues/issue-87199.stderr @@ -0,0 +1,36 @@ +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:10: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:12:13 + | +LL | fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0277]: the size for values of type `[i32]` cannot be known at compilation time + --> $DIR/issue-87199.rs:18:22 + | +LL | fn ref_arg<T: ?Send>(_: &T) {} + | - required by this bound in `ref_arg` +... +LL | ref_arg::<[i32]>(&[5]); + | ^^^^ doesn't have a size known at compile-time + | + = help: the trait `Sized` is not implemented for `[i32]` +help: consider relaxing the implicit `Sized` restriction + | +LL | fn ref_arg<T: ?Send + ?Sized>(_: &T) {} + | ^^^^^^^^ + +error: aborting due to previous error; 3 warnings emitted + +For more information about this error, try `rustc --explain E0277`. |
