Commit graph

96 commits

Author SHA1 Message Date
Ross MacArthur
f7256d28d1
Require issue = "none" over issue = "0" in unstable attributes 2019-12-21 13:16:18 +02:00
David Tolnay
4436c9d354
Format libstd with rustfmt
This commit applies rustfmt with rust-lang/rust's default settings to
files in src/libstd *that are not involved in any currently open PR* to
minimize merge conflicts. THe list of files involved in open PRs was
determined by querying GitHub's GraphQL API with this script:
https://gist.github.com/dtolnay/aa9c34993dc051a4f344d1b10e4487e8

With the list of files from the script in outstanding_files, the
relevant commands were:

    $ find src/libstd -name '*.rs' \
        | xargs rustfmt --edition=2018 --unstable-features --skip-children
    $ rg libstd outstanding_files | xargs git checkout --

Repeating this process several months apart should get us coverage of
most of the rest of libstd.

To confirm no funny business:

    $ git checkout $THIS_COMMIT^
    $ git show --pretty= --name-only $THIS_COMMIT \
        | xargs rustfmt --edition=2018 --unstable-features --skip-children
    $ git diff $THIS_COMMIT  # there should be no difference
2019-11-29 18:43:27 -08:00
3442853561
936349c81b
Update local.rs
Removed parameters not used in the macro
2019-11-06 16:39:48 +08:00
Mateusz Mikuła
bedbf3bacb Apply clippy::single_match suggestion 2019-10-22 19:23:10 +02:00
Tomas Tauber
68c3739f12
updated the panic message wording 2019-09-16 12:13:02 +08:00
Tomas Tauber
df7789c902 Made a thread local storage panic message more explanatory
(TLS is usually understood as Transport Layer Security
outside rust-std internals)
2019-09-15 13:35:02 +08:00
Stjepan Glavina
d2c9c12546 Add #[stable] to Error impl 2019-08-04 15:11:08 +02:00
Stjepan Glavina
d6c3196d02 Add a few trait impls for AccessError 2019-06-20 09:30:45 +02:00
tyler
2c3796172b fix wasm unused import in thread local implementation 2019-05-15 14:35:24 -07:00
tyler
9289d03c9d llvm makes good inlining choices with only the #[cold] attribute 2019-05-15 07:30:34 -07:00
tyler
2b3642b95b remove trailing whitespace 2019-05-15 07:30:34 -07:00
tyler
c3241d0ba0 cold was necessary on try_initialize_nodrop to get more straight line asm 2019-05-15 07:30:34 -07:00
tyler
1a7f774914 - remove unnecessary inlines
- add comment explaining that the fast::Key data structure was carefully constructed for fast access on OSX
- remove inline(never) from the initializer for types where `needs_drop::<T>()` is false
2019-05-15 07:30:34 -07:00
tyler
060d8bb6b0 add #[allow(unused)] 2019-05-15 07:30:34 -07:00
tyler
dfe51a7249 restructure thread_local! for better codegen (especially on macos) 2019-05-15 07:30:33 -07:00
tyler
7acfb99adc Revert "ensure fast thread local lookups occur once per access on macos"
This reverts commit d252f3b77f3b7d4cd59620588f9d026633c05816.
2019-05-15 07:30:33 -07:00
tyler
430a091cd8 ensure fast thread local lookups occur once per access on macos 2019-05-15 07:30:33 -07:00
tyler
48e3da6d59 remove dead code: requires_move_before_drop 2019-05-15 07:30:33 -07:00
Mazdak Farrokhzad
379c380a60 libstd: deny(elided_lifetimes_in_paths) 2019-03-31 12:56:51 +02:00
Jethro Beekman
f229422cc1 SGX target: fix std unit tests 2019-03-25 11:31:19 -07:00
benaryorg
2293d2260a
race condition in thread local storage example
The example had a potential race condition that would still pass the test.
If the thread which was supposed to modify it's own thread local was slower than the instruction to
modify in the main thread, then the test would pass even in case of a failure.
This is would be minor if the child thread was waited for since it check using an `assert_eq` for
the same thing, but vice versa.
However, if the `assert_eq` failed this would trigger a panic, which is not at all caught by the
example since the thread is not waited on.

Signed-off-by: benaryorg <binary@benary.org>
2019-03-03 20:53:50 +01:00
Mark Rousskov
2870015b7b Bootstrap compiler update for 1.35 release 2019-03-02 09:05:34 -07:00
Taiki Endo
93b6d9e086 libstd => 2018 2019-02-28 04:06:15 +09:00
Oliver Scherer
d3c212c552 Require a list of features to allow in allow_internal_unstable 2019-02-11 15:08:16 +01:00
tyler
1a51bb8174 OSX: fix #57534 registering thread dtors while running thread dtors 2019-01-15 20:09:06 -08:00
Mark Rousskov
2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
Alexander Regueiro
ee89c088b0 Various minor/cosmetic improvements to code 2018-12-07 23:53:34 +00:00
kennytm
462f63e1bb
Rollup merge of #55597 - alexcrichton:thread-local-inner, r=KodrAus
std: Enable usage of `thread_local!` through imports

The `thread_local!` macro delegated to an internal macro but it didn't
do so in a macros-and-the-module-system compatible fashion, meaning if a
`#![no_std]` crate imported `std` and tried to use `thread_local!` it
would fail due to missing a lookup of an internal macro.

This commit switches the macro to instead use `$crate` to invoke other
macros, ensuring that it'll work when `thread_local!` is imported alone.
2018-11-06 17:08:03 +08:00
Alex Crichton
ff5226cd2f std: Enable usage of thread_local! through imports
The `thread_local!` macro delegated to an internal macro but it didn't
do so in a macros-and-the-module-system compatible fashion, meaning if a
`#![no_std]` crate imported `std` and tried to use `thread_local!` it
would fail due to missing a lookup of an internal macro.

This commit switches the macro to instead use `$crate` to invoke other
macros, ensuring that it'll work when `thread_local!` is imported alone.
2018-11-01 14:17:39 -07:00
Alex Crichton
0c3d08e967 std: Improve codegen size of accessing TLS
Some code in the TLS implementation in libstd stores `Some(val)` into an
`&mut Option<T>` (effectively) and then pulls out `&T`, but it currently
uses `.unwrap()` which can codegen into a panic even though it can never
panic. With sufficient optimizations enabled (like LTO) the compiler can
see through this but this commit helps it along in normal mode
(`--release` with Cargo by default) to avoid codegen'ing the panic path.

This ends up improving the optimized codegen on wasm by ensuring that a
call to panic pulling in more file size doesn't stick around.
2018-11-01 10:46:31 -07:00
Alex Crichton
cbe9f33b8b std: Implement TLS for wasm32-unknown-unknown
This adds an implementation of thread local storage for the
`wasm32-unknown-unknown` target when the `atomics` feature is
implemented. This, however, comes with a notable caveat of that it
requires a new feature of the standard library, `wasm-bindgen-threads`,
to be enabled.

Thread local storage for wasm (when `atomics` are enabled and there's
actually more than one thread) is powered by the assumption that an
external entity can fill in some information for us. It's not currently
clear who will fill in this information nor whose responsibility it
should be long-term. In the meantime there's a strategy being gamed out
in the `wasm-bindgen` project specifically, and the hope is that we can
continue to test and iterate on the standard library without committing
to a particular strategy yet.

As to the details of `wasm-bindgen`'s strategy, LLVM doesn't currently
have the ability to emit custom `global` values (thread locals in a
`WebAssembly.Module`) so we leverage the `wasm-bindgen` CLI tool to do
it for us. To that end we have a few intrinsics, assuming two global values:

* `__wbindgen_current_id` - gets the current thread id as a 32-bit
  integer. It's `wasm-bindgen`'s responsibility to initialize this
  per-thread and then inform libstd of the id. Currently `wasm-bindgen`
  performs this initialization as part of the `start` function.
* `__wbindgen_tcb_{get,set}` - in addition to a thread id it's assumed
  that there's a global available for simply storing a pointer's worth
  of information (a thread control block, which currently only contains
  thread local storage). This would ideally be a native `global`
  injected by LLVM, but we don't have a great way to support that right
  now.

To reiterate, this is all intended to be unstable and purely intended
for testing out Rust on the web with threads. The story is very likely
to change in the future and we want to make sure that we're able to do
that!
2018-10-11 09:57:55 -07:00
Michal 'vorner' Vaner
771748d0ba
Fix the error reference for LocalKey::try_with 2018-06-27 07:13:28 +02:00
Alex Crichton
c3a5d6b130 std: Minimize size of panicking on wasm
This commit applies a few code size optimizations for the wasm target to
the standard library, namely around panics. We notably know that in most
configurations it's impossible for us to print anything in
wasm32-unknown-unknown so we can skip larger portions of panicking that
are otherwise simply informative. This allows us to get quite a nice
size reduction.

Finally we can also tweak where the allocation happens for the
`Box<Any>` that we panic with. By only allocating once unwinding starts
we can reduce the size of a panicking wasm module from 44k to 350 bytes.
2018-04-13 07:03:00 -07:00
Stjepan Glavina
cb56b2d152 Fix a bug introduced in previous commit 2018-03-01 00:07:27 +01:00
Stjepan Glavina
27fae2b24a Remove thread_local_state 2018-02-28 18:59:12 +01:00
Stjepan Glavina
c99f4c4c5b Stabilize LocalKey::try_with 2018-02-28 12:41:36 +01:00
Alex Crichton
ca18537197 Bump to 1.23 and update bootstrap
This commit updates the bootstrap compiler, bumps the version to 1.23, updates
Cargo, updates books, and updates crates.io dependencies
2017-10-26 13:59:18 -07:00
Stjepan Glavina
a50fe312dc Docs: a LocalKey might start in the Valid state 2017-10-17 11:02:25 +02:00
Joshua Liebow-Feeser
ddb072b8d7 std:🧵:LocalKey: Document limitation with initializers 2017-09-07 12:57:08 -07:00
Eduard-Mihai Burtescu
4e2be14986 Make the LocalKey facade of thread_local! inlineable cross-crate. 2017-09-04 08:24:06 +03:00
Alex Crichton
2972687d10 Update bootstrap compiler
This commit updates the bootstrap compiler and clears out a number
of #[cfg(stage0)] annotations and related business
2017-08-31 06:58:58 -07:00
Zack M. Davis
1b6c9605e4 use field init shorthand EVERYWHERE
Like #43008 (f668999), but _much more aggressive_.
2017-08-15 15:29:17 -07:00
Eduard-Mihai Burtescu
92892d3beb Check #[thread_local] statics correctly in the compiler. 2017-08-12 12:58:07 +03:00
Alex Crichton
9010567dcc Bump master to 1.21.0
This commit bumps the master branch's version to 1.21.0 and also updates the
bootstrap compiler from the freshly minted beta release.
2017-07-25 07:03:19 -07:00
bors
8658908cf8 Auto merge of #43185 - durka:thread-local-pub-restricted, r=alexcrichton
support pub(restricted) in thread_local! (round 2)

Resurrected #40984 now that the issue blocking it was fixed. Original description:

`pub(restricted)` was stabilized in #40556 so let's go!

Here is a [playground](https://play.rust-lang.org/?gist=f55f32f164a6ed18c219fec8f8293b98&version=nightly&backtrace=1).

I changed the interface of `__thread_local_inner!`, which is supposedly unstable but this is not checked for macros (#34097 cc @petrochenkov @jseyfried), so this may be an issue.
2017-07-15 06:14:11 +00:00
Lee Bousfield
a301f84b6a
Use try_with for with implementation 2017-07-12 10:55:39 -06:00
Alex Burka
8e7c4888b7 stage0 fallback 2017-07-11 20:29:16 +00:00
Alex Burka
8cce5bc7ab use :vis in thread_local! 2017-07-11 20:27:55 +00:00
Alex Burka
b6a2d7e822 support pub(restricted) in thread_local! 2017-07-11 20:27:54 +00:00
Lee Bousfield
32ae12b3d1
Add LocalKey::try_with as an alternative to state 2017-07-10 19:26:11 -04:00