mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 21:16:44 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			28 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			28 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //! With `feature(generic_const_exprs)`, anon consts (e.g. length in array types) will
 | |
| //! inherit their parent's predicates. When combined with `feature(trivial_bounds)`, it
 | |
| //! is possible to have an unevaluated constant that is rigid, but not generic.
 | |
| //!
 | |
| //! This is what happens below: `u8: A` does not hold in the global environment, but
 | |
| //! with trivial bounds + GCE it it possible that `<u8 as A>::B` can appear in an array
 | |
| //! length without causing a compile error. This constant is *rigid* (i.e. it cannot be
 | |
| //! normalized further), but it is *not generic* (i.e. it does not depend on any generic
 | |
| //! parameters).
 | |
| //!
 | |
| //! This test ensures that we do not ICE in layout computation when encountering such a
 | |
| //! constant.
 | |
| 
 | |
| #![feature(rustc_attrs)]
 | |
| #![feature(generic_const_exprs)] //~ WARNING: the feature `generic_const_exprs` is incomplete
 | |
| #![feature(trivial_bounds)]
 | |
| 
 | |
| #![crate_type = "lib"]
 | |
| 
 | |
| trait A {
 | |
|     const B: usize;
 | |
| }
 | |
| 
 | |
| #[rustc_layout(debug)]
 | |
| struct S([u8; <u8 as A>::B]) //~ ERROR: the type `[u8; <u8 as A>::B]` has an unknown layout
 | |
| where
 | |
|     u8: A;
 | 
