72 lines
1.5 KiB
Rust
72 lines
1.5 KiB
Rust
|
//@ build-pass
|
||
|
//@ revisions: no-opt inline
|
||
|
//@ [inline]compile-flags: -Zmir-opt-level=3 --emit=mir
|
||
|
#![feature(trivial_bounds)]
|
||
|
#![allow(unused)]
|
||
|
|
||
|
trait Foo {
|
||
|
fn test(&self);
|
||
|
}
|
||
|
|
||
|
fn foo<'a>(s: &'a mut ())
|
||
|
where
|
||
|
&'a mut (): Foo,
|
||
|
{
|
||
|
s.test();
|
||
|
}
|
||
|
|
||
|
fn clone(it: &mut ()) -> &mut ()
|
||
|
where
|
||
|
for<'any> &'any mut (): Clone,
|
||
|
//~^ WARN trait bound for<'any> &'any mut (): Clone does not depend on any type or lifetime parameters
|
||
|
{
|
||
|
it.clone()
|
||
|
}
|
||
|
|
||
|
fn generic_function<X: Foo>(x: X) {}
|
||
|
|
||
|
struct S where i32: Foo;
|
||
|
//~^ WARN trait bound i32: Foo does not depend on any type or lifetime parameters
|
||
|
|
||
|
impl Foo for () where i32: Foo {
|
||
|
//~^ WARN trait bound i32: Foo does not depend on any type or lifetime parameters
|
||
|
fn test(&self) {
|
||
|
3i32.test();
|
||
|
Foo::test(&4i32);
|
||
|
generic_function(5i32);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fn f() where i32: Foo {
|
||
|
//~^ WARN trait bound i32: Foo does not depend on any type or lifetime parameters
|
||
|
let s = S;
|
||
|
3i32.test();
|
||
|
Foo::test(&4i32);
|
||
|
generic_function(5i32);
|
||
|
}
|
||
|
|
||
|
fn g() where &'static str: Foo {
|
||
|
//~^ WARN trait bound &'static str: Foo does not depend on any type or lifetime parameters
|
||
|
"Foo".test();
|
||
|
Foo::test(&"Foo");
|
||
|
generic_function("Foo");
|
||
|
}
|
||
|
|
||
|
fn use_op(s: String) -> String
|
||
|
where
|
||
|
String: ::std::ops::Neg<Output = String>,
|
||
|
//~^ WARN trait bound String: Neg does not depend on any type or lifetime parameters
|
||
|
{
|
||
|
-s
|
||
|
}
|
||
|
|
||
|
fn use_for()
|
||
|
where
|
||
|
i32: Iterator,
|
||
|
//~^ WARN trait bound i32: Iterator does not depend on any type or lifetime parameters
|
||
|
{
|
||
|
for _ in 2i32 {}
|
||
|
}
|
||
|
|
||
|
fn main() {}
|