]>
Commit | Line | Data |
---|---|---|
17df50a5 XL |
1 | // compile-flags: -O |
2 | // aux-build:thread_local_aux.rs | |
3 | // ignore-windows FIXME(#84933) | |
4 | // ignore-wasm globals are used instead of thread locals | |
5 | // ignore-emscripten globals are used instead of thread locals | |
6 | // ignore-android does not use #[thread_local] | |
9ffffee4 | 7 | // ignore-nto does not use #[thread_local] |
17df50a5 XL |
8 | |
9 | #![crate_type = "lib"] | |
17df50a5 XL |
10 | |
11 | extern crate thread_local_aux as aux; | |
12 | ||
13 | use std::cell::Cell; | |
14 | ||
15 | thread_local!(static A: Cell<u32> = const { Cell::new(1) }); | |
16 | ||
17 | // CHECK: [[TLS_AUX:@.+]] = external thread_local local_unnamed_addr global i64 | |
18 | // CHECK: [[TLS:@.+]] = internal thread_local unnamed_addr global | |
19 | ||
20 | // CHECK-LABEL: @get | |
21 | #[no_mangle] | |
22 | fn get() -> u32 { | |
923072b8 | 23 | // CHECK: %0 = load i32, {{.*}}[[TLS]]{{.*}} |
17df50a5 XL |
24 | // CHECK-NEXT: ret i32 %0 |
25 | A.with(|a| a.get()) | |
26 | } | |
27 | ||
28 | // CHECK-LABEL: @set | |
29 | #[no_mangle] | |
30 | fn set(v: u32) { | |
923072b8 | 31 | // CHECK: store i32 %0, {{.*}}[[TLS]]{{.*}} |
17df50a5 XL |
32 | // CHECK-NEXT: ret void |
33 | A.with(|a| a.set(v)) | |
34 | } | |
35 | ||
36 | // CHECK-LABEL: @get_aux | |
37 | #[no_mangle] | |
38 | fn get_aux() -> u64 { | |
923072b8 | 39 | // CHECK: %0 = load i64, {{.*}}[[TLS_AUX]] |
17df50a5 XL |
40 | // CHECK-NEXT: ret i64 %0 |
41 | aux::A.with(|a| a.get()) | |
42 | } | |
43 | ||
44 | // CHECK-LABEL: @set_aux | |
45 | #[no_mangle] | |
46 | fn set_aux(v: u64) { | |
923072b8 | 47 | // CHECK: store i64 %0, {{.*}}[[TLS_AUX]] |
17df50a5 XL |
48 | // CHECK-NEXT: ret void |
49 | aux::A.with(|a| a.set(v)) | |
50 | } |