Rollup merge of #58200 - RalfJung:str-as-mut-ptr, r=SimonSapin
fix str mutating through a ptr derived from &self
Found by Miri: In `get_unchecked_mut` (also used by the checked variants internally) uses `str::as_ptr` to create a mutable reference, but `as_ptr` takes `&self`. This means the mutable references we return here got created from a shared reference, which violates the shared-references-are-read-only discipline!
For this by using a newly introduced `as_mut_ptr` instead.
Rollup merge of #58057 - michaelwoerister:stabilize-xlto, r=alexcrichton
Stabilize linker-plugin based LTO (aka cross-language LTO)
This PR stabilizes [linker plugin based LTO](https://github.com/rust-lang/rust/issues/49879), also known as "cross-language LTO" because it allows for doing inlining and other optimizations across language boundaries in mixed Rust/C/C++ projects.
As described in the tracking issue, it works by making `rustc` emit LLVM bitcode instead of machine code, the same as `clang` does. A linker with the proper plugin (like LLD) can then run (Thin)LTO across all modules.
The feature has been implemented over a number of pull requests and there are various [codegen](https://github.com/rust-lang/rust/blob/master/src/test/codegen/no-dllimport-w-cross-lang-lto.rs) and [run](https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps/cross-lang-lto-clang)-[make](https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps/cross-lang-lto-upstream-rlibs) [tests](https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps/cross-lang-lto) that make sure that it keeps working.
The PR makes the feature available under the `-C linker-plugin-lto` flag. As discussed in the tracking issue it is not cross-language specific and also not LLD specific. `-C linker-plugin-lto` is descriptive of what it does. If someone has a better name, let me know `:)`
Rollup merge of #57815 - dotdash:asserts, r=sfackler
Speed up the fast path for assert_eq! and assert_ne!
Currently, the panic!() calls directly borrow the value bindings. This
causes those bindings to always be initialized, i.e. they're initialized
even before the values are even compared. This causes noticeable
overhead in what should be a really cheap operation.
By performing a reborrow of the value in the call to panic!(), we allow
LLVM to optimize that code, so that the extra borrow only happens in the
error case.
We could achieve the same result by dereferencing the values passed to
panic!(), as the format machinery borrows them anyway, but this causes
assertions to fail to compile if one of the values is unsized, i.e. it
would be a breaking change.
bors [Tue, 12 Feb 2019 19:09:24 +0000 (19:09 +0000)]
Auto merge of #58341 - alexreg:cosmetic-2-doc-comments, r=steveklabnik
Cosmetic improvements to doc comments
This has been factored out from https://github.com/rust-lang/rust/pull/58036 to only include changes to documentation comments (throughout the rustc codebase).
r? @steveklabnik
Once you're happy with this, maybe we could get it through with r=1, so it doesn't constantly get invalidated? (I'm not sure this will be an issue, but just in case...) Anyway, thanks for your advice so far!
bors [Tue, 12 Feb 2019 00:44:24 +0000 (00:44 +0000)]
Auto merge of #58180 - davidtwco:issue-58053, r=estebank
Fix span for closure return type when annotated.
Fixes #58053.
This PR adjusts the span used to label closure return types so that
if the user specifies the return type, i.e. `|_| -> X {}` instead of
`|_| {}`, we correctly highlight all of it and not just the last
character.
Oliver Scherer [Sun, 3 Feb 2019 12:57:03 +0000 (13:57 +0100)]
Ease the transition to requiring features by just warning if there's no feature list
while we could make this change (it's all unstable after all), there are crates.io crates that use the feature and that the compiler depends upon. We can instead roll out this feature while still supporting the old way.
bors [Mon, 11 Feb 2019 10:34:09 +0000 (10:34 +0000)]
Auto merge of #56645 - pietroalbini:fix-unused-imports, r=estebank
Initial implementation of rustfixable unused_imports lint
This PR adds the initial implementation of rustfixable `unused_imports` lint. The implementation works, but rustfix is not able to apply all the suggestions until https://github.com/rust-lang/rust/issues/53934 is fixed. It also needs https://github.com/rust-lang/rust/pull/58296 to hide the suggested note since it's really useless.
cc https://github.com/rust-lang/rust/issues/47888
<details><summary><code>cargo fix</code> in action on the <code>unused_imports</code> lint</summary>
* Replace util::without_prefix with Path::strip_prefix rust-lang/cargo#6620
* keep track of crates that are whitelisted to be used even if yanked rust-lang/cargo#6611
* Fix default DYLD_FALLBACK_LIBRARY_PATH on MacOS. rust-lang/cargo#6625
* Bail when trying to run "test --doc --no-run" rust-lang/cargo#6628
* In cargo test's help, add that examples are built rust-lang/cargo#6619
* Extract & re-use filter_targets in cargo_compile rust-lang/cargo#6621
* Test cleanup: remove unnecessary with_status(0) rust-lang/cargo#6630
* Fix run's help message rust-lang/cargo#6631
* Some updates to bash completion. rust-lang/cargo#6644
* Introduce Source::download_now rust-lang/cargo#6637
* Switch from unused_imports to deprecated to test unfixable warnings rust-lang/cargo#6649
bors [Sun, 10 Feb 2019 22:35:36 +0000 (22:35 +0000)]
Auto merge of #58361 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 16 pull requests
Successful merges:
- #57259 (Update reference of rlibc crate to compiler-builtins crate)
- #57740 (Use `to_ne_bytes` for converting IPv4Addr to octets)
- #57926 (Tiny expansion to docs for `core::convert`.)
- #58157 (Add Cargo.lock automatically adding message)
- #58203 (rustdoc: display sugared return types for async functions)
- #58243 (Add trait alias support in rustdoc)
- #58262 (Add #[must_use] message to Fn* traits)
- #58295 (std::sys::unix::stdio: explain why we do into_raw)
- #58297 (Cleanup JS a bit)
- #58317 (Some writing improvement, conciseness of intro)
- #58324 (miri: give non-generic functions a stable address)
- #58332 (operand-to-place copies should never be overlapping)
- #58345 (When there are multiple filenames, print what got interpreted as filenames)
- #58346 (rpath computation: explain why we pop())
- #58350 (Fix failing tidy (line endings on Windows))
- #58352 (miri value visitor: use `?` in macro)
Guillaume Gomez [Sun, 10 Feb 2019 20:45:22 +0000 (21:45 +0100)]
Rollup merge of #58345 - RalfJung:2nd-filename, r=matthewjasper
When there are multiple filenames, print what got interpreted as filenames
I have written code that crafts command lines for rustc, and when I get "multiple input filenames provided" it can be quite hard to figure out where in this long list of arguments the mistake is hiding. Probably I passed an argument to a flag that does not expect an argument, but which flag would that be?
This changes the error message to print the first two filenames, to make it easier to debug what is going on.
Guillaume Gomez [Sun, 10 Feb 2019 20:45:09 +0000 (21:45 +0100)]
Rollup merge of #57926 - icefoxen:test-doc-pr, r=frewsxcv
Tiny expansion to docs for `core::convert`.
This is not really significant, accept or reject as you wish. I just want to make sure I understand how the PR process works and that I'm doing it right before doing a bigger one for #33417.
Guillaume Gomez [Sun, 10 Feb 2019 20:45:08 +0000 (21:45 +0100)]
Rollup merge of #57740 - JakubOnderka:ipv4addr-to_ne_bytes, r=scottmcm
Use `to_ne_bytes` for converting IPv4Addr to octets
It is easier and it should be also faster, because [`to_ne_bytes`](https://doc.rust-lang.org/std/primitive.u32.html#method.to_ne_bytes) just calls `mem::transmute`.
bors [Sun, 10 Feb 2019 11:18:50 +0000 (11:18 +0000)]
Auto merge of #58085 - wesleywiser:profiler_2, r=wesleywiser
Implement more detailed self profiling
Timing data and cache hits/misses are now recorded at the query level.
This allows us to show detailed per query information such as total time
for each query.
To see detailed query information in the summary pass the `-Z verbose`
flag. For example:
bors [Sun, 10 Feb 2019 08:52:10 +0000 (08:52 +0000)]
Auto merge of #58103 - RalfJung:mir-shim-dump, r=eddyb
Make -Zdump-mir dump shims
Fixes https://github.com/rust-lang/rust/issues/53532 by (a) making the MIR shim generation use the MIR pass infrastructure, and (b) fixing said infrastructure to handle the fallout.