bors [Sat, 20 Oct 2018 11:22:48 +0000 (11:22 +0000)]
Auto merge of #55014 - ljedrz:lazyboye_unwraps, r=matthewjasper
Prefer unwrap_or_else to unwrap_or in case of function calls/allocations
The contents of `unwrap_or` are evaluated eagerly, so it's not a good pick in case of function calls and allocations. This PR also changes a few `unwrap_or`s with `unwrap_or_default`.
An added bonus is that in some cases this change also reveals if the object it's called on is an `Option` or a `Result` (based on whether the closure takes an argument).
David Wood [Fri, 12 Oct 2018 11:47:37 +0000 (13:47 +0200)]
Only suggest paths that exist.
In order to output a path that could actually be imported (valid and
visible), we need to handle re-exports correctly.
For example, take `std::os::unix::process::CommandExt`, this trait is
actually defined at `std::sys::unix::ext::process::CommandExt` (at time
of writing).
`std::os::unix` rexports the contents of `std::sys::unix::ext`.
`std::sys` is private so the "true" path to `CommandExt` isn't accessible.
In this case, the visible parent map will look something like this:
This is correct, as the visible parent of `std::sys::unix::ext` is in fact
`std::os`.
When printing the path to `CommandExt` and looking at the current
segment that corresponds to `std::sys::unix::ext`, we would normally
print `ext` and then go to the parent - resulting in a mangled path like
`std::os::ext::process::CommandExt`.
Instead, we must detect that there was a re-export and instead print `unix`
(which is the name `std::sys::unix::ext` was re-exported as in `std::os`).
Niko Matsakis [Wed, 17 Oct 2018 20:18:24 +0000 (16:18 -0400)]
create type ascription for any cast
Also, avoid shadowing of the `ty` variable by giving the `cast_ty` and
`var_ty` variables different names. We want to get the user-provided
type from `cast_ty.hir_id`.
bors [Fri, 19 Oct 2018 09:29:48 +0000 (09:29 +0000)]
Auto merge of #55194 - kennytm:rollup, r=kennytm
Rollup of 7 pull requests
Successful merges:
- #54300 (Updated RELEASES.md for 1.30.0)
- #55013 ([NLL] Propagate bounds from generators)
- #55071 (Fix ICE and report a human readable error)
- #55144 (Cleanup resolve)
- #55166 (Don't warn about parentheses on `match (return)`)
- #55169 (Add a `copysign` function to f32 and f64)
- #55178 (Stabilize slice::chunks_exact(), chunks_exact_mut(), rchunks(), rchunks_mut(), rchunks_exact(), rchunks_exact_mut())
kennytm [Fri, 19 Oct 2018 03:03:34 +0000 (11:03 +0800)]
Rollup merge of #55169 - raphlinus:copysign, r=joshtriplett
Add a `copysign` function to f32 and f64
This patch adds a `copysign` function to the float primitive types. It is an exceptionally useful function for writing efficient numeric code, as it often avoids branches, is auto-vectorizable, and there are efficient intrinsics for most platforms.
I think this might work as-is, as the relevant `copysign` intrinsic is already used internally for the implementation of `signum`. It's possible that an implementation might be needed in japaric/libm for portability across all platforms, in which case I'll do that also.
bors [Thu, 18 Oct 2018 18:14:52 +0000 (18:14 +0000)]
Auto merge of #54976 - davidtwco:issue-52663-special-case-closures, r=nikomatsakis
NLL lacks various special case handling of closures
Part of #52663.
Firstly, this PR extends existing handling of closures to also support generators.
Second, this PR adds the note found in the AST when a closure is invoked twice and captures a variable by-value:
```text
note: closure cannot be invoked more than once because it moves the variable `dict` out of its environment
--> $DIR/issue-42065.rs:16:29
|
LL | for (key, value) in dict {
| ^^^^
```
David Wood [Wed, 10 Oct 2018 19:56:17 +0000 (21:56 +0200)]
Extend closure special-casing for generators.
This commit extends existing special-casing of closures to highlight the
use of variables within generators that are causing the generator to
borrow them.
bors [Thu, 18 Oct 2018 12:47:31 +0000 (12:47 +0000)]
Auto merge of #54580 - sdroege:rchunks, r=SimonSapin
Add slice::rchunks(), rchunks_mut(), rchunks_exact() and rchunks_exact_mut()
These work exactly like the normal chunks iterators but start creating
chunks from the end of the slice.
----
The new iterators were motivated by a [comment](https://github.com/rust-lang/rust/issues/47115#issuecomment-424141121) by @DutchGhost.
~~~This currently includes the commits from https://github.com/rust-lang/rust/pull/54537 to not have to rename things twice or have merge conflicts. I'll force-push a new version of the branch ones those are in master.~~~
Also the stabilization tracking issue is just some number right now. I'll create the corresponding issue once this is reviewed and otherwise mergeable.
bors [Thu, 18 Oct 2018 07:02:11 +0000 (07:02 +0000)]
Auto merge of #55171 - kennytm:rollup, r=kennytm
Rollup of 18 pull requests
Successful merges:
- #54646 (improve documentation on std::thread::sleep)
- #54933 (Cleanup the rest of codegen_llvm)
- #54964 (Run both lldb and gdb tests)
- #55016 (Deduplicate some code and compile-time values around vtables)
- #55031 (Improve verify_llvm_ir config option)
- #55050 (doc std::fmt: the Python inspiration is already mentioned in precedin…)
- #55077 (rustdoc: Use dyn keyword when rendering dynamic traits)
- #55080 (Detect if access to localStorage is forbidden by the user's browser)
- #55090 (regression test for move out of borrow via pattern)
- #55102 (resolve: Do not skip extern prelude during speculative resolution)
- #55104 (Add test for #34229)
- #55111 ([Rustc Book] Explain --cfg's arguments)
- #55122 (Cleanup mir/borrowck)
- #55127 (Remove HybridBitSet::dummy)
- #55128 (Fix LLVMRustInlineAsmVerify return type mismatch)
- #55142 (miri: layout should not affect CTFE checks (outside of validation))
- #55151 (Cleanup nll)
- #55161 ([librustdoc] Disable spellcheck for search field)
kennytm [Thu, 18 Oct 2018 04:56:07 +0000 (12:56 +0800)]
Rollup merge of #55111 - Havvy:rustc-book-cfg-examples, r=GuillaumeGomez
[Rustc Book] Explain --cfg's arguments
I removed this from the reference since it's rustc specific, and noticed it wasn't well documented on the page that should document it well. It does seem to go against the grain of one line per command line flag though.
kennytm [Thu, 18 Oct 2018 02:47:36 +0000 (10:47 +0800)]
Rollup merge of #55142 - RalfJung:miri-uninhabited-enum, r=oli-obk
miri: layout should not affect CTFE checks (outside of validation)
Either the enum has no valid discriminant, then the code later will catch that; or it does, then we shouldn't error out so early (absent enforcing validity).
Interestingly, the miri test suite still passes; my guess is we don't even get here for uninhabited types?
kennytm [Thu, 18 Oct 2018 02:47:26 +0000 (10:47 +0800)]
Rollup merge of #55080 - thanatos:fix-localstorage-crash, r=GuillaumeGomez
Detect if access to localStorage is forbidden by the user's browser
If the user's cookie/persistent storage setting forbid access to `localStorage`, catch the exception and abort the access.
Currently, attempting to use the expand/contract links at the top of the page for structs/consts/etc. fails due to an unhandled error while accessing `localStorage`, if such access is forbidden, as the exception from the failed access propagates all the way out, interrupting the expand/contract. Instead, I would like to degrade gracefully; the access won't happen (the collapse/expand state won't get persisted) but the actual expanding/contracting of the item will go on to succeed.
kennytm [Thu, 18 Oct 2018 02:47:22 +0000 (10:47 +0800)]
Rollup merge of #55031 - nikic:verify_llvm_ir, r=Mark-Simulacrum
Improve verify_llvm_ir config option
LLVM IR verification has been disabled by default in #51230. However, the implementation doesn't quite match what was discussed in the discussion. This patch implements two changes:
* Make `verify_llvm_ir` influence the behavior of the compiled rustc binary, rather than just the rustc build system. That is, if `verify_llvm_ir=true`, even manual invocations of the built rustc will verify LLVM IR.
* Enable verification of LLVM IR in CI, for non-deploy and deploy-alt builds. This is similar to how LLVM assertions are handled.
Raph Levien [Thu, 18 Oct 2018 01:15:00 +0000 (18:15 -0700)]
Add a `copysign` function to f32 and f64
This patch adds a `copysign` function to the float primitive types.
It is an exceptionally useful function for writing efficient numeric
code, as it often avoids branches, is auto-vectorizable, and there
are efficient intrinsics for most platforms.
I think this might work as-is, as the relevant `copysign` intrinsic
is already used internally for the implementation of `signum`. It's
possible that an implementation might be needed in japaric/libm for
portability across all platforms, in which case I'll do that also.
bors [Wed, 17 Oct 2018 23:16:10 +0000 (23:16 +0000)]
Auto merge of #55134 - davidtwco:issue-55118, r=pnkfelix
NLL: change compare-mode=nll to use borrowck=migrate
Fixes #55118.
This PR is split into two parts:
The first commit is a minor change that fixes a flaw in the existing `borrowck=migrate` implementation whereby a lint that was promoted to an error in the AST borrow checker would result in the same lint from the NLL borrow checker being downgraded to a warning in migrate mode. This PR fixes this by ensuring lints are exempt from buffering in the NLL borrow checker.
The second commit updates `compiletest` to make the NLL compare mode use `-Z borrowck=migrate` rather than `-Z borrowck=mir`. The third commit shows all the test output changes that result from this.