]> git.lizzy.rs Git - rust.git/commit
std: Tweak expansion of thread-local const
authorAlex Crichton <alex@alexcrichton.com>
Wed, 10 Nov 2021 18:55:30 +0000 (10:55 -0800)
committerAlex Crichton <alex@alexcrichton.com>
Wed, 10 Nov 2021 19:07:43 +0000 (11:07 -0800)
commit1ac5d7dcde57c3f4baa975d79dbdb57dfdb2489c
treeeae37e304a8d3f072dd69823d59c2601447e858c
parent68ca579406f2fa9ec62710e4a4d5d3e07a168d3c
std: Tweak expansion of thread-local const

This commit tweaks the expansion of `thread_local!` when combined with a
`const { ... }` value to help ensure that the rules which apply to
`const { ... }` blocks will be the same as when they're stabilized.
Previously with this invocation:

    thread_local!(static NAME: Type = const { init_expr });

this would generate (on supporting platforms):

    #[thread_local]
    static NAME: Type = init_expr;

instead the macro now expands to:

    const INIT_EXPR: Type = init_expr;
    #[thread_local]
    static NAME: Type = INIT_EXPR;

with the hope that because `init_expr` is defined as a `const` item then
it's not accidentally allowing more behavior than if it were put into a
`static`. For example on the stabilization issue [this example][ex] now
gives the same error both ways.

[ex]: https://github.com/rust-lang/rust/issues/84223#issuecomment-953384298
library/std/src/thread/local.rs