| //@ run-pass |
| |
| // Use of global static variables in literal values should be allowed for |
| // promotion. |
| // This test is to demonstrate the issue raised in |
| // https://github.com/rust-lang/rust/issues/70584 |
| |
| // Literal values were previously promoted into local static values when |
| // other global static variables are used. |
| |
| struct A<T: 'static>(&'static T); |
| struct B<T: 'static + ?Sized> { |
| x: &'static T, |
| } |
| static STR: &'static [u8] = b"hi"; |
| static C: A<B<B<[u8]>>> = { |
| A(&B { |
| x: &B { x: STR }, |
| }) |
| }; |
| |
| pub struct Slice(&'static [i32]); |
| |
| static CONTENT: i32 = 42; |
| pub static CONTENT_MAP: Slice = Slice(&[CONTENT]); |
| |
| pub static FOO: (i32, i32) = (42, 43); |
| pub static CONTENT_MAP2: Slice = Slice(&[FOO.0]); |
| |
| fn main() { |
| assert_eq!(b"hi", C.0.x.x); |
| assert_eq!(&[42], CONTENT_MAP.0); |
| assert_eq!(&[42], CONTENT_MAP2.0); |
| } |