bors [Fri, 22 Mar 2019 08:06:48 +0000 (08:06 +0000)]
Auto merge of #58995 - Centril:refactor-build-manifest, r=alexcrichton
Refactor tools/build-mainfest
I saw some duplication in https://github.com/rust-lang/rust/pull/58990 and got an itch... Will likely need to be rebased when that lands. Hopefully the PR should have zero semantic changes...
bors [Thu, 21 Mar 2019 23:42:41 +0000 (23:42 +0000)]
Auto merge of #58981 - estebank:elseless-if, r=davidtwco
Point at coercion reason for `if` expressions without else clause if caused by return type
```
error[E0317]: if may be missing an else clause
--> $DIR/if-without-else-as-fn-expr.rs:2:5
|
LL | fn foo(bar: usize) -> usize {
| ----- found `usize` because of this return type
LL | / if bar % 5 == 0 {
LL | | return 3;
LL | | }
| |_____^ expected (), found usize
|
= note: expected type `()`
found type `usize`
= note: `if` expressions without `else` must evaluate to `()`
```
This adds two new, provided methods to the `io::Seek` trait:
- `fn stream_len(&mut self) -> Result<u64>`
- `fn stream_position(&mut self) -> Result<u64>`
Both are added for convenience and to improve readability in user code. Reading `file.stream_len()` is much better than to manually seek two or three times. Similarly, `file.stream_position()` is much more clear than `file.seek(SeekFrom::Current(0))`.
You can find prior discussions [in this internals thread](https://internals.rust-lang.org/t/pre-rfc-idea-extend-io-seek-with-convenience-methods-with-e-g-stream-len/9262). I think I addressed all concerns in that thread.
I already wrote three RFCs to add a small new API to libstd but I noticed that many public changes to libstd happen without an RFC. So I figured I can try opening a PR directly without going through RFCs first. After all, we do have rfcbot here too. If you think this change is too big to merge without an RFC, I can still close this PR and write an RFC.
bors [Thu, 21 Mar 2019 05:41:13 +0000 (05:41 +0000)]
Auto merge of #58913 - Milack27:patch_buf_reader, r=joshtriplett
Add new test case for possible bug in BufReader
When reading a large chunk from a BufReader, if all the bytes from the buffer have been already consumed, the internal buffer is bypassed entirely. However, it is not invalidated, and it's possible to access its contents using the `seek_relative` method, because it tries to reuse the existing buffer.
bors [Thu, 21 Mar 2019 02:18:27 +0000 (02:18 +0000)]
Auto merge of #58902 - matthewjasper:generator-cleanup-blocks, r=davidtwco
Fixes for the generator transform
* Moves cleanup annotations in pretty printed MIR so that they can be tested
* Correctly determines which drops are in cleanup blocks when elaborating generator drops
* Use the correct state for poisoning a generator
bors [Wed, 20 Mar 2019 23:02:17 +0000 (23:02 +0000)]
Auto merge of #58897 - Mark-Simulacrum:tool-rework, r=alexcrichton
Rework how bootstrap tools are built
This makes bootstrap tools buildable and testable in stage 0 with the downloaded bootstrap compiler, futhermore, it makes it such that they cannot be built in any other stage.
Notably, this will also mean that compiletest may need to wait a cycle before it can use changes to `libtest`, as it no longer depends on the in-tree libtest.
bors [Wed, 20 Mar 2019 17:54:27 +0000 (17:54 +0000)]
Auto merge of #58791 - denzp:asm-compile-tests, r=alexcrichton
Introduce assembly tests suite
The change introduces a new test suite - **Assembly** tests. The motivation behind this is an ability to perform end-to-end codegen testing with LLVM backend. Turned out, NVPTX backend sometimes missing common Rust features (`i128` and libcalls in the past, and still full atomics support) due to different reasons.
Prior to this change, basic NVPTX assembly tests were implemented within `run-make` suite. Now, it's easier to write additional and maintain existing tests for the target.
cc @gnzlbg @peterhj
cc @eddyb I adjusted mangling scheme expectation, so there is no need to change the tests for #57967
bors [Wed, 20 Mar 2019 14:42:47 +0000 (14:42 +0000)]
Auto merge of #57018 - dcreager:redundant-linker, r=alexcrichton
Keep last redundant linker flag, not first
When a library (L1) is passed to the linker multiple times, this is sometimes purposeful: there might be several other libraries in the linker command (L2 and L3) that all depend on L1. You'd end up with a (simplified) linker command that looks like:
```
-l2 -l1 -l3 -l1
```
With the previous behavior, when rustc encountered a redundant library, it would keep the first instance, and remove the later ones, resulting in:
```
-l2 -l1 -l3
```
This can cause a linker error, because on some platforms (e.g. Linux), the linker will only include symbols from L1 that are needed *at the point it's referenced in the command line*. So if L3 depends on additional symbols from L1, which aren't needed by L2, the linker won't know to include them, and you'll end up with "undefined symbols" errors.
A better behavior is to keep the *last* instance of the library:
```
-l2 -l3 -l1
```
This ensures that all "downstream" libraries have been included in the linker command before the "upstream" library is referenced.
bors [Wed, 20 Mar 2019 05:01:38 +0000 (05:01 +0000)]
Auto merge of #59298 - kennytm:rollup, r=kennytm
Rollup of 5 pull requests (all of which changes `src/ci/docker`)
Successful merges:
- #58986 ([CI] Update binutils for powerpc64 and powerpc64le)
- #59038 (Track embedded-book in the toolstate)
- #59055 (CI: Set job names.)
- #59253 (Calculate Docker cache hash precisely from Dockerfile's dependencies)
- #59257 (Update CI configuration for building Redox libraries)
kennytm [Tue, 19 Mar 2019 20:34:06 +0000 (04:34 +0800)]
Rollup merge of #59253 - kennytm:precise-docker-cache-hash, r=pietroalbini
Calculate Docker cache hash precisely from Dockerfile's dependencies
#58549 changed the Docker cache calculation to include every file under `src/ci/docker`, so that when files under `dist-x86_64-linux` is changed, its dependent image `dist-i686-linux` will also be rebuilt.
However, this ultraconservative solution caused the `dist-i686-linux` to be rebuilt every time an irrelevant Dockerfile (e.g. the PowerPC ones) is changed, which increases the building time beyond 3 hours and forcing a spurious but expected failure.
This commit instead parses the Dockerfile itself and look for the actual dependencies. The scripts needs to be copied into the Docker image, which must be done with the COPY command, so we just need to find all lines with a COPY command and add the source file into the hash calculator.
Note: this script only handles single-lined COPY command in the form `COPY src1 src2 src3 dst`, since these are the only variant used inside this repository.
kennytm [Tue, 19 Mar 2019 20:34:02 +0000 (04:34 +0800)]
Rollup merge of #59038 - kennytm:track-embedded-book, r=oli-obk
Track embedded-book in the toolstate
The embedded book was tested in the tools job but the test result was never published. This PR adds maintainer information of embedded-book. This PR also requires the next update to embedded-book to pass the all tests, currently its state is test-fail.
rust-lang-nursery/rust-toolstate#10 should be merged before this PR.
kennytm [Tue, 19 Mar 2019 20:34:01 +0000 (04:34 +0800)]
Rollup merge of #58986 - cuviper:ppc64-binutils, r=alexcrichton
[CI] Update binutils for powerpc64 and powerpc64le
Cargo powerpc64 and powerpc64le are seeing `SIGILL` crashes in openssl,
which was found to be a linking problem, fixed by newer binutils. See
<https://github.com/rust-lang/rust/issues/57345#issuecomment-462094555>
For powerpc64 we're using crosstool-ng, which doesn't offer a newer
binutils version, but we can just compile it separately. On powerpc64le
we're already building binutils. Both are now updated to binutils 2.32.
bors [Tue, 19 Mar 2019 18:30:21 +0000 (18:30 +0000)]
Auto merge of #57842 - gnzlbg:extract_libtest, r=gnzlbg
Move libtest out of rust-lang/rust
This is a first step towards a number of goals explained in this internals post: https://internals.rust-lang.org/t/a-path-forward-towards-re-usable-libtest-functionality-custom-test-frameworks-and-a-stable-bench-macro
This PR does not fully remove libtest from rust-lang/rust, we keep a shim that imports and re-exports the external libtest, and adds the proc_macro dependency, etc.
bors [Tue, 19 Mar 2019 14:30:42 +0000 (14:30 +0000)]
Auto merge of #59293 - Centril:rollup, r=Centril
Rollup of 11 pull requests
Successful merges:
- #56348 (Add todo!() macro)
- #57729 (extra testing of how NLL handles wildcard type `_`)
- #57847 (dbg!() without parameters)
- #58778 (Implement ExactSizeIterator for ToLowercase and ToUppercase)
- #58812 (Clarify distinction between floor() and trunc())
- #58939 (Fix a tiny error in documentation of std::pin.)
- #59116 (Be more discerning on when to attempt suggesting a comma in a macro invocation)
- #59252 (add self to mailmap)
- #59275 (Replaced self-reflective explicit types with clearer `Self` or `Self::…` in stdlib docs)
- #59280 (Stabilize refcell_map_split feature)
- #59290 (Run branch cleanup after copy prop)
Rollup merge of #59275 - regexident:docs-self, r=joshtriplett
Replaced self-reflective explicit types with clearer `Self` or `Self::…` in stdlib docs
Many docs examples use explicit types instead of the semantically more clear `Self`/`Self::…` aliases.
By using the latter it's clear that the value's type depends on either `Self`, or an associated type of `Self`, instead of some constant type. It's also more consistent (and I'd argue correct), as the current docs aren't really consistent in this, as can be seen from the diff.
This is a best effort PR, as I was basically going through the docs manually, looking for offending examples. I'm sure I missed a few. Gotta start somewhere.
Rollup merge of #57729 - pnkfelix:issue-55748-pat-types-are-constraints-on-bindings-too, r=nikomatsakis
extra testing of how NLL handles wildcard type `_`
test that wildcard type `_` is not duplicated by `type Foo<X> = (X, X);` and potentially instantiated at different types when used in type ascriptions in let bindings.
(NLL's handling of this for the type ascription *expression form* is currently broken, or at least differs from what AST-borrowck does. I'll file a separate bug about that. Its not something critical to address since that expression is guarded by `#![feature(type_ascription)]`.)
Rollup merge of #56348 - matklad:todo-macro, r=withoutboats
Add todo!() macro
The primary use-case of `todo!()` macro is to be a much easier to type
alternative to `unimplemented!()` macro.
EDIT: hide unpopular proposal about re-purposing unimplemented
<details>
However, instead of just replacing `unimplemented!()`, it gives it a
more nuanced meaning: a thing which is intentionally left
unimplemented and which should not be called at runtime. Usually,
you'd like to prevent such cases statically, but sometimes you, for
example, have to implement a trait only some methods of which are
applicable. There are examples in the wild of code doing this thing,
and in this case, the current message of `unimplemented`, "not *yet*
implemented" is slightly misleading.
With the addition of TODO, you have three nuanced choices for a
`!`-returning macro (in addition to a good-old panic we all love):
* todo!()
* unreachable!()
* unimplemented!()
Here's a rough guideline what each one means:
- `todo`: use it during development, as a "hole" or placeholder. It
might be a good idea to add a pre-commit hook which checks that
`todo` is not accidentally committed.
- `unreachable!()`: use it when your code can statically guarantee
that some situation can not happen. If you use a library and hit
`unreachable!()` in the library's code, it's definitely a bug in the
library. It's OK to have `unreachable!()` in the code base,
although, if possible, it's better to replace it with
compiler-verified exhaustive checks.
- `unimplemented!()`: use it when the type checker forces you to
handle some situation, but there's a contract that a callee must not
actually call the code. If you use a library and hit
`unimplemented!()`, it's probably a bug in your code, though
it *could* be a bug in the library (or library docs) as well. It is
ok-ish to see an `unimplemented!()` in real code, but it usually
signifies a clunky, eyebrow-rising API.
</details>
bors [Mon, 18 Mar 2019 02:56:35 +0000 (02:56 +0000)]
Auto merge of #58824 - euclio:intra-link-ambiguity, r=petrochenkov
overhaul intra-doc-link ambiguity warning
Fixes #52784.
- Makes the warning part of the `intra_doc_link_resolution_failure`
lint.
- Tightens the span to just the ambiguous link.
- Reports ambiguities across all three namespaces.
- Uses structured suggestions for disambiguation.
- Adds a test for the warnings.
bors [Sun, 17 Mar 2019 23:51:18 +0000 (23:51 +0000)]
Auto merge of #59250 - bovinebuddha:filter_ui_revision_tests, r=petrochenkov
Filter ui revision tests
Updates UI test output filtering to also filter away test annotations for revisions:
Previously filtered: //~ ERROR [XXXX]
Now also filters: //[revision]~ ERROR [XXXX]
I reckon, if we have the one, we should have the other for consistency, its lack was probably an oversight (the existence of revision testing is not really well documented...)
kennytm [Sun, 17 Mar 2019 11:39:00 +0000 (19:39 +0800)]
Calculate Docker cache hash precisely from Dockerfile's dependencies
`src/ci/docker`, so that when files under `dist-x86_64-linux` is changed,
its dependent image `dist-i686-linux` will also be rebuilt.
However, this ultraconservative solution caused the `dist-i686-linux` to
be rebuilt every time an irrelevant Dockerfile (e.g. the PowerPC ones) is
changed, which increases the building time beyond 3 hours and forcing
a spurious but expected failure.
This commit instead parses the Dockerfile itself and look for the actual
dependencies. The scripts needs to be copied into the Docker image, which
must be done with the COPY command, so we just need to find all lines with
a COPY command and add the source file into the hash calculator.
Note: this script only handles single-lined COPY command in the form
`COPY src1 src2 src3 dst`, since these are the only variant used inside
this repository.
bors [Sun, 17 Mar 2019 11:17:03 +0000 (11:17 +0000)]
Auto merge of #59178 - oli-obk:lazy_const, r=eddyb
Revert the `LazyConst` PR
The introduction of `LazyConst` did not actually achieve the code simplicity improvements that were the main reason it was introduced. Especially in the presence of const generics, the differences between the "levels of evaluatedness" of a constant become less clear. As it can be seen by the changes in this PR, further simplifications were possible by folding `LazyConst` back into `ConstValue`. We have been able to keep all the advantages gained during the `LazyConst` refactoring (like `const_eval` not returning an interned value, thus making all the `match` code simpler and more performant).
bors [Sat, 16 Mar 2019 20:48:40 +0000 (20:48 +0000)]
Auto merge of #58899 - petrochenkov:derval2, r=estebank
Do not accidentally treat multi-segment meta-items as single-segment
Fixes https://github.com/rust-lang/rust/issues/55168 and many other regressions from https://github.com/rust-lang/rust/pull/50030
Basically, attributes like `#[any::prefix::foo]` were commonly interpreted as `#[foo]` due to `name()` successfully returning the last segment (this applies to nested things as well `#[attr(any::prefix::foo)]`).
bors [Sat, 16 Mar 2019 14:46:43 +0000 (14:46 +0000)]
Auto merge of #59226 - kennytm:rollup, r=kennytm
Rollup of 37 pull requests
Successful merges:
- #58854 (appveyor: Use VS2017 for all our images)
- #58855 (std: Spin for a global malloc lock on wasm32)
- #58873 (Fix "Auto-hide item methods documentation" setting)
- #58901 (Change `std::fs::copy` to use `copyfile` on MacOS and iOS)
- #58933 (Move alloc::prelude::* to alloc::prelude::v1, make alloc a subset of std)
- #58938 (core: ensure VaList passes improper_ctypes lint)
- #58941 (MIPS: add r6 support)
- #58949 (SGX target: Expose thread id function in os module)
- #58959 (Add release notes for PR #56243)
- #58976 (Default to integrated `rust-lld` linker for UEFI targets)
- #59009 (Fix SGX implementations of read/write_vectored.)
- #59025 (Fix generic argument lookup for Self)
- #59036 (Fix ICE in MIR pretty printing)
- #59037 (Avoid some common false positives in intra doc link checking)
- #59072 (we can now skip should_panic tests with the libtest harness)
- #59079 (add suggestions to invalid macro item error)
- #59082 (A few improvements to comments in user-facing crates)
- #59102 (Consistent naming for duration_float methods and additional f32 methods)
- #59118 (rustc: fix ICE when trait alias has bare Self)
- #59139 (Unregress using scalar unions in constants.)
- #59146 (Suggest return lifetime when there's only one named lifetime)
- #59147 (Make std time tests more robust for platform differences)
- #59152 (Stabilize Range*::contains.)
- #59156 ([wg-async-await] Add regression test for #55809.)
- #59158 (Revert "Don't generate minification variable if minification disabled")
- #59169 (Add `-Z allow_features=...` flag)
- #59173 (bootstrap: Default to a sensible llvm-suffix.)
- #59175 (Don't run test launching `echo` since that doesn't exist on Windows)
- #59180 (Use try blocks in rustc_codegen_ssa)
- #59185 (No old chestnuts in iter::repeat docs)
- #59201 (Remove restriction on isize/usize in repr(simd))
- #59204 (Output diagnostic information for rustdoc)
- #59206 (Improved test output)
- #59208 (Reduce a Code Repetition Related to Bit Operation)
- #59212 (Add x86_64 musl host to the manifest)
- #59221 (Option and Result: Add references to documentation of as_ref and as_mut)
- #59231 (Stabilize Option::copied)
kennytm [Sat, 16 Mar 2019 06:57:05 +0000 (14:57 +0800)]
Rollup merge of #59208 - kenta7777:reduce-code-repetition, r=oli-obk
Reduce a Code Repetition Related to Bit Operation
This PR is related to [#49937](https://github.com/rust-lang/rust/issues/49937).
Should I do more commits about [`FIXME(49937)`](https://github.com/rust-lang/rust/search?q=FIXME%2849937%29&unscoped_q=FIXME%2849937%29) in this PR?