//@ compile-flags: -O
//@ aux-build:thread_local_aux.rs
//@ ignore-windows FIXME(#84933)
//@ ignore-wasm globals are used instead of thread locals
//@ ignore-emscripten globals are used instead of thread locals
//@ ignore-android does not use #[thread_local]
//@ ignore-nto does not use #[thread_local]

#![crate_type = "lib"]

extern crate thread_local_aux as aux;

use std::cell::Cell;

thread_local!(static A: Cell<u32> = const { Cell::new(1) });

// CHECK: [[TLS_AUX:@.+]] = external thread_local local_unnamed_addr global i64
// CHECK: [[TLS:@.+]] = internal thread_local unnamed_addr global

// CHECK-LABEL: @get
#[no_mangle]
fn get() -> u32 {
    // CHECK: [[RET_0:%.+]] = load i32, {{.*}}[[TLS]]{{.*}}
    // CHECK-NEXT: ret i32 [[RET_0]]
    A.with(|a| a.get())
}

// CHECK-LABEL: @set
#[no_mangle]
fn set(v: u32) {
    // CHECK: store i32 %0, {{.*}}[[TLS]]{{.*}}
    // CHECK-NEXT: ret void
    A.with(|a| a.set(v))
}

// CHECK-LABEL: @get_aux
#[no_mangle]
fn get_aux() -> u64 {
    // CHECK: [[RET_1:%.+]] = load i64, {{.*}}[[TLS_AUX]]
    // CHECK-NEXT: ret i64 [[RET_1]]
    aux::A.with(|a| a.get())
}

// CHECK-LABEL: @set_aux
#[no_mangle]
fn set_aux(v: u64) {
    // CHECK: store i64 %0, {{.*}}[[TLS_AUX]]
    // CHECK-NEXT: ret void
    aux::A.with(|a| a.set(v))
}
