bors [Sun, 26 Jan 2020 21:01:13 +0000 (21:01 +0000)]
Auto merge of #68407 - eddyb:iter-macro-backtrace, r=petrochenkov
rustc_span: return an impl Iterator instead of a Vec from macro_backtrace.
Having `Span::macro_backtrace` produce an `impl Iterator<Item = ExpnData>` allows #67359 to use it instead of rolling its own similar functionality.
The move from `MacroBacktrace` to `ExpnData` (which the first two commits are prerequisites for) both eliminates unnecessary allocations, and is strictly more flexible (exposes more information).
bors [Sun, 26 Jan 2020 08:36:23 +0000 (08:36 +0000)]
Auto merge of #68522 - estebank:impl-trait-sugg-2, r=oli-obk
Further improve `impl Trait`/`dyn Trait` suggestions
After reading [_Returning Trait Objects_ by Bryce Fisher-Fleig](https://bryce.fisher-fleig.org/blog/returning-trait-objects/), [I noticed that](https://www.reddit.com/r/rust/comments/esueur/returning_trait_objects/ffczl4k/) #68195 had a few bugs due to not ignoring `ty::Error`.
- Account for `ty::Error`.
- Account for `if`/`else` and `match` blocks when pointing at return types and referencing their types.
- Increase the multiline suggestion output from 6 lines to 20.
bors [Sat, 25 Jan 2020 22:44:39 +0000 (22:44 +0000)]
Auto merge of #68546 - JohnTitor:rollup-znuot4b, r=JohnTitor
Rollup of 5 pull requests
Successful merges:
- #68485 (add a test for #60976)
- #68498 (Add some type-alias-impl-trait regression tests)
- #68514 (Use Self instead of self return type)
- #68534 (Update submodules to rust-lang)
- #68540 (clean up error codes E0229 and E0261)
bors [Sat, 25 Jan 2020 07:49:40 +0000 (07:49 +0000)]
Auto merge of #68448 - maurer:dyn-cdylib, r=alexcrichton
rustc: Allow cdylibs to link against dylibs
Previously, rustc mandated that cdylibs could only link against rlibs as dependencies (not dylibs).
This commit disables that restriction and tests that it works in a simple case.
I don't have a windows rustc dev environment, so I guessed at the MSVC test code, I'm hoping the CI can run that for me.
Additionally, we might want to consider emitting (through cargo or rustc) some metadata to help C users of a cdylib figure out where all the dylibs they need are. I don't think that should be needed to land this change, as it will still be usable by homogeneous build systems without it.
My new test was templated off the `tests/run-make-fulldeps/cdylib` test. It seemed more appropriate to have it as a separate test, since both foo.rs and bar.rs would need to be replicated to make that test cover both cases, but I can do that if it would be preferred.
If I'm doing anything out of order/process, please let me know; this is only my second change to rustc and the prior one was trivial.
bors [Fri, 24 Jan 2020 23:04:54 +0000 (23:04 +0000)]
Auto merge of #68526 - JohnTitor:rollup-3mmljof, r=JohnTitor
Rollup of 6 pull requests
Successful merges:
- #68111 (Print constants in `type_name` for const generics)
- #68374 (Fix invalid link to the C++ Exception Handling ABI documentation)
- #68504 (Use check-pass mode for lint tests and nll tests)
- #68509 (Clean up error codes E0223 and E0225 explanations)
- #68511 (Remove unused ignore-license directives)
- #68515 (Support feature process_set_argv0 for VxWorks)
r? @oli-obk as there may have been a deliberate decision not to in https://github.com/rust-lang/rust/commit/5b9848912a85e28d000602fc2e81bad9c2f2a981#diff-4ed1a72c0bfdf17be769ed520932cd02R80.
bors [Fri, 24 Jan 2020 14:00:56 +0000 (14:00 +0000)]
Auto merge of #68414 - michaelwoerister:share-drop-glue, r=alexcrichton
Also share drop-glue when compiling with -Zshare-generics (i.e. at opt-level=0)
This PR adds drop-glue to the set of monomorphizations that can be shared across crates via `-Zshare-generics`.
This version of the PR might have detrimental effects on performance as it makes lots of stuff dependent on a single query results (`upstream_monomorphizations_for(def_id_of_drop_in_place)`). That should be fixable but let's do a perf run first.
Potentially fixes issue https://github.com/rust-lang/rust/issues/64140. (cc @alexcrichton)
The changes here are related to @matthewjasper's https://github.com/rust-lang/rust/pull/67332 but should be mostly orthogonal.
bors [Fri, 24 Jan 2020 08:32:10 +0000 (08:32 +0000)]
Auto merge of #68506 - tmandry:rollup-kz9d33v, r=tmandry
Rollup of 7 pull requests
Successful merges:
- #68424 (Suggest borrowing `Vec<NonCopy>` in for loop)
- #68438 (Account for non-types in substs for opaque type error messages)
- #68469 (Avoid overflow in `std::iter::Skip::count`)
- #68473 (Enable ASan on Fuchsia)
- #68479 (Implement `unused_parens` for block return values)
- #68483 (Add my (@flip1995) name to .mailmap)
- #68500 (Clear out std, not std tools)
Tyler Mandry [Fri, 24 Jan 2020 08:30:58 +0000 (00:30 -0800)]
Rollup merge of #68473 - nopsledder:rust_sanitizer_fuchsia, r=alexcrichton
Enable ASan on Fuchsia
This change adds the x86_64-fuchsia and aarch64-fuchsia LLVM targets to
those allowed to invoke -Zsanitizer. Currently, the only overlap between
compiler_rt sanitizers supported by both rustc and Fuchsia is ASan.
Matthew Maurer [Wed, 22 Jan 2020 06:47:03 +0000 (22:47 -0800)]
rustc: Allow cdylibs to link against dylibs
Previously, rustc mandated that cdylibs could only link against rlibs as
dependencies (not dylibs).
This commit disables that restriction and tests that it works in a
simple case.
bors [Thu, 23 Jan 2020 19:39:07 +0000 (19:39 +0000)]
Auto merge of #68391 - tmiasko:compiletest-debuginfo, r=alexcrichton
compiletest: Simplify multi-debugger support
Previous implementation used a single mode type to store various pieces
of otherwise loosely related information:
* Whether debuginfo mode is in use or not.
* Which debuggers should run in general.
* Which debuggers are enabled for particular test case.
The new implementation introduces a separation between those aspects.
There is a single debuginfo mode parametrized by a debugger type.
The debugger detection is performed first and a separate configuration
is created for each detected debugger. The test cases are gathered
independently for each debugger which makes it trivial to implement
support for `ignore` / `only` conditions.
Functional changes:
* A single `debuginfo` entry point (rather than `debuginfo-cdb`, `debuginfo-gdb+lldb`, etc.).
* Debugger name is included in the test name.
* Test outputs are placed in per-debugger directory.
* Fixed spurious hash mismatch. Previously, the config mode would change
from `DebugInfoGdbLldb` (when collecting tests) to `DebugInfoGdb` or
`DebugInfoLldb` (when running them) which would affect hash computation.
* PYTHONPATH is additionally included in gdb hash.
* lldb-python and lldb-python-dir are additionally included in lldb hash.
bors [Thu, 23 Jan 2020 03:48:07 +0000 (03:48 +0000)]
Auto merge of #68298 - Mark-Simulacrum:binary-depdep-fix, r=petrochenkov
Avoid declaring a fake dependency edge
When we're producing an rlib, we do not need anything more than an rmeta file
for each of our dependencies (this is indeed utilized by Cargo for pipelining).
Previously, we were still storing the paths of possible rlib/dylib crates, which
meant that they could still plausibly be accessed. With -Zbinary-dep-depinfo,
that meant that Cargo thought that rustc was using both the rlib and an (earlier
emitted) rmeta, and so needed a recompile, as the rlib may have finished writing
*after* compilation started (for more detail, see issue 68149).
This commit changes metadata loading to not store the filepaths of dylib/rlib if
we're going to end up creating an rlib only.
Tyler Mandry [Thu, 23 Jan 2020 00:02:19 +0000 (16:02 -0800)]
Rollup merge of #68440 - matthiaskrgr:xpyclippy, r=Mark-Simulacrum
bootstrap: update clippy subcmd decription
Clarify where the clippy used in `./x.py clippy` is coming from.
It uses whatever clippy binary was installed via rustup, cargo-install
or otherwise and does NOT use the binary generated by `./x.py build src/tools/clippy`.
Tyler Mandry [Thu, 23 Jan 2020 00:02:17 +0000 (16:02 -0800)]
Rollup merge of #68425 - phi-gamma:try-method, r=varkor
Fix try-op diagnostic in E0277 for methods
For methods the try-op diagnostic displays the empty string where
it has more descriptive strings like “a function” otherwise:
error[E0277]: the `?` operator can only be used in that returns `Result` or `Option` (or another type that implements `std::ops::Try`)
^^
| | ^^ cannot use the `?` operator in that returns `()`
^^
I’m seeing this on nightly (rustc 1.42.0-nightly (b5a3341f1
2020-01-20)) and [on the playpen](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0e7ce7792c2aceb8056941710d539124).
The changeset add strings for impl methods and trait provided
methods and test cases for the option type.
Tyler Mandry [Thu, 23 Jan 2020 00:02:16 +0000 (16:02 -0800)]
Rollup merge of #68410 - tmiasko:msan-lto, r=varkor
Export weak symbols used by MemorySanitizer
Export weak symbols defined by MemorySanitizer instrumentation, which are used
to implement `-Zsanitizer-memory-track-origins` and `-Zsanitizer-recover=memory`.
Previously, when using fat LTO, they would internalized and eliminated.
Tyler Mandry [Thu, 23 Jan 2020 00:02:14 +0000 (16:02 -0800)]
Rollup merge of #68409 - sinkuu:temp_path, r=Mark-Simulacrum
Micro-optimize OutputFilenames
For example, its methods consume 6% of time during debug-compiling a `warp` example:
![Screenshot (debug-compiling a `warp` example)](https://user-images.githubusercontent.com/7091080/72780288-d74f1580-3c61-11ea-953b-34e59ca682f9.png)
This PR optimize them a bit by using `PathBuf::set_extension` instead of `Path::with_extension`, to avoid cloning `PathBuf` excessively.
Tyler Mandry [Thu, 23 Jan 2020 00:02:13 +0000 (16:02 -0800)]
Rollup merge of #68388 - varkor:toogeneric-wf, r=eddyb
Make `TooGeneric` error in WF checking a proper error
`TooGeneric` is encountered during WF checking when we cannot determine that a constant involving a generic parameter will always be evaluated successfully (rather than resulting in an error). In these cases, the burden of proof should be with the caller, so that we can avoid post-monomorphisation tim errors (which was the previous previous behaviour). This commit ensures that this situation produces a proper compiler error, rather than silently ignoring it or ICEing.
Tyler Mandry [Thu, 23 Jan 2020 00:02:11 +0000 (16:02 -0800)]
Rollup merge of #68361 - t6:patch-freebsd-lld-i386, r=alexcrichton
Unbreak linking with lld 9 on FreeBSD 13.0-CURRENT i386
Add -Wl,-znotext to default linker flags to link with lld 9 on FreeBSD 13.0-CURRENT i386 where rust-nightly has been failing to link since 2019-12-10 with variations of
```
= note: ld: error: relocation R_386_PC32 cannot be used against symbol __rust_probestack; recompile with -fPIC
>>> defined in /wrkdirs/usr/ports/lang/rust-nightly/work/rustc-nightly-src/build/i686-unknown-freebsd/stage1/lib/rustlib/i686-unknown-freebsd/lib/libcompiler_builtins-6570a75fe85f0e1a.rlib(compiler_builtins-6570a75fe85f0e1a.compiler_builtins.2i519eqi-cgu.15.rcgu.o)
>>> referenced by std.4xivr03c-cgu.14
>>> std-9bd70afd58e204b7.std.4xivr03c-cgu.14.rcgu.o:(_$LT$alloc..boxed..Box$LT$F$GT$$u20$as$u20$core..ops..function..FnOnce$LT$A$GT$$GT$::call_once::h1c78ed6e734a2bfc (.llvm.10122419023709863394)) in archive /wrkdirs/usr/ports/lang/rust-nightly/work/rustc-nightly-src/build/i686-unknown-freebsd/stage1/lib/rustlib/i686-unknown-freebsd/lib/libstd-9bd70afd58e204b7.rlib
ld: error: relocation R_386_PC32 cannot be used against symbol __rust_probestack; recompile with -fPIC
>>> defined in /wrkdirs/usr/ports/lang/rust-nightly/work/rustc-nightly-src/build/i686-unknown-freebsd/stage1/lib/rustlib/i686-unknown-freebsd/lib/libcompiler_builtins-6570a75fe85f0e1a.rlib(compiler_builtins-6570a75fe85f0e1a.compiler_builtins.2i519eqi-cgu.15.rcgu.o)
>>> referenced by std.4xivr03c-cgu.14
>>> std-9bd70afd58e204b7.std.4xivr03c-cgu.14.rcgu.o:(std::io::util::copy::h9115f048f2203467) in archive /wrkdirs/usr/ports/lang/rust-nightly/work/rustc-nightly-src/build/i686-unknown-freebsd/stage1/lib/rustlib/i686-unknown-freebsd/lib/libstd-9bd70afd58e204b7.rlib
clang-cpp: error: linker command failed with exit code 1 (use -v to see invocation)
error: aborting due to previous error
error: could not compile `rustc_macros`.
```
Full log: http://beefy17.nyi.freebsd.org/data/head-i386-default/p523508_s356869/logs/rust-nightly-1.42.0.20200118.log
AFAICT it stopped building after bumping compiler_builtins to 0.1.22 in https://github.com/rust-lang/rust/pull/67110.
Aaron Green [Wed, 15 Jan 2020 23:48:53 +0000 (15:48 -0800)]
Enable ASan on Fuchsia
This change adds the x86_64-fuchsia and aarch64-fuchsia LLVM targets to
those allowed to invoke -Zsanitizer. Currently, the only overlap between
compiler_rt sanitizers supported by both rustc and Fuchsia is ASan.