Commit graph

10095 commits

Author SHA1 Message Date
Wangshan Lu
226bcdf7d1 Rename main thread from "<main>" to "main".
Fix issue #33789
2016-05-22 22:42:10 +08:00
bors
476fe6eefe Auto merge of #33767 - sfackler:panic-hook-docs, r=alexcrichton
Mention that the panic hook will always run

r? @alexcrichton

cc @tomaka
2016-05-21 10:17:40 -07:00
Alex Burka
b9d1e76252 update tracking issue for once_poison
The tracking issue for once_poison was noted as #31688 which was closed, so it now points to the new #33577.
2016-05-20 20:30:08 -04:00
Steven Fackler
78e06adca7 Mention that the panic hook will always run 2016-05-19 22:35:09 -07:00
Alex Crichton
eaeef3db0e std: Cache HashMap keys in TLS
This is a rebase and extension of #31356 where we cache the keys in thread local
storage. This should give us a nice speed bost in creating hash maps along with
mostly retaining the property that all maps have a nondeterministic iteration
order.

Closes #27243
2016-05-19 16:58:15 -07:00
bors
0667ae93fb Auto merge of #33665 - golddranks:thread-park-add-big-picture-explanation, r=aturon
Added a big-picture explanation for thread::park() & co.

As I said in https://www.reddit.com/r/rust/comments/4ihvv1/hey_rust_programmers_got_a_question_ask_here/d372s4i, the current explanation of the `park()` and `unpark()` is a bit unclear. It says that they're used for blocking, but then it goes on explaining the semantics in detail, leaving the bigger picture a bit unclear.

I added a short high-level explanation that explains how the functions are used. I also exposed the full paths (`thread::park()` and `thread::Thread::unpark()`), because `unpark()`, being a method, is not directly visible at the module level.
2016-05-17 13:11:57 -07:00
Huon Wilson
eb67f492de Deprecate {f32,f64}::abs_sub.
The abs_sub name is misleading: the function actually computes the
positive difference (`fdim` in C), not the `(x - y).abs()` that *many* people expect
from the name.

This function can be replaced with just `(x - y).max(0.0)`, mirroring
the `abs` version, but this behaves differently with NAN: `NAN.max(0.0)
== 0.0`, while `NAN.positive_diff(0.0) == NAN`. People who absolutely
need that behaviour can use the C function directly and/or talk to the libs
team (we haven't encountered a concrete use-case for this functionality).

Closes #30315.
2016-05-17 08:06:56 +10:00
bors
c1ccf97e51 Auto merge of #33663 - rphmeier:recover_rename, r=sfackler
rename a few occurrences of RecoverSafe in docs
2016-05-16 07:25:04 -07:00
Pyry Kontio
20b9129617 Added a big-picture explanation for thread::park() & co. 2016-05-16 14:01:21 +09:00
Robert Habermeier
81f479f5bd rename a few occurrences of RecoverSafe in docs 2016-05-16 00:04:01 -04:00
bors
e90307d2a2 Auto merge of #33251 - Kintaro:fix-typo-in-fs, r=GuillaumeGomez
Fix a typo in error messages in std::fs tests

Just a small correction to fix a typo in an error message in std::fs tests
2016-05-15 20:47:15 -07:00
Manish Goregaokar
762e5b1c0f Rollup merge of #33591 - dns2utf8:systemtime_wording, r=GuillaumeGomez
Use the correct word in the explanation

r? @steveklabnik
2016-05-15 20:13:43 +05:30
Manish Goregaokar
3bc7fc1b54 Rollup merge of #33580 - frewsxcv:temp-dir, r=alexcrichton
Cleanup formatting and wording for `std::env::temp_dir` docs.

None
2016-05-15 20:13:42 +05:30
Manish Goregaokar
0238e29652 Rollup merge of #33565 - Amanieu:once_doc, r=GuillaumeGomez
Fix typo in std::sync::Once documentation
2016-05-15 20:13:41 +05:30
bors
5f6eb14b28 Auto merge of #33563 - Amanieu:oncestate, r=alexcrichton
Export OnceState from libstd

This type is used in the signature of `call_once_force` but isn't exported from libstd.

r? @alexcrichton
2016-05-14 07:15:45 -07:00
Manish Goregaokar
4a1ce9831c Rollup merge of #33554 - sfackler:no-current-exe, r=alexcrichton
Don't use env::current_exe with libbacktrace

If the path we give to libbacktrace doesn't actually correspond to the
current process, libbacktrace will segfault *at best*.

cc #21889

r? @alexcrichton
cc @semarie
2016-05-14 11:57:47 +02:00
Steven Fackler
9393e52d4d Don't use env::current_exe with libbacktrace
If the path we give to libbacktrace doesn't actually correspond to the
current process, libbacktrace will segfault *at best*.

cc #21889
2016-05-12 09:13:58 -07:00
Alex Crichton
bb9062a296 rustbuild: Add support for crate tests + doctests
This commit adds support to rustbuild to run crate unit tests (those defined by
`#[test]`) as well as documentation tests. All tests are powered by `cargo test`
under the hood.

Each step requires the `libtest` library is built for that corresponding stage.
Ideally the `test` crate would be a dev-dependency, but for now it's just easier
to ensure that we sequence everything in the right order.

Currently no filtering is implemented, so there's not actually a method of
testing *only* libstd or *only* libcore, but rather entire swaths of crates are
tested all at once.

A few points of note here are:

* The `coretest` and `collectionstest` crates are just listed as `[[test]]`
  entires for `cargo test` to naturally pick up. This mean that `cargo test -p
  core` actually runs all the tests for libcore.
* Libraries that aren't tested all mention `test = false` in their `Cargo.toml`
* Crates aren't currently allowed to have dev-dependencies due to
  rust-lang/cargo#860, but we can likely alleviate this restriction once
  workspaces are implemented.

cc #31590
2016-05-12 08:52:20 -07:00
Stefan Schindler
91e43acf1f Use the correct word in the explanation 2016-05-12 17:38:20 +02:00
Corey Farwell
6458b0454f Cleanup formatting and wording for std::env::temp_dir docs. 2016-05-12 00:05:25 -04:00
Amanieu d'Antras
5cbfa1285d Fix typo in std::sync::Once documentation 2016-05-11 20:42:26 +01:00
Amanieu d'Antras
c91b104884 Export OnceState from libstd 2016-05-11 20:30:20 +01:00
Alex Crichton
8d65591cf2 rustbuild: Tighten dependencies of build scripts
Ensure that `rerun-if-changed` is printed for all build scripts to ensure that
they've all got the right list of dependencies.
2016-05-10 23:41:19 -07:00
bors
72ed7e7894 Auto merge of #32900 - alexcrichton:panic2abort, r=nikomatsakis
rustc: Implement custom panic runtimes

This commit is an implementation of [RFC 1513] which allows applications to
alter the behavior of panics at compile time. A new compiler flag, `-C panic`,
is added and accepts the values `unwind` or `panic`, with the default being
`unwind`. This model affects how code is generated for the local crate, skipping
generation of landing pads with `-C panic=abort`.

[RFC 1513]: https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md

Panic implementations are then provided by crates tagged with
`#![panic_runtime]` and lazily required by crates with
`#![needs_panic_runtime]`. The panic strategy (`-C panic` value) of the panic
runtime must match the final product, and if the panic strategy is not `abort`
then the entire DAG must have the same panic strategy.

With the `-C panic=abort` strategy, users can expect a stable method to disable
generation of landing pads, improving optimization in niche scenarios,
decreasing compile time, and decreasing output binary size. With the `-C
panic=unwind` strategy users can expect the existing ability to isolate failure
in Rust code from the outside world.

Organizationally, this commit dismantles the `sys_common::unwind` module in
favor of some bits moving part of it to `libpanic_unwind` and the rest into the
`panicking` module in libstd. The custom panic runtime support is pretty similar
to the custom allocator support with the only major difference being how the
panic runtime is injected (takes the `-C panic` flag into account).

Closes #32837
2016-05-09 18:23:48 -07:00
Alex Crichton
38e6e5d0a9 rustc: Use C++ personalities on MSVC
Currently the compiler has two relatively critical bugs in the implementation of
MSVC unwinding:

* #33112 - faults like segfaults and illegal instructions will run destructors
           in Rust, meaning we keep running code after a super-fatal exception
           has happened.

* #33116 - When compiling with LTO plus `-Z no-landing-pads` (or `-C
           panic=abort` with the previous commit) LLVM won't remove all `invoke`
           instructions, meaning that some landing pads stick around and
           cleanups may be run due to the previous bug.

These both stem from the flavor of "personality function" that Rust uses for
unwinding on MSVC. On 32-bit this is `_except_handler3` and on 64-bit this is
`__C_specific_handler`, but they both essentially are the "most generic"
personality functions for catching exceptions and running cleanups. That is,
thse two personalities will run cleanups for all exceptions unconditionally, so
when we use them we run cleanups for **all SEH exceptions** (include things like
segfaults).

Note that this also explains why LLVM won't optimize away `invoke` instructions.
These functions can legitimately still unwind (the `nounwind` attribute only
seems to apply to "C++ exception-like unwining"). Also note that the standard
library only *catches* Rust exceptions, not others like segfaults and illegal
instructions.

LLVM has support for another personality, `__CxxFrameHandler3`, which does not
run cleanups for general exceptions, only C++ exceptions thrown by
`_CxxThrowException`. This essentially ideally matches our use case, so this
commit moves us over to using this well-known personality function as well as
exception-throwing function.

This doesn't *seem* to pull in any extra runtime dependencies just yet, but if
it does we can perhaps try to work out how to implement more of it in Rust
rather than relying on MSVCRT runtime bits.

More details about how this is actually implemented can be found in the changes
itself, but this...

Closes #33112
Closes #33116
2016-05-09 17:28:48 -07:00
Steve Klabnik
8478d48dad Add some warnings to std::env::current_exe
/cc #21889
2016-05-09 19:45:12 -04:00
Manish Goregaokar
fffaf665f2
Rollup merge of #33474 - frewsxcv:unwrap-err, r=alexcrichton
Utilize `Result::unwrap_err` in more places.

None
2016-05-09 14:59:38 -07:00
Manish Goregaokar
d394aa064e
Rollup merge of #33224 - alexcrichton:create-exit-status, r=aturon
std: Allow creating ExitStatus from raw values

Sometimes a process may be waited on externally from the standard library, in
which case it can be useful to create a raw `ExitStatus` structure to return.
This commit extends the existing Unix `ExitStatusExt` extension trait and adds a
new Windows-specific `ExitStatusExt` extension trait to do this. The methods are
currently called `ExitStatus::from_raw`.

cc #32713
2016-05-09 14:59:20 -07:00
bors
0e7cb8bc31 Auto merge of #33224 - alexcrichton:create-exit-status, r=aturon
std: Allow creating ExitStatus from raw values

Sometimes a process may be waited on externally from the standard library, in
which case it can be useful to create a raw `ExitStatus` structure to return.
This commit extends the existing Unix `ExitStatusExt` extension trait and adds a
new Windows-specific `ExitStatusExt` extension trait to do this. The methods are
currently called `ExitStatus::from_raw`.

cc #32713
2016-05-09 14:04:08 -07:00
Alex Crichton
0ec321f7b5 rustc: Implement custom panic runtimes
This commit is an implementation of [RFC 1513] which allows applications to
alter the behavior of panics at compile time. A new compiler flag, `-C panic`,
is added and accepts the values `unwind` or `panic`, with the default being
`unwind`. This model affects how code is generated for the local crate, skipping
generation of landing pads with `-C panic=abort`.

[RFC 1513]: https://github.com/rust-lang/rfcs/blob/master/text/1513-less-unwinding.md

Panic implementations are then provided by crates tagged with
`#![panic_runtime]` and lazily required by crates with
`#![needs_panic_runtime]`. The panic strategy (`-C panic` value) of the panic
runtime must match the final product, and if the panic strategy is not `abort`
then the entire DAG must have the same panic strategy.

With the `-C panic=abort` strategy, users can expect a stable method to disable
generation of landing pads, improving optimization in niche scenarios,
decreasing compile time, and decreasing output binary size. With the `-C
panic=unwind` strategy users can expect the existing ability to isolate failure
in Rust code from the outside world.

Organizationally, this commit dismantles the `sys_common::unwind` module in
favor of some bits moving part of it to `libpanic_unwind` and the rest into the
`panicking` module in libstd. The custom panic runtime support is pretty similar
to the custom allocator support with the only major difference being how the
panic runtime is injected (takes the `-C panic` flag into account).
2016-05-09 08:22:36 -07:00
Corey Farwell
62b19c627e Utilize Result::unwrap_err in more places. 2016-05-09 08:40:57 -04:00
Manish Goregaokar
cc98f4cbb0
Rollup merge of #33426 - sfackler:try-from, r=aturon
Implement RFC 1542

cc #33417

r? @aturon
2016-05-08 07:02:22 -07:00
bors
8e414e0e3f Auto merge of #33091 - sanxiyn:unused-trait-import-3, r=nrc
Warn unused trait imports, rebased

Rebase of #30021.

Fix #25730.
2016-05-08 04:50:27 -07:00
Steve Klabnik
84e27738ef Rollup merge of #33459 - frewsxcv:patch-29, r=guillaumegomez
Indicate struct names are code-like in doc-comment.
2016-05-07 15:35:19 -04:00
Steve Klabnik
099e0879aa Rollup merge of #33456 - CryZe:barrier-wait-docs, r=GuillaumeGomez
Fix Typo in Barrier::wait documentation

This should be `have` instead of `has`.
2016-05-07 15:35:19 -04:00
Steve Klabnik
f4453bba95 Rollup merge of #33442 - tshepang:trim, r=steveklabnik
doc: trim some needless code
2016-05-07 15:35:19 -04:00
Steve Klabnik
b68254fbb8 Rollup merge of #33439 - birkenfeld:ip-rfc-refs, r=steveklabnik
doc: make RFC references consistent

Always add a space and end sentence with a full stop.
2016-05-07 15:35:19 -04:00
Steve Klabnik
aa63f54e37 Rollup merge of #33438 - birkenfeld:dup-words, r=steveklabnik
Fix some some duplicate words.
2016-05-07 15:35:19 -04:00
Steve Klabnik
b651b2c8af Rollup merge of #33326 - birkenfeld:issue-33321, r=GuillaumeGomez
std::thread docs: spawn() does not return a Thread anymore

Also move the "Thread type" section down a bit, since it is not so important anymore.

Fixes: #33321
2016-05-07 15:35:16 -04:00
Steve Klabnik
93285f8adb Rollup merge of #33283 - GuillaumeGomez:process_doc, r=steveklabnik
Add process types documentation

Part of #29370.

r? @steveklabnik
2016-05-07 15:35:16 -04:00
Steven Fackler
a9779df188 Implement RFC 1542
cc #33417
2016-05-07 08:52:41 -07:00
Tshepang Lekhonkhobe
9f935c8dd8 doc: binding not needed 2016-05-06 21:04:40 +02:00
Tshepang Lekhonkhobe
8e9008dc30 doc: mut not needed 2016-05-06 21:04:40 +02:00
Corey Farwell
40025e8cd3 Indicate struct names are code-like in doc-comment. 2016-05-06 09:12:10 -04:00
bors
a36c41912b Auto merge of #33086 - cardoe:non-blocking-rand-read, r=alexcrichton
rand: don't block before random pool is initialized

If we attempt a read with getrandom() on Linux the syscall can block
before the random pool is initialized unless the GRND_NONBLOCK flag is
passed. This flag causes getrandom() to instead return EAGAIN while the
pool is uninitialized. To avoid downstream users of crate or std
functionality that have no ability to avoid this blocking behavior this
change causes Rust to read bytes from /dev/urandom while getrandom()
would block and once getrandom() is available to use that. Fixes #32953.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
2016-05-06 03:07:00 -07:00
Christopher Serr
32edf1d7a8 Fix Typo in Barrier::wait documentation
This should be `have` instead of `has`.
2016-05-06 11:18:05 +02:00
bors
6301e22e15 Auto merge of #33072 - tbu-:pr_duration_new_overflow, r=alexcrichton
Panic on overflow in `Duration::new` constructor

Panicking on overflow is also done for `+`, and it replaces the
currently incorrect overflow behavior of wrapping around, which does not
make sense for `Duration`s.
2016-05-06 00:58:59 -07:00
bors
77987ba898 Auto merge of #32990 - tbu-:pr_more_defaults_cstr_path, r=alexcrichton
Add `Default` implementation for `&CStr`, `CString`, `Path`
2016-05-05 13:18:57 -07:00
Georg Brandl
10599e4641 doc: make RFC references consistent 2016-05-05 21:15:15 +02:00
Georg Brandl
26eb2bef25 Fix some some duplicate words. 2016-05-05 21:12:37 +02:00