Commit Graph

90396 Commits

Author SHA1 Message Date
Mazdak Farrokhzad
4dcb7af0e7
Rollup merge of #58454 - pitdicker:windows_stdio, r=alexcrichton
Refactor Windows stdio and remove stdin double buffering

I was looking for something nice and small to work on, tried to tackle a few FIXME's in Windows stdio, and things grew from there.

This part of the standard library contains some tricky code, and has changed over the years to handle more corner cases. It could use some refactoring and extra comments.

Changes/fixes:
- Made `StderrRaw` `pub(crate)`, to remove the `Write` implementations on `sys::Stderr` (used unsynchronised for panic output).
- Remove the unused `Read` implementation on `sys::windows::stdin`
- The `windows::stdio::Output` enum made sense when we cached the handles, but we can use simple functions like `is_console` now that we get the handle on every read/write
- `write` can now calculate the number of written bytes as UTF-8 when we can't write all `u16`s.
- If `write` could only write one half of a surrogate pair, attempt another write for the other because user code can't reslice in any way that would allow us to write it otherwise.
- Removed the double buffering on stdin. Documentation on the unexposed `StdinRaw` says: 'This handle is not synchronized or buffered in any fashion'; which is now true.
- `sys::windows::Stdin` now always only partially fills its buffer, so we can guarantee any arbitrary UTF-16 can be re-encoded without losing any data.
- `sys::windows::STDIN_BUF_SIZE` is slightly larger to compensate. There should be no real change in the number of syscalls the buffered `Stdin` does. This buffer is a little larger, while the extra buffer on Stdin is gone.
- `sys::windows::Stdin` now attempts to handle unpaired surrogates at its buffer boundary.
- `sys::windows::Stdin` no langer allocates for its buffer, but the UTF-16 decoding still does.

### Testing
I did some manual testing of reading and writing to console. The console does support UTF-16 in some sense, but doesn't supporting displaying characters outside the BMP.
- compile stage 1 stdlib with a tiny value for `MAX_BUFFER_SIZE` to make it easier to catch corner cases
- run a simple test program that reads on stdin, and echo's to stdout
- write some lines with plenty of ASCII and emoji in a text editor
- copy and paste in console to stdin
- return with `\r\n\` or CTRL-Z
- copy and paste in text editor
- check it round-trips

-----

Fixes https://github.com/rust-lang/rust/issues/23344. All but one of the suggestions in that issue are now implemented. the missing one is:

> * When reading data, we require the entire set of input to be valid UTF-16. We should instead attempt to read as much of the input as possible as valid UTF-16, only returning an error for the actual invalid elements. For example if we read 10 elements, 5 of which are valid UTF-16, the 6th is bad, and then the remaining are all valid UTF-16, we should probably return the first 5 on a call to `read`, then return an error, then return the remaining on the next call to `read`.

Stdin in Console mode is dealing with text directly input by a user. In my opinion getting an unpaired surrogate is quite unlikely in that case, and a valid reason to error on the entire line of input (which is probably short). Dealing with it is incompatible with an unbuffered stdin, which seems the more interesting guarantee to me.
2019-02-24 05:56:00 +01:00
Mazdak Farrokhzad
b78e9f4fe3
Rollup merge of #58442 - cuviper:unix-weak, r=alexcrichton
Simplify the unix `Weak` functionality

- We can avoid allocation by adding a NUL to the function name.
- We can get `Option<F>` directly, rather than aliasing the inner `AtomicUsize`.
2019-02-24 05:55:58 +01:00
Mazdak Farrokhzad
55b5ab8359
Rollup merge of #58183 - jethrogb:jb/alloc-box-guarantees, r=SimonSapin
Clarify guarantees for `Box` allocation

This basically says `Box` does the obvious things for its allocations.

See also: https://users.rust-lang.org/t/alloc-crate-guarantees/24981

This may require a T-libs FCP? Not sure.

r? @sfackler
2019-02-24 05:55:57 +01:00
Mazdak Farrokhzad
ae646687e0
Rollup merge of #57364 - hdhoang:33418_negative_bounds, r=estebank
Improve parsing diagnostic for negative supertrait bounds

closes #33418

r? @estebank
2019-02-24 05:55:55 +01:00
bors
7cb3ee453b Auto merge of #58304 - gnzlbg:simd_saturated, r=nagisa
Add generic simd saturated add/sub intrinsics

r? @eddyb
2019-02-24 04:16:12 +00:00
kenta7777
423ae56943 reduce a code repetition like (n << amt) >> amt 2019-02-24 12:55:14 +09:00
memoryruins
5d1f100988 Add unstable option to ignore should_panic tests. 2019-02-23 21:07:04 -05:00
Oliver Middleton
e7296fd1c4
Fix error index E0370 doctests on 32 bit platforms 2019-02-24 01:24:31 +00:00
bors
f573049729 Auto merge of #58232 - ljedrz:HirIdification_continued, r=Zoxc
HirId-ify intravisit

A big step towards https://github.com/rust-lang/rust/pull/57578.

This affects mostly `hir::{collector, intravisit}` and `rustc::lint`.
2019-02-24 00:24:16 +00:00
kenta7777
46f1cc69db reduce miri code repetition like (n << amt) >> amt 2019-02-24 08:59:19 +09:00
Marcel Hellwig
6464a0baf9
replace deprecated rustfmt_skip with rustfmt::skip 2019-02-23 22:40:56 +01:00
Andy Russell
1536852b42
merge early and late passes into single struct 2019-02-23 15:10:56 -05:00
Andy Russell
906ec8acce
move collapse and unindent docs passes earlier 2019-02-23 14:53:51 -05:00
bors
aadbc459bd Auto merge of #57051 - Eijebong:parking_lot, r=nikomatsakis
Update parking_lot to 0.7

Unfortunately this'll dupe parking_lot until the data_structures crate
is published and be updated in rls in conjunction with crossbeam-channel
2019-02-23 19:46:10 +00:00
varkor
890ef48eb9 Fix an indexing error when using x.py help 2019-02-23 18:57:25 +00:00
Trevor Spiteri
aa0fa752c4 fix build for Rust 2018 now that #58100 has been merged 2019-02-23 18:02:40 +01:00
Trevor Spiteri
bde4d1945c rustdoc: support methods on primitives in intra-doc links 2019-02-23 18:01:26 +01:00
bors
02a4e27254 Auto merge of #58661 - ehuss:update-cargo, r=alexcrichton
Update cargo

5 commits in b33ce7fc9092962b0657b4c25354984b5e5c47e4..5c6aa46e6f28661270979696e7b4c2f0dff8628f
2019-02-19 18:42:50 +0000 to 2019-02-22 19:32:35 +0000
- convert unused doc comments to regular comments (rust-lang/cargo#6692)
- Add more about system library on whether to keep Cargo.lock (rust-lang/cargo#6685)
- Warn when excluding non-existing packages (rust-lang/cargo#6679)
- Incremental profile cleanup. (rust-lang/cargo#6688)
- Various cosmetic improvements (rust-lang/cargo#6687)
2019-02-23 17:00:07 +00:00
gnzlbg
94aa74004e Use E0724 instead of E0723 as an error code 2019-02-23 16:24:14 +01:00
gnzlbg
fcc0b3e398 Fix attribute check 2019-02-23 15:48:40 +01:00
gnzlbg
76403e5742 Use pattern to match attributes 2019-02-23 15:48:40 +01:00
gnzlbg
52ba07dbe6 Correct error message 2019-02-23 15:48:40 +01:00
gnzlbg
c4b46ace55 Implement ffi_returns_twice attribute 2019-02-23 15:48:40 +01:00
Matthew Jasper
7d01aa8a48 Type check coercions to pointer types 2019-02-23 14:25:03 +00:00
bors
7f19f161f2 Auto merge of #58669 - Centril:rollup, r=Centril
Rollup of 16 pull requests

Successful merges:

 - #58100 (Transition librustdoc to Rust 2018)
 - #58122 (RangeInclusive internal iteration performance improvement.)
 - #58199 (Add better error message for partial move)
 - #58227 (Updated RELEASES.md for 1.33.0)
 - #58353 (Check the Self-type of inherent associated constants)
 - #58453 (SGX target: fix panic = abort)
 - #58476 (Remove `LazyTokenStream`.)
 - #58526 (Special suggestion for illegal unicode curly quote pairs)
 - #58595 (Turn duration consts into associated consts)
 - #58609 (Allow Self::Module to be mutated.)
 - #58628 (Optimise vec![false; N] to zero-alloc)
 - #58643 (Don't generate minification variables if minification disabled)
 - #58648 (Update tests to account for cross-platform testing and miri.)
 - #58654 (Do not underflow after resetting unmatched braces count)
 - #58658 (Add expected/provided byte alignments to validation error message)
 - #58667 (Reduce Miri-related Code Repetition `like (n << amt) >> amt`)

Failed merges:

r? @ghost
2019-02-23 14:14:04 +00:00
bors
bcfb5e8ac3 Auto merge of #58655 - kennytm:download-docker-cache-with-timeout, r=alexcrichton
Added a connection timeout and speed threshold when downloading the Docker cache

This is an attempt to fix one possible cause of #56112. Similar to #52846, this changed the download docker-cache command to fail if it cannot connect or falls below 10 bytes/s after 30 seconds, so it could be retried sooner.
2019-02-23 11:32:10 +00:00
Paul Dicker
089524c31a Correct OpenOptions::security_qos_flags documentation 2019-02-23 12:17:48 +01:00
Wim Looman
61097bce0d Add debug-info to access variables from generator state 2019-02-23 12:13:39 +01:00
Paul Dicker
1a944b0d5b Remove pub(crate) from stderr_raw 2019-02-23 12:11:10 +01:00
Mazdak Farrokhzad
a36d1b9301
Rollup merge of #58667 - kenta7777:reduce-mir-code-repetition, r=petrochenkov
Reduce Miri-related Code Repetition `like (n << amt) >> amt`

This Pull Request fixes a part of [#49937](https://github.com/rust-lang/rust/issues/49937).
2019-02-23 09:25:39 +01:00
Mazdak Farrokhzad
d038fb2a88
Rollup merge of #58658 - pmccarter:align_msg, r=matthewjasper
Add expected/provided byte alignments to validation error message

Fixes #58617
2019-02-23 09:25:37 +01:00
Mazdak Farrokhzad
2db0e489bc
Rollup merge of #58654 - estebank:underflow, r=nikomatsakis
Do not underflow after resetting unmatched braces count

Fix #58638.

r? @oli-obk
2019-02-23 09:25:36 +01:00
Mazdak Farrokhzad
c2ad75e364
Rollup merge of #58648 - pnkfelix:issue-23926-update-tests, r=nikomatsakis
Update tests to account for cross-platform testing and miri.

Fix #23926
2019-02-23 09:25:34 +01:00
Mazdak Farrokhzad
69cb908849
Rollup merge of #58643 - GuillaumeGomez:extra-variables, r=Manishearth
Don't generate minification variables if minification disabled

If the minification is disabled, there is no sense having those variables.

r? @QuietMisdreavus
2019-02-23 09:25:33 +01:00
Mazdak Farrokhzad
93bfa92a3d
Rollup merge of #58628 - RReverser:optimise-vec-false, r=oli-obk
Optimise vec![false; N] to zero-alloc

Nowadays booleans have a well-defined representation, so there is no reason not to optimise their allocation.
2019-02-23 09:25:32 +01:00
Mazdak Farrokhzad
8ccda2438e
Rollup merge of #58609 - gabi-250:mutable-refs, r=oli-obk
Allow Self::Module to be mutated.

This only changes `&Self::Module` to `&mut Self::Module` in a couple of places.

`codegen_allocator` and `write_metadata` from `ExtraBackendMethods` mutate the underlying LLVM module. As such, it makes sense for these two functions to receive a mutable reference to the module (as opposed to an immutable one).

I am trying to implement `codegen_allocator` for my backend, and I need to be able to mutate `Self::Module`:
f66e4697ae/src/librustc_codegen_ssa/traits/backend.rs (L41)
Modifying the module in `codegen_allocator`/`write_metadata` is not a problem for the LLVM backend, because [ModuleLlvm](https://github.com/rust-lang/rust/blob/master/src/librustc_codegen_llvm/lib.rs#L357) contains a raw pointer to the underlying LLVM module, so it can easily be mutated through FFI calls.

I am trying to avoid interior mutability and `unsafe` as much as I can. What do you think? Does this change make sense, or is there a reason why this should stay the way it is?
2019-02-23 09:25:30 +01:00
Mazdak Farrokhzad
73e661a0a5
Rollup merge of #58595 - stjepang:make-duration-consts-associated, r=oli-obk
Turn duration consts into associated consts

As suggested in https://github.com/rust-lang/rust/issues/57391#issuecomment-459658236, I'm moving `Duration` constants (`SECOND`, `MILLISECOND` and so on; currently behind unstable `duration_constants` feature) into the `impl Duration` block.

cc @frewsxcv @SimonSapin
2019-02-23 09:25:29 +01:00
Mazdak Farrokhzad
18dd2d2fbe
Rollup merge of #58526 - pmccarter:master, r=estebank
Special suggestion for illegal unicode curly quote pairs

Fixes #58436

Did not end up expanding the error message span to include the full string literal since I figured the start of the token was the issue, while the help suggestion span would include up to the closing quotation mark.

The look ahead logic does not affect the reader position, not sure if that is an issue (if eg it should still continue to parse after the closing quote without erroring out).
2019-02-23 09:25:27 +01:00
Mazdak Farrokhzad
585d4d29d9
Rollup merge of #58476 - nnethercote:rm-LazyTokenStream, r=petrochenkov
Remove `LazyTokenStream`.

`LazyTokenStream` was added in #40939. Perhaps it was an effective optimization then, but no longer. This PR removes it, making the code both simpler and faster.

r? @alexcrichton
2019-02-23 09:25:26 +01:00
Mazdak Farrokhzad
4f99061874
Rollup merge of #58453 - jethrogb:jb/sgx-panic-abort, r=nagisa
SGX target: fix panic = abort

What is the difference between `no_mangle` and `rustc_std_internal_symbol`?
2019-02-23 09:25:24 +01:00
Mazdak Farrokhzad
3688643293
Rollup merge of #58353 - matthewjasper:typeck-pattern-constants, r=arielb1
Check the Self-type of inherent associated constants

r? @arielb1
2019-02-23 09:25:23 +01:00
Mazdak Farrokhzad
abd6f503fe
Rollup merge of #58227 - Aaronepower:master, r=Centril
Updated RELEASES.md for 1.33.0

[Rendered](https://github.com/Aaronepower/rust/blob/master/RELEASES.md)

r? @Mark-Simulacrum

cc @rust-lang/release
2019-02-23 09:25:19 +01:00
Mazdak Farrokhzad
1d6657dd0a
Rollup merge of #58199 - clintfred:partial-move-err-msg, r=estebank
Add better error message for partial move

closes #56657

r? @davidtwco
2019-02-23 09:25:17 +01:00
Mazdak Farrokhzad
f19bec89d7
Rollup merge of #58122 - matthieu-m:range_incl_perf, r=dtolnay
RangeInclusive internal iteration performance improvement.

Specialize `Iterator::try_fold` and `DoubleEndedIterator::try_rfold` to improve code generation in all internal iteration scenarios.

This changes brings the performance of internal iteration with `RangeInclusive` on par with the performance of iteration with `Range`:

 - Single conditional jump in hot loop,
 - Unrolling and vectorization,
 - And even Closed Form substitution.

Unfortunately, it only applies to internal iteration. Despite various attempts at stream-lining the implementation of `next` and `next_back`, LLVM has stubbornly refused to optimize external iteration appropriately, leaving me with a choice between:

 - The current implementation, for which Closed Form substitution is performed, but which uses 2 conditional jumps in the hot loop when optimization fail.
 - An implementation using a `is_done` boolean, which uses 1 conditional jump in the hot loop when optimization fail, allowing unrolling and vectorization, but for which Closed Form substitution fails.

In the absence of any conclusive evidence as to which usecase matters most, and with no assurance that the lack of Closed Form substitution is not indicative of other optimizations being foiled, there is no way
to pick one implementation over the other, and thus I defer to the statu quo as far as `next` and `next_back` are concerned.
2019-02-23 09:25:12 +01:00
Mazdak Farrokhzad
c49da5bfe5
Rollup merge of #58100 - h-michael:librustdoc-2018, r=Centril
Transition librustdoc to Rust 2018

#58099
2019-02-23 09:25:11 +01:00
Hirokazu Hata
1fe87df104 Fix tidy check errors 2019-02-23 17:02:57 +09:00
Hirokazu Hata
1932d7a52d Transition librustdoc to 2018 edition 2019-02-23 16:40:07 +09:00
kenta7777
42d5cf868c reduce an mir code repetition like (n << amt) >> amt 2019-02-23 10:07:09 +09:00
Hoàng Đức Hiếu
7cfddfb4e4 Improve parsing diagnostic for negative supertrait bounds 2019-02-23 07:58:16 +07:00
Patrick McCarter
d0c110f2c6 #58658 bless after line split for tidy 2019-02-22 19:23:03 -05:00