about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRalf Jung <post@ralfj.de>2024-02-12 14:52:20 +0100
committerRalf Jung <post@ralfj.de>2024-02-12 15:27:32 +0100
commita313ffb8844d51f6048be35b1b0ea39e7dfc48c7 (patch)
tree96a5a30d3cad7c97c187416d54ba42e43b1ee8c2
parented195328689e052b5270b25d0e410b491914fc71 (diff)
downloadrust-a313ffb8844d51f6048be35b1b0ea39e7dfc48c7.tar.gz
rust-a313ffb8844d51f6048be35b1b0ea39e7dfc48c7.zip
add another test for promoteds-in-static
-rw-r--r--tests/ui/consts/static-promoted-to-mutable-static.rs33
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() {}