|  | //! Test that non-coercion casts aren't allowed to drop the principal, | 
|  | //! because they cannot modify the pointer metadata. | 
|  | //! | 
|  | //! We test this in a const context to guard against UB if this is allowed | 
|  | //! in the future. | 
|  |  | 
|  | trait Trait {} | 
|  | impl Trait for () {} | 
|  |  | 
|  | struct Wrapper<T: ?Sized>(T); | 
|  |  | 
|  | const OBJECT: *const (dyn Trait + Send) = &(); | 
|  |  | 
|  | // coercions are allowed | 
|  | const _: *const dyn Send = OBJECT as _; | 
|  |  | 
|  | // casts are **not** allowed | 
|  | const _: *const Wrapper<dyn Send> = OBJECT as _; | 
|  | //~^ ERROR casting `*const (dyn Trait + Send + 'static)` as `*const Wrapper<dyn Send>` is invalid | 
|  |  | 
|  | fn main() {} |