Commit Graph

791 Commits

Author SHA1 Message Date
Lzu Tao
fff822fead Migrate to numeric associated consts 2020-06-10 01:35:47 +00:00
Mark Rousskov
7139342249 Bump to 1.46 2020-06-03 15:27:51 -04:00
Ralf Jung
2764673dca abort_internal is safe 2020-05-17 23:38:31 +02:00
Markus Reiter
39a97900be Replace cfg macro with attribute. 2020-05-02 17:06:16 +02:00
Steven Fackler
07443f17d4 Update name 2020-04-26 04:24:16 -07:00
Steven Fackler
15262ec6be Add Read/Write::can_read/write_vectored
When working with an arbitrary reader or writer, code that uses vectored
operations may end up being slower than code that copies into a single
buffer when the underlying reader or writer doesn't actually support
vectored operations. These new methods allow you to ask the reader or
witer up front if vectored operations are efficiently supported.

Currently, you have to use some heuristics to guess by e.g. checking if
the read or write only accessed the first buffer. Hyper is one concrete
example of a library that has to do this dynamically:
0eaf304644/src/proto/h1/io.rs (L582-L594)
2020-04-26 04:23:39 -07:00
Youngsuk Kim
de143312f8 Add missing comma 2020-04-14 09:29:39 -04:00
Mazdak Farrokhzad
e89cb0733a Rollup merge of #67705 - lzutao:wmemchr, r=wesleywiser
Use unrolled loop for searching NULL in [u16] on Windows
2020-04-09 05:29:36 +02:00
Josh Stone
f854070bb8 Forward OsStr::clone_into to the inner Vec
Despite OS differences, they're all just `Vec<u8>` inside, so we can
just forward `clone_into` calls to that optimized implementation.
2020-04-06 18:26:37 -07:00
Mazdak Farrokhzad
1ea8653d01 Rollup merge of #70597 - vakaras:thread_new_double_free_bug_fix, r=Amanieu
Fix double-free and undefined behaviour in libstd::syn::unix::Thread::new

While working on concurrency support for Miri, I found that the `libstd::syn::unix::Thread::new` method has two potential problems: double-free and undefined behaviour.

**Double-free** could occur if the following events happened (credit for pointing this out goes to @RalfJung):

1.  The call to `pthread_create` successfully launched a new thread that executed to completion and deallocated `p`.
2.  The call to `pthread_attr_destroy` returned a non-zero value causing the `assert_eq!` to panic.
3.  Since `mem::forget(p)` was not yet executed, the destructor of `p` would be executed and cause a double-free.

As far as I understand, this code also violates the stacked-borrows aliasing rules and thus would result in **undefined behaviour** if these rules were adopted.  The problem is that the ownership of `p` is passed to the newly created thread before the call to `mem::forget`. Since the call to `mem::forget` is still a call, it counts as a use of `p` and triggers UB.

This pull request changes the code to use `mem::ManuallyDrop` instead of `mem::forget`. As a consequence, in case of a panic, `p` would be potentially leaked, which while undesirable is probably better than double-free or undefined behaviour.
2020-04-03 22:55:05 +02:00
lzutao
89bc23643b Use unrolled loop 2020-04-02 02:43:23 +00:00
Lzu Tao
041e1704fc use of wmemchr for faster searching in [u16] 2020-04-02 02:41:38 +00:00
Vytautas Astrauskas
baa6d557a7 In Thread::new, add a comment that a panic could cause a memory leak. 2020-04-01 12:46:14 -07:00
Vytautas Astrauskas
5382347064 Use Box::into_raw instead of ManuallyDrop in Thread::new. 2020-03-31 18:02:08 -07:00
Dylan DPC
8993358e77 Rollup merge of #70081 - lcnr:issue68387, r=varkor
add `unused_braces` lint

Add the lint `unused_braces` which is warn by default.

`unused_parens` is also extended and now checks anon consts.

closes #68387

r? @varkor
2020-04-01 00:27:20 +02:00
Vytautas Astrauskas
753bc7ddf8 Inline start_thread into its callers. 2020-03-31 15:15:14 -07:00
Vytautas Astrauskas
64e5327b6e Fix double-free and undefined behaviour in libstd::syn::unix::Thread::new. 2020-03-31 12:24:08 -07:00
Bastian Kauschke
21c5ccab10 fix internal lint fallout 2020-03-31 19:01:48 +02:00
Dylan DPC
47ffca296a Rollup merge of #70479 - RalfJung:win-env, r=Mark-Simulacrum
avoid creating unnecessary reference in Windows Env iterator

Discovered in https://github.com/rust-lang/miri/pull/1225: the Windows `Env` iterator violates Stacked Borrows by creating an `&u16`, turning it into a raw pointer, and then accessing memory outside the range of that type.

There is no need to create a reference here in the first place, so the fix is trivial.
Cc @JOE1994
Cc https://github.com/rust-lang/unsafe-code-guidelines/issues/134
2020-03-30 16:24:44 +02:00
Dylan DPC
be8d896a4e Rollup merge of #70510 - RalfJung:bool-vs-boolean, r=Mark-Simulacrum
fix TryEnterCriticalSection return type

Source: https://docs.microsoft.com/en-us/windows/win32/api/synchapi/nf-synchapi-tryentercriticalsection
Fixes https://github.com/rust-lang/rust/issues/70504
2020-03-29 01:32:23 +01:00
Dylan DPC
d584f5a386 Rollup merge of #69937 - TyPR124:osstr_ascii, r=dtolnay
ASCII methods on OsStr

Would close #69566

I don't know enough about encodings to know if this is a valid change, however the comment on the issue suggests it could be.

This does two things:

1. Makes ASCII methods available on OsStr

2. Makes it possible to obtain a `&mut OsStr`. This is necessary to actually use `OsStr::make_ascii_*case` methods since they modify the underlying value. As far as I can tell, the only way to modify a `&mut OsStr` is via the methods I just added.

My original hope was to have these methods on `OsStrExt` for Windows, since the standard library already assumes `make_ascii_uppercase` is valid in Windows (see the change I made to windows/process.rs). If it is found these are not valid changes on non-Windows platforms, I can move the methods to the ext trait instead.
2020-03-29 01:32:17 +01:00
TyPR124
235700fea0 use make_ascii_uppercase in windows/process.rs 2020-03-28 18:34:49 -04:00
TyPR124
cc584d5166 ascii methods on osstr 2020-03-28 18:34:48 -04:00
Ralf Jung
38c8ba33ef fix TryEnterCriticalSection return type 2020-03-28 21:10:11 +01:00
Ralf Jung
2a1e61e2d6 avoid creating unnecessary reference in Windows Env iterator 2020-03-27 16:34:15 +01:00
bors
6c19a10e24 Auto merge of #68404 - Amanieu:llvm-asm, r=estebank
Rename asm! to llvm_asm!

As per https://github.com/rust-lang/rfcs/pull/2843, this PR renames `asm!` to `llvm_asm!`. It also renames the compiler's internal `InlineAsm` data structures to `LlvmInlineAsm` in preparation for the new `asm!` functionality specified in https://github.com/rust-lang/rfcs/pull/2850.

This PR doesn't actually deprecate `asm!` yet, it just makes it redirect to `llvm_asm!`. This is necessary because we first need to update the submodules (in particular stdarch) to use `llvm_asm!`.
2020-03-27 03:27:09 +00:00
Dylan DPC
c0369c4523 Rollup merge of #70048 - TyPR124:mutable_osstr, r=dtolnay
Allow obtaining &mut OsStr

```rust
impl DerefMut for OsString {...}              // type Target = OsStr
impl IndexMut<RangeFull> for OsString {...}   // type Output = OsStr
```

---

This change is pulled out of #69937 per @dtolnay

This implements `DerefMut for OsString` to allow obtaining a `&mut OsStr`. This also implements `IndexMut for OsString`, which is used by `DerefMut`. This pattern is the same as is used by `Deref`.

This is necessary to for methods like `make_ascii_lowercase` which need to mutate the underlying value.
2020-03-27 01:23:51 +01:00
Amanieu d'Antras
d162d096dd Rename asm! to llvm_asm!
asm! is left as a wrapper around llvm_asm! to maintain compatibility.
2020-03-26 15:49:22 +00:00
Dylan DPC
276b54e9c9 Rollup merge of #69955 - alexcrichton:stderr-infallible, r=sfackler
Fix abort-on-eprintln during process shutdown

This commit fixes an issue where if `eprintln!` is used in a TLS
destructor it can accidentally cause the process to abort. TLS
destructors are executed after `main` returns on the main thread, and at
this point we've also deinitialized global `Lazy` values like those
which store the `Stderr` and `Stdout` internals. This means that despite
handling TLS not being accessible in `eprintln!`, we will fail due to
not being able to call `stderr()`. This means that we'll double-panic
quickly because panicking also attempt to write to stderr.

The fix here is to reimplement the global stderr handle to avoid the
need for destruction. This avoids the need for `Lazy` as well as the
hidden panic inside of the `stderr` function.

Overall this should improve the robustness of printing errors and/or
panics in weird situations, since the `stderr` accessor should be
infallible in more situations.
2020-03-21 13:06:38 +01:00
Alex Crichton
5edaa7eefd Fix abort-on-eprintln during process shutdown
This commit fixes an issue where if `eprintln!` is used in a TLS
destructor it can accidentally cause the process to abort. TLS
destructors are executed after `main` returns on the main thread, and at
this point we've also deinitialized global `Lazy` values like those
which store the `Stderr` and `Stdout` internals. This means that despite
handling TLS not being accessible in `eprintln!`, we will fail due to
not being able to call `stderr()`. This means that we'll double-panic
quickly because panicking also attempt to write to stderr.

The fix here is to reimplement the global stderr handle to avoid the
need for destruction. This avoids the need for `Lazy` as well as the
hidden panic inside of the `stderr` function.

Overall this should improve the robustness of printing errors and/or
panics in weird situations, since the `stderr` accessor should be
infallible in more situations.
2020-03-20 07:34:56 -07:00
TyPR124
45416cd91a add comment about maintaining OsStr encoding 2020-03-20 09:00:53 -04:00
TyPR124
e4a65e83e7 make safety comments more explicit 2020-03-16 16:22:49 -04:00
TyPR124
16712ede62 corrections on safety comments 2020-03-16 16:18:35 -04:00
TyPR124
cce8ee8bf7 remove #[inline] for consistency in windows/os_str 2020-03-16 16:15:13 -04:00
TyPR124
21975a1aaa add comments about safety 2020-03-16 16:12:54 -04:00
TyPR124
ef2957de13 allowing getting &mut OsStr from OsString 2020-03-16 13:13:07 -04:00
Dylan DPC
957241fcf9 Rollup merge of #69858 - da-x:windows-precise-time, r=Dylan-DPC
std: on Windows, use GetSystemTimePreciseAsFileTime if it is available

This implements #67266.
2020-03-16 01:30:28 +01:00
Dan Aloni
0605abe3bb Use GetSystemTimePreciseAsFileTime if it is available 2020-03-09 18:23:23 +02:00
LeSeulArtichaut
79b8ad84c8 Implement Copy for IoSlice 2020-02-23 18:32:36 +01:00
Dylan DPC
c8125fb36a Rollup merge of #68033 - ollie27:win_f32, r=dtolnay
Don't use f64 shims for f32 cmath functions on non 32-bit x86 MSVC

These shims are only needed on 32-bit x86. Additionally since https://reviews.llvm.org/rL268875 LLVM handles adding the shims itself for the intrinsics.
2020-01-16 20:53:26 +05:30
Lzu Tao
cd9a73d2ea make use of pointer::is_null 2020-01-10 12:52:00 +00:00
Oliver Middleton
084217af65 Don't use f64 shims for f32 cmath functions on none 32-bit x86 MSVC
These shims are only needed on 32-bit x86. Additionally since https://reviews.llvm.org/rL268875 LLVM handles adding the shims itself for the intrinsics.
2020-01-08 22:56:33 +00:00
Guillaume Gomez
a86a18907b Rollup merge of #67848 - ollie27:float_link_name_attr, r=Dylan-DPC
Remove unused `#[link_name = "m"]` attributes

These were perhaps supposed to be `#[link(name = "m")]` but linking libm should be handled by the libc crate anyway.

They should have triggered a compile error: #47725
2020-01-04 13:17:32 +01:00
Oliver Middleton
83333fe85b Remove unused #[link_name = "m"] attributes
These were perhaps supposed to be `#[link(name = "m")]` but linking libm should be handled by the libc crate anyway.
2020-01-03 23:41:11 +00:00
Lzu Tao
dd8f072233 Use drop instead of the toilet closure |_| () 2020-01-02 08:56:12 +00:00
bors
f564c4db0d Auto merge of #67605 - lzutao:msdn-links, r=Mark-Simulacrum
tidy: change msdn links to newer locations

see accouncement at https://docs.microsoft.com/welcome-to-docs
The script that I used: https://gist.github.com/lzutao/1449c9210ad91899841d62e0058d2caa
2019-12-28 09:19:26 +00:00
Lzu Tao
3a2ef17194 tidy: change msdn links to newer locations
see accouncement at https://docs.microsoft.com/welcome-to-docs
2019-12-25 15:35:54 +00:00
David Tolnay
4646a88b7a Deprecate Error::description for real
`description` has been documented as soft-deprecated since 1.27.0 (17
months ago). There is no longer any reason to call it or implement it.

This commit:

- adds #[rustc_deprecated(since = "1.41.0")] to Error::description;

- moves description (and cause, which is also deprecated) below the
  source and backtrace methods in the Error trait;

- reduces documentation of description and cause to take up much less
  vertical real estate in rustdocs, while preserving the example that
  shows how to render errors without needing to call description;

- removes the description function of all *currently unstable* Error
  impls in the standard library;

- marks #[allow(deprecated)] the description function of all *stable*
  Error impls in the standard library;

- replaces miscellaneous uses of description in example code and the
  compiler.
2019-12-24 22:39:49 -08:00
Mark Rousskov
a06baa56b9 Format the world 2019-12-22 17:42:47 -05:00
Ross MacArthur
f7256d28d1 Require issue = "none" over issue = "0" in unstable attributes 2019-12-21 13:16:18 +02:00