diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-02-12 23:18:55 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-12 23:18:55 +0100 |
| commit | f759c23b5cb7a1a0969e84a6ae02e079b1957569 (patch) | |
| tree | 05d0d5a8c16e562aec83d9db031715b0755709b4 /tests | |
| parent | 7075502b15404ce57fa281491bc69fbc60f3ade3 (diff) | |
| parent | a313ffb8844d51f6048be35b1b0ea39e7dfc48c7 (diff) | |
| download | rust-f759c23b5cb7a1a0969e84a6ae02e079b1957569.tar.gz rust-f759c23b5cb7a1a0969e84a6ae02e079b1957569.zip | |
Rollup merge of #120970 - RalfJung:static-promoted-test, r=oli-obk
add another test for promoteds-in-static https://github.com/rust-lang/rust/pull/119614 led to validation of promoteds recursing into statics. These statics can point to `static mut` and interior mutable `static` and do other things we don't allow in `const`, but promoteds are validated as `const`, so we get strange errors (saying "in `const`" when there is no const) and surprising validation failures. https://github.com/rust-lang/rust/pull/120960 fixes that; this here adds another test. r? ``@oli-obk`` Fixes https://github.com/rust-lang/rust/issues/120968
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/consts/static-promoted-to-mutable-static.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/ui/consts/static-promoted-to-mutable-static.rs b/tests/ui/consts/static-promoted-to-mutable-static.rs new file mode 100644 index 00000000000..d49ba478dbc --- /dev/null +++ b/tests/ui/consts/static-promoted-to-mutable-static.rs @@ -0,0 +1,33 @@ +// check-pass +#![allow(non_camel_case_types, non_upper_case_globals, static_mut_ref)] + +pub struct wl_interface { + pub version: i32 +} + +pub struct Interface { + pub other_interfaces: &'static [&'static Interface], + pub c_ptr: Option<&'static wl_interface>, +} + +pub static mut wl_callback_interface: wl_interface = wl_interface { + version: 0, +}; + +pub static WL_CALLBACK_INTERFACE: Interface = Interface { + other_interfaces: &[], + c_ptr: Some(unsafe { &wl_callback_interface }), +}; + +// This static contains a promoted that points to a static that points to a mutable static. +pub static WL_SURFACE_INTERFACE: Interface = Interface { + other_interfaces: &[&WL_CALLBACK_INTERFACE], + c_ptr: None, +}; + +// And another variant of the same thing, this time with interior mutability. +use std::sync::OnceLock; +static LAZY_INIT: OnceLock<u32> = OnceLock::new(); +static LAZY_INIT_REF: &[&OnceLock<u32>] = &[&LAZY_INIT]; + +fn main() {} |
