Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 6 pull requests #58688

Closed
wants to merge 28 commits into from
Closed

Rollup of 6 pull requests #58688

wants to merge 28 commits into from

Conversation

Centril
Copy link
Contributor

@Centril Centril commented Feb 24, 2019

Successful merges:

Failed merges:

r? @ghost

Jethro Beekman and others added 28 commits February 13, 2019 12:51
If we add a terminating NUL to the name in the `weak!` macro, then
`fetch()` can use `CStr::from_bytes_with_nul()` instead of `CString`.
Co-Authored-By: oli-obk <github35764891676564198441@oli-obk.de>
…tebank

Improve parsing diagnostic for negative supertrait bounds

closes rust-lang#33418

r? @estebank
…=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
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`.
…hton

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 rust-lang#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.
rust-lldb: fix crash when printing empty string

Fixes rust-lang#52185.

Re-enables the pretty-std debuginfo test and tweaks the test as necessary to get it to pass again. This reveals that lldb's formatting of enums is broken (rust-lang#58492). I also removed the emoji from the test because I couldn't get the docker image's gdb to print the emoji, just octal escapes (https://github.com/rust-lang/rust/pull/53154/files#r208263904).
@Centril
Copy link
Contributor Author

Centril commented Feb 24, 2019

@bors r+ p=6

@bors
Copy link
Contributor

bors commented Feb 24, 2019

📌 Commit 7f9ee1b has been approved by Centril

@bors bors added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Feb 24, 2019
@bors
Copy link
Contributor

bors commented Feb 24, 2019

⌛ Testing commit 7f9ee1b with merge c6f9f8f399c456994fc61cd3be35feb47c056e11...

@bors
Copy link
Contributor

bors commented Feb 24, 2019

💔 Test failed - checks-travis

@bors bors added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. labels Feb 24, 2019
@rust-highfive
Copy link
Collaborator

The job dist-x86_64-musl of your PR failed on Travis (raw log). Through arcane magic we have determined that the following fragments from the build log may contain information about the problem.

Click to expand the log.
[01:06:10] test [debuginfo-both] debuginfo/vec.rs ... ignored
[01:06:10] 
[01:06:10] failures:
[01:06:10] 
[01:06:10] ---- [debuginfo-both] debuginfo/pretty-std.rs stdout ----
[01:06:10] NOTE: compiletest thinks it is using GDB without native rust support
[01:06:10] NOTE: compiletest thinks it is using GDB version 7011001
[01:06:10] 
[01:06:10] error: line not found in debugger output: $5 = Some = {8}
[01:06:10] status: exit code: 0
[01:06:10] command: "/usr/bin/gdb" "-quiet" "-batch" "-nx" "-command=/checkout/obj/build/x86_64-unknown-linux-gnu/test/debuginfo/pretty-std/pretty-std.debugger.script"
[01:06:10] ------------------------------------------
[01:06:10] GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1
[01:06:10] Copyright (C) 2016 Free Software Foundation, Inc.
[01:06:10] Copyright (C) 2016 Free Software Foundation, Inc.
[01:06:10] License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[01:06:10] This is free software: you are free to change and redistribute it.
[01:06:10] There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
[01:06:10] and "show warranty" for details.
[01:06:10] This GDB was configured as "x86_64-linux-gnu".
[01:06:10] Type "show configuration" for configuration details.
[01:06:10] For bug reporting instructions, please see:
[01:06:10] <http://www.gnu.org/software/gdb/bugs/>.
[01:06:10] Find the GDB manual and other documentation resources online at:
[01:06:10] <http://www.gnu.org/software/gdb/documentation/>.
[01:06:10] For help, type "help".
[01:06:10] Type "apropos word" to search for commands related to "word".
[01:06:10] Breakpoint 1 at 0x401b56: file /checkout/src/test/debuginfo/pretty-std.rs, line 103.
[01:06:10] 
[01:06:10] Breakpoint 1, pretty_std::main::hd868472729f88994 () at /checkout/src/test/debuginfo/pretty-std.rs:103
[01:06:10] 103     zzz(); // #break
[01:06:10] $1 = &[i32](len: 4) = {0, 1, 2, 3}
[01:06:10] $2 = Vec<u64>(len: 4, cap: 4) = {4, 5, 6, 7}
[01:06:10] $3 = "IAMA string slice!"
[01:06:10] $4 = "IAMA string!"
[01:06:10] $5 = Option<i16>
[01:06:10] $6 = Option<i64>
[01:06:10] $7 = "IAMA OS string"
[01:06:10] $8 = Option<alloc::string::String>
[01:06:10] $9 = Option<alloc::string::String>
[01:06:10] $10 = ""
[01:06:10] A debugging session is active.
[01:06:10] 
[01:06:10]  Inferior 1 [process 16634] will be killed.
[01:06:10] 
[01:06:10] Quit anyway? (y or n) [answered Y; input not from terminal]
[01:06:10] ------------------------------------------
[01:06:10] stderr:
[01:06:10] ------------------------------------------
[01:06:10] 
---
[01:06:10] test result: FAILED. 74 passed; 1 failed; 44 ignored; 0 measured; 0 filtered out
[01:06:10] 
[01:06:10] 
[01:06:10] 
[01:06:10] command did not execute successfully: "/checkout/obj/build/x86_64-unknown-linux-gnu/stage0-tools-bin/compiletest" "--compile-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib" "--run-lib-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-musl/lib" "--rustc-path" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "--src-base" "/checkout/src/test/debuginfo" "--build-base" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/debuginfo" "--stage-id" "stage2-x86_64-unknown-linux-musl" "--mode" "debuginfo-both" "--target" "x86_64-unknown-linux-musl" "--host" "x86_64-unknown-linux-gnu" "--llvm-filecheck" "/checkout/obj/build/x86_64-unknown-linux-gnu/llvm/build/bin/FileCheck" "--linker" "/musl-x86_64/bin/musl-gcc" "--host-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--target-rustcflags" "-Crpath -O -Zunstable-options  -Lnative=/checkout/obj/build/x86_64-unknown-linux-musl/native/rust-test-helpers" "--docck-python" "/usr/bin/python2.7" "--lldb-python" "/usr/bin/python2.7" "--gdb" "/usr/bin/gdb" "--llvm-version" "8.0.0\n" "--cc" "" "--cxx" "" "--cflags" "" "--llvm-components" "" "--llvm-cxxflags" "" "--adb-path" "adb" "--adb-test-dir" "/data/tmp/work" "--android-cross-path" "" "--color" "always"
[01:06:10] 
[01:06:10] 
[01:06:10] failed to run: /checkout/obj/build/bootstrap/debug/bootstrap test --target x86_64-unknown-linux-musl
[01:06:10] Build completed unsuccessfully in 1:02:46
---
travis_time:end:0bc44bcf:start=1550981753556639947,finish=1550981753584075953,duration=27436006
travis_fold:end:after_failure.3
travis_fold:start:after_failure.4
travis_time:start:14baa087
$ ln -s . checkout && for CORE in obj/cores/core.*; do EXE=$(echo $CORE | sed 's|obj/cores/core\.[0-9]*\.!checkout!\(.*\)|\1|;y|!|/|'); if [ -f "$EXE" ]; then printf travis_fold":start:crashlog\n\033[31;1m%s\033[0m\n" "$CORE"; gdb --batch -q -c "$CORE" "$EXE" -iex 'set auto-load off' -iex 'dir src/' -iex 'set sysroot .' -ex bt -ex q; echo travis_fold":"end:crashlog; fi; done || true
travis_fold:end:after_failure.4
travis_fold:start:after_failure.5
travis_time:start:0250215f
travis_time:start:0250215f
$ cat ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers || true
cat: ./obj/build/x86_64-unknown-linux-gnu/native/asan/build/lib/asan/clang_rt.asan-dynamic-i386.vers: No such file or directory
travis_fold:end:after_failure.5
travis_fold:start:after_failure.6
travis_time:start:01935978
$ dmesg | grep -i kill

I'm a bot! I can only do what humans tell me to, so if this was not helpful or you have suggestions for improvements, please ping or otherwise contact @TimNN. (Feature Requests)

@Centril Centril closed this Feb 24, 2019
@Centril Centril deleted the rollup branch February 24, 2019 04:48
@Centril Centril added the rollup A PR which is a rollup label Oct 24, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
rollup A PR which is a rollup S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants