1
Fork 0

Reject impl Trait bounds in various places where we unconditionally warned since 1.0

This commit is contained in:
Oli Scherer 2025-01-21 09:17:40 +00:00
parent c182ce9cbc
commit c294da3310
21 changed files with 87 additions and 63 deletions

View file

@ -102,8 +102,8 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
seen_sized_unbound = true; seen_sized_unbound = true;
continue; continue;
} }
// There was a `?Trait` bound, but it was not `?Sized`; warn. // There was a `?Trait` bound, but it was not `?Sized`
self.dcx().span_warn( self.dcx().span_err(
unbound.span, unbound.span,
"relaxing a default bound only does something for `?Sized`; \ "relaxing a default bound only does something for `?Sized`; \
all other traits are not bound by default", all other traits are not bound by default",

View file

@ -1,8 +1,7 @@
// ignore-tidy-linelength // ignore-tidy-linelength
//! Check that `-A warnings` cli flag applies to non-lint warnings as well. //! Check that `-A warnings` cli flag applies to non-lint warnings as well.
//! //!
//! This test tries to exercise that by checking that the "relaxing a default bound only does //! This test tries to exercise that by checking that a non-lint warning (normally
//! something for `?Sized`; all other traits are not bound by default" non-lint warning (normally
//! warn-by-default) is suppressed if the `-A warnings` cli flag is passed. //! warn-by-default) is suppressed if the `-A warnings` cli flag is passed.
//! //!
//! Take special note that `warnings` is a special pseudo lint group in relationship to non-lint //! Take special note that `warnings` is a special pseudo lint group in relationship to non-lint
@ -14,7 +13,7 @@
//! - Original impl PR: <https://github.com/rust-lang/rust/pull/21248>. //! - Original impl PR: <https://github.com/rust-lang/rust/pull/21248>.
//! - RFC 507 "Release channels": //! - RFC 507 "Release channels":
//! <https://github.com/rust-lang/rfcs/blob/c017755b9bfa0421570d92ba38082302e0f3ad4f/text/0507-release-channels.md>. //! <https://github.com/rust-lang/rfcs/blob/c017755b9bfa0421570d92ba38082302e0f3ad4f/text/0507-release-channels.md>.
#![crate_type = "lib"] #![feature(rustc_attrs)]
//@ revisions: without_flag with_flag //@ revisions: without_flag with_flag
@ -22,6 +21,6 @@
//@ check-pass //@ check-pass
pub trait Trait {} #[rustc_error(warn)]
pub fn f<T: ?Trait>() {} fn main() {}
//[without_flag]~^ WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //[without_flag]~^ WARN unexpected annotation used with `#[rustc_error(...)]`!

View file

@ -1,8 +1,8 @@
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default warning: unexpected annotation used with `#[rustc_error(...)]`!
--> $DIR/allow-non-lint-warnings.rs:26:13 --> $DIR/allow-non-lint-warnings.rs:25:1
| |
LL | pub fn f<T: ?Trait>() {} LL | fn main() {}
| ^^^^^^ | ^^^^^^^^^
warning: 1 warning emitted warning: 1 warning emitted

View file

@ -11,14 +11,14 @@ fn foo(_: Box<dyn Trait1 + ?Trait2>) {}
//~^ ERROR `?Trait` is not permitted in trait object types //~^ ERROR `?Trait` is not permitted in trait object types
fn bar<T: ?Trait1 + ?Trait2>(_: T) {} fn bar<T: ?Trait1 + ?Trait2>(_: T) {}
//~^ ERROR type parameter has more than one relaxed default bound, only one is supported //~^ ERROR type parameter has more than one relaxed default bound, only one is supported
//~| WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~| ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
//~| WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~| ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
trait Trait {} trait Trait {}
// Do not suggest `#![feature(more_maybe_bounds)]` for repetitions // Do not suggest `#![feature(more_maybe_bounds)]` for repetitions
fn baz<T: ?Trait + ?Trait>(_ : T) {} fn baz<T: ?Trait + ?Trait>(_ : T) {}
//~^ ERROR type parameter has more than one relaxed default bound, only one is supported //~^ ERROR type parameter has more than one relaxed default bound, only one is supported
//~| WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~| ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
//~| WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~| ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
fn main() {} fn main() {}

View file

@ -35,13 +35,13 @@ LL | fn bar<T: ?Trait1 + ?Trait2>(_: T) {}
= help: add `#![feature(more_maybe_bounds)]` to the crate attributes to enable = help: add `#![feature(more_maybe_bounds)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/feature-gate-more-maybe-bounds.rs:12:11 --> $DIR/feature-gate-more-maybe-bounds.rs:12:11
| |
LL | fn bar<T: ?Trait1 + ?Trait2>(_: T) {} LL | fn bar<T: ?Trait1 + ?Trait2>(_: T) {}
| ^^^^^^^ | ^^^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/feature-gate-more-maybe-bounds.rs:12:21 --> $DIR/feature-gate-more-maybe-bounds.rs:12:21
| |
LL | fn bar<T: ?Trait1 + ?Trait2>(_: T) {} LL | fn bar<T: ?Trait1 + ?Trait2>(_: T) {}
@ -53,19 +53,19 @@ error[E0203]: type parameter has more than one relaxed default bound, only one i
LL | fn baz<T: ?Trait + ?Trait>(_ : T) {} LL | fn baz<T: ?Trait + ?Trait>(_ : T) {}
| ^^^^^^ ^^^^^^ | ^^^^^^ ^^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/feature-gate-more-maybe-bounds.rs:19:11 --> $DIR/feature-gate-more-maybe-bounds.rs:19:11
| |
LL | fn baz<T: ?Trait + ?Trait>(_ : T) {} LL | fn baz<T: ?Trait + ?Trait>(_ : T) {}
| ^^^^^^ | ^^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/feature-gate-more-maybe-bounds.rs:19:20 --> $DIR/feature-gate-more-maybe-bounds.rs:19:20
| |
LL | fn baz<T: ?Trait + ?Trait>(_ : T) {} LL | fn baz<T: ?Trait + ?Trait>(_ : T) {}
| ^^^^^^ | ^^^^^^
error: aborting due to 5 previous errors; 4 warnings emitted error: aborting due to 9 previous errors
Some errors have detailed explanations: E0203, E0658. Some errors have detailed explanations: E0203, E0658.
For more information about an error, try `rustc --explain E0203`. For more information about an error, try `rustc --explain E0203`.

View file

@ -0,0 +1,11 @@
//! Regression test for ICE https://github.com/rust-lang/rust/issues/135730
//! This used
use std::future::Future;
fn foo() -> impl ?Future<Output = impl Send> {
//~^ ERROR: relaxing a default bound only does something for `?Sized`
//~| ERROR: relaxing a default bound only does something for `?Sized`
()
}
pub fn main() {}

View file

@ -0,0 +1,16 @@
error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/opt-out-bound-not-satisfied.rs:5:18
|
LL | fn foo() -> impl ?Future<Output = impl Send> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/opt-out-bound-not-satisfied.rs:5:18
|
LL | fn foo() -> impl ?Future<Output = impl Send> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: aborting due to 2 previous errors

View file

@ -1,5 +1,5 @@
struct Foo<T: ?Hash> {} struct Foo<T: ?Hash> {}
//~^ ERROR expected trait, found derive macro `Hash` //~^ ERROR expected trait, found derive macro `Hash`
//~| WARN relaxing a default bound only does something for `?Sized` //~| ERROR relaxing a default bound only does something for `?Sized`
fn main() {} fn main() {}

View file

@ -9,12 +9,12 @@ help: consider importing this trait instead
LL + use std::hash::Hash; LL + use std::hash::Hash;
| |
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/issue-37534.rs:1:15 --> $DIR/issue-37534.rs:1:15
| |
LL | struct Foo<T: ?Hash> {} LL | struct Foo<T: ?Hash> {}
| ^^^^^ | ^^^^^
error: aborting due to 1 previous error; 1 warning emitted error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0404`. For more information about this error, try `rustc --explain E0404`.

View file

@ -6,12 +6,12 @@
// Check that these function definitions only emit warnings, not errors // Check that these function definitions only emit warnings, not errors
fn arg<T: ?Send>(_: T) {} fn arg<T: ?Send>(_: T) {}
//~^ warning: relaxing a default bound only does something for `?Sized` //~^ ERROR: relaxing a default bound only does something for `?Sized`
fn ref_arg<T: ?Send>(_: &T) {} fn ref_arg<T: ?Send>(_: &T) {}
//~^ warning: relaxing a default bound only does something for `?Sized` //~^ ERROR: relaxing a default bound only does something for `?Sized`
fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() } fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() }
//~^ warning: relaxing a default bound only does something for `?Sized` //~^ ERROR: relaxing a default bound only does something for `?Sized`
//~| warning: relaxing a default bound only does something for `?Sized` //~| ERROR: relaxing a default bound only does something for `?Sized`
// Check that there's no `?Sized` relaxation! // Check that there's no `?Sized` relaxation!
fn main() { fn main() {

View file

@ -1,22 +1,22 @@
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/issue-87199.rs:8:11 --> $DIR/issue-87199.rs:8:11
| |
LL | fn arg<T: ?Send>(_: T) {} LL | fn arg<T: ?Send>(_: T) {}
| ^^^^^ | ^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/issue-87199.rs:10:15 --> $DIR/issue-87199.rs:10:15
| |
LL | fn ref_arg<T: ?Send>(_: &T) {} LL | fn ref_arg<T: ?Send>(_: &T) {}
| ^^^^^ | ^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/issue-87199.rs:12:40 --> $DIR/issue-87199.rs:12:40
| |
LL | fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() } LL | fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() }
| ^^^^^ | ^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/issue-87199.rs:12:40 --> $DIR/issue-87199.rs:12:40
| |
LL | fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() } LL | fn ret() -> impl Iterator<Item = ()> + ?Send { std::iter::empty() }
@ -41,6 +41,6 @@ help: consider relaxing the implicit `Sized` restriction
LL | fn ref_arg<T: ?Send + ?Sized>(_: &T) {} LL | fn ref_arg<T: ?Send + ?Sized>(_: &T) {}
| ++++++++ | ++++++++
error: aborting due to 1 previous error; 4 warnings emitted error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0277`. For more information about this error, try `rustc --explain E0277`.

View file

@ -2,6 +2,6 @@ trait Trait {}
fn test<T: ?self::<i32>::Trait>() {} fn test<T: ?self::<i32>::Trait>() {}
//~^ ERROR type arguments are not allowed on module `maybe_bound_has_path_args` //~^ ERROR type arguments are not allowed on module `maybe_bound_has_path_args`
//~| WARN relaxing a default bound only does something for `?Sized` //~| ERROR relaxing a default bound only does something for `?Sized`
fn main() {} fn main() {}

View file

@ -1,4 +1,4 @@
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-bound-has-path-args.rs:3:12 --> $DIR/maybe-bound-has-path-args.rs:3:12
| |
LL | fn test<T: ?self::<i32>::Trait>() {} LL | fn test<T: ?self::<i32>::Trait>() {}
@ -12,6 +12,6 @@ LL | fn test<T: ?self::<i32>::Trait>() {}
| | | |
| not allowed on module `maybe_bound_has_path_args` | not allowed on module `maybe_bound_has_path_args`
error: aborting due to 1 previous error; 1 warning emitted error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0109`. For more information about this error, try `rustc --explain E0109`.

View file

@ -2,11 +2,11 @@ trait HasAssoc {
type Assoc; type Assoc;
} }
fn hasassoc<T: ?HasAssoc<Assoc = ()>>() {} fn hasassoc<T: ?HasAssoc<Assoc = ()>>() {}
//~^ WARN relaxing a default bound //~^ ERROR relaxing a default bound
trait NoAssoc {} trait NoAssoc {}
fn noassoc<T: ?NoAssoc<Missing = ()>>() {} fn noassoc<T: ?NoAssoc<Missing = ()>>() {}
//~^ WARN relaxing a default bound //~^ ERROR relaxing a default bound
//~| ERROR associated type `Missing` not found for `NoAssoc` //~| ERROR associated type `Missing` not found for `NoAssoc`
fn main() {} fn main() {}

View file

@ -1,10 +1,10 @@
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-bound-with-assoc.rs:4:16 --> $DIR/maybe-bound-with-assoc.rs:4:16
| |
LL | fn hasassoc<T: ?HasAssoc<Assoc = ()>>() {} LL | fn hasassoc<T: ?HasAssoc<Assoc = ()>>() {}
| ^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-bound-with-assoc.rs:8:15 --> $DIR/maybe-bound-with-assoc.rs:8:15
| |
LL | fn noassoc<T: ?NoAssoc<Missing = ()>>() {} LL | fn noassoc<T: ?NoAssoc<Missing = ()>>() {}
@ -16,6 +16,6 @@ error[E0220]: associated type `Missing` not found for `NoAssoc`
LL | fn noassoc<T: ?NoAssoc<Missing = ()>>() {} LL | fn noassoc<T: ?NoAssoc<Missing = ()>>() {}
| ^^^^^^^ associated type `Missing` not found | ^^^^^^^ associated type `Missing` not found
error: aborting due to 1 previous error; 2 warnings emitted error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0220`. For more information about this error, try `rustc --explain E0220`.

View file

@ -1,5 +1,3 @@
//@ check-pass
#![feature(auto_traits)] #![feature(auto_traits)]
#![feature(more_maybe_bounds)] #![feature(more_maybe_bounds)]
#![feature(negative_impls)] #![feature(negative_impls)]
@ -12,9 +10,9 @@ trait Trait4 where Self: Trait1 {}
fn foo(_: Box<(dyn Trait3 + ?Trait2)>) {} fn foo(_: Box<(dyn Trait3 + ?Trait2)>) {}
fn bar<T: ?Sized + ?Trait2 + ?Trait1 + ?Trait4>(_: &T) {} fn bar<T: ?Sized + ?Trait2 + ?Trait1 + ?Trait4>(_: &T) {}
//~^ WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~^ ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
//~| WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~| ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
//~| WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~| ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
struct S; struct S;
impl !Trait2 for S {} impl !Trait2 for S {}

View file

@ -1,20 +1,20 @@
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-polarity-pass.rs:14:20 --> $DIR/maybe-polarity-pass.rs:12:20
| |
LL | fn bar<T: ?Sized + ?Trait2 + ?Trait1 + ?Trait4>(_: &T) {} LL | fn bar<T: ?Sized + ?Trait2 + ?Trait1 + ?Trait4>(_: &T) {}
| ^^^^^^^ | ^^^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-polarity-pass.rs:14:30 --> $DIR/maybe-polarity-pass.rs:12:30
| |
LL | fn bar<T: ?Sized + ?Trait2 + ?Trait1 + ?Trait4>(_: &T) {} LL | fn bar<T: ?Sized + ?Trait2 + ?Trait1 + ?Trait4>(_: &T) {}
| ^^^^^^^ | ^^^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-polarity-pass.rs:14:40 --> $DIR/maybe-polarity-pass.rs:12:40
| |
LL | fn bar<T: ?Sized + ?Trait2 + ?Trait1 + ?Trait4>(_: &T) {} LL | fn bar<T: ?Sized + ?Trait2 + ?Trait1 + ?Trait4>(_: &T) {}
| ^^^^^^^ | ^^^^^^^
warning: 3 warnings emitted error: aborting due to 3 previous errors

View file

@ -3,7 +3,7 @@
trait Trait {} trait Trait {}
fn foo<T: ?Trait + ?Trait>(_: T) {} fn foo<T: ?Trait + ?Trait>(_: T) {}
//~^ ERROR type parameter has more than one relaxed default bound, only one is supported //~^ ERROR type parameter has more than one relaxed default bound, only one is supported
//~| WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~| ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
//~| WARN relaxing a default bound only does something for `?Sized`; all other traits are not bound by default //~| ERROR relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
fn main() {} fn main() {}

View file

@ -4,18 +4,18 @@ error[E0203]: type parameter has more than one relaxed default bound, only one i
LL | fn foo<T: ?Trait + ?Trait>(_: T) {} LL | fn foo<T: ?Trait + ?Trait>(_: T) {}
| ^^^^^^ ^^^^^^ | ^^^^^^ ^^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-polarity-repeated.rs:4:11 --> $DIR/maybe-polarity-repeated.rs:4:11
| |
LL | fn foo<T: ?Trait + ?Trait>(_: T) {} LL | fn foo<T: ?Trait + ?Trait>(_: T) {}
| ^^^^^^ | ^^^^^^
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-polarity-repeated.rs:4:20 --> $DIR/maybe-polarity-repeated.rs:4:20
| |
LL | fn foo<T: ?Trait + ?Trait>(_: T) {} LL | fn foo<T: ?Trait + ?Trait>(_: T) {}
| ^^^^^^ | ^^^^^^
error: aborting due to 1 previous error; 2 warnings emitted error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0203`. For more information about this error, try `rustc --explain E0203`.

View file

@ -11,11 +11,11 @@ trait Trait<'a> {}
struct S4<T>(T) where for<'a> T: ?Trait<'a>; struct S4<T>(T) where for<'a> T: ?Trait<'a>;
//~^ ERROR `?Trait` bounds are only permitted at the point where a type parameter is declared //~^ ERROR `?Trait` bounds are only permitted at the point where a type parameter is declared
//~| WARN relaxing a default bound only does something for `?Sized` //~| ERROR relaxing a default bound only does something for `?Sized`
struct S5<T>(*const T) where T: ?Trait<'static> + ?Sized; struct S5<T>(*const T) where T: ?Trait<'static> + ?Sized;
//~^ ERROR type parameter has more than one relaxed default bound //~^ ERROR type parameter has more than one relaxed default bound
//~| WARN relaxing a default bound only does something for `?Sized` //~| ERROR relaxing a default bound only does something for `?Sized`
impl<T> S1<T> { impl<T> S1<T> {
fn f() where T: ?Sized {} fn f() where T: ?Sized {}

View file

@ -43,7 +43,7 @@ LL | fn f() where T: ?Sized {}
= help: add `#![feature(more_maybe_bounds)]` to the crate attributes to enable = help: add `#![feature(more_maybe_bounds)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-bounds-where.rs:12:34 --> $DIR/maybe-bounds-where.rs:12:34
| |
LL | struct S4<T>(T) where for<'a> T: ?Trait<'a>; LL | struct S4<T>(T) where for<'a> T: ?Trait<'a>;
@ -58,13 +58,13 @@ LL | struct S5<T>(*const T) where T: ?Trait<'static> + ?Sized;
= help: add `#![feature(more_maybe_bounds)]` to the crate attributes to enable = help: add `#![feature(more_maybe_bounds)]` to the crate attributes to enable
= note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date = note: this compiler was built on YYYY-MM-DD; consider upgrading it if it is out of date
warning: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default error: relaxing a default bound only does something for `?Sized`; all other traits are not bound by default
--> $DIR/maybe-bounds-where.rs:16:33 --> $DIR/maybe-bounds-where.rs:16:33
| |
LL | struct S5<T>(*const T) where T: ?Trait<'static> + ?Sized; LL | struct S5<T>(*const T) where T: ?Trait<'static> + ?Sized;
| ^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^
error: aborting due to 6 previous errors; 2 warnings emitted error: aborting due to 8 previous errors
Some errors have detailed explanations: E0203, E0658. Some errors have detailed explanations: E0203, E0658.
For more information about an error, try `rustc --explain E0203`. For more information about an error, try `rustc --explain E0203`.