| //@ check-pass | 
 | // Check tautalogically false `Copy` bounds | 
 |  | 
 | #![feature(trivial_bounds)] | 
 | #![allow(dropping_references, dropping_copy_types)] | 
 |  | 
 | fn copy_string(t: String) -> String where String: Copy { //~ WARNING trivial_bounds | 
 |     is_copy(&t); | 
 |     let x = t; | 
 |     drop(t); | 
 |     t | 
 | } | 
 |  | 
 | fn copy_out_string(t: &String) -> String where String: Copy { //~ WARNING trivial_bounds | 
 |     *t | 
 | } | 
 |  | 
 | fn copy_string_with_param<T>(x: String) where String: Copy { //~ WARNING trivial_bounds | 
 |     let y = x; | 
 |     let z = x; | 
 | } | 
 |  | 
 | // Check that no reborrowing occurs | 
 | fn copy_mut<'a>(t: &&'a mut i32) -> &'a mut i32 where for<'b> &'b mut i32: Copy { | 
 |     //~^ WARNING trivial_bounds | 
 |     is_copy(t); | 
 |     let x = *t; | 
 |     drop(x); | 
 |     x | 
 | } | 
 |  | 
 | fn is_copy<T: Copy>(t: &T) {} | 
 |  | 
 |  | 
 | fn main() {} |