]> git.proxmox.com Git - rustc.git/blob - src/test/ui/abi/statics/static-mut-foreign.rs
New upstream version 1.39.0+dfsg1
[rustc.git] / src / test / ui / abi / statics / static-mut-foreign.rs
1 // run-pass
2 // Constants (static variables) can be used to match in patterns, but mutable
3 // statics cannot. This ensures that there's some form of error if this is
4 // attempted.
5
6 // ignore-wasm32-bare no libc to test ffi with
7
8 #![feature(rustc_private)]
9
10 extern crate libc;
11
12 #[link(name = "rust_test_helpers", kind = "static")]
13 extern {
14 static mut rust_dbg_static_mut: libc::c_int;
15 pub fn rust_dbg_static_mut_check_four();
16 }
17
18 unsafe fn static_bound(_: &'static libc::c_int) {}
19
20 fn static_bound_set(a: &'static mut libc::c_int) {
21 *a = 3;
22 }
23
24 unsafe fn run() {
25 assert_eq!(rust_dbg_static_mut, 3);
26 rust_dbg_static_mut = 4;
27 assert_eq!(rust_dbg_static_mut, 4);
28 rust_dbg_static_mut_check_four();
29 rust_dbg_static_mut += 1;
30 assert_eq!(rust_dbg_static_mut, 5);
31 rust_dbg_static_mut *= 3;
32 assert_eq!(rust_dbg_static_mut, 15);
33 rust_dbg_static_mut = -3;
34 assert_eq!(rust_dbg_static_mut, -3);
35 static_bound(&rust_dbg_static_mut);
36 static_bound_set(&mut rust_dbg_static_mut);
37 }
38
39 pub fn main() {
40 unsafe { run() }
41 }