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.
r? @ghost
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)
Failed merges:
r? @ghost
Clear out std, not std tools
This was a typo that slipped in, and meant that we were still not properly
clearing out std.
This is basically #67760 but actually correct...
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.
Avoid overflow in `std::iter::Skip::count`
The call to `count` on the inner iterator can overflow even if `Skip` itself would return less that `usize::max_value()` items.
Fixes#68139
Account for non-types in substs for opaque type error messages
Fixes#68368
Previously, I assumed that the substs contained only types, which caused
the computed index number to be wrong.
Update some of Cargo's dependencies
This is primarily updating the `curl` dependency, but also went ahead
and applied a few updates for other packages that Cargo depends on.
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.
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.
Fixes#68149.
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`.
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.
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.
Fixes#68367.
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.
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.
Fixes https://github.com/rust-lang/rust/issues/66962.
r? @eddyb
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.
add bare metal ARM Cortex-A targets to rustc
-> `rustc --target armv7a-none-eabi` will work
also build rust-std (rustup) components for them
-> `rustup target add armv7a-none-eabi` will work
this completes our bare-metal support of ARMv7 cores on stable Rust (by 1.42 or 1.43)
(these target specifications have been tested on a real (no emulation / QEMU) [Cortex-A7 core](https://github.com/iqlusioninc/usbarmory.rs/))
[experiment] Add `-Z no-link` flag
Adds a compiler option to allow rustc compile a crate without linking.
With this flag, `rustc` serializes codegen_results into a `.rlink` file.
Part of Issue #64191
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.
Fix CI for embedded ARM targets
Closes https://github.com/rust-lang/rust/issues/67018
It would be better to move the `thumb-none-cortex-m` test into the `cargotest` suite, but it doesn't seem to support cross-compilation.
typeck: simplify the handling of `diverges`
Some drive-by cleanup while working on `hir::ExprKind::Let`.
Ostensibly, this has some perf benefits due to reduced allocation and whatnot as well.
r? @eddyb
Update cargo, books
## cargo
9 commits in ad3dbe10e1e654fb1f032a5dd9481d7cbaa00d65..f6449ba236db31995255ac5e4cad4ab88296a7c6
2020-01-13 21:37:15 +0000 to 2020-01-21 16:15:39 +0000
- Fix wrong directories in host_libdir. (rust-lang/cargo#7798)
- Update humantime requirement from 1.2.0 to 2.0.0 (rust-lang/cargo#7815)
- Fix doc_target test which no longer works on stable/beta. (rust-lang/cargo#7817)
- Fix some erroneous em-dashes in man pages. (rust-lang/cargo#7814)
- fix some clippy warnings (rust-lang/cargo#7808)
- Don't assume iowait always increases on Linux (rust-lang/cargo#7803)
- Add and update some doc comments. (rust-lang/cargo#7800)
- Consistently use em-dash in environment documentation page. (rust-lang/cargo#7799)
- Load credentials only when needed (rust-lang/cargo#7774)
## reference
3 commits in e1157538e86d83df0cf95d5e33bd943f80d0248f..11e893fc1357bc688418ddf1087c2b7aa25d154d
2019-12-22 13:13:14 +0100 to 2020-01-18 21:24:08 +0100
- Small improvements to types/pointer.md (rust-lang-nursery/reference#726)
- repr(transparent): mention align=1 requirement (rust-lang-nursery/reference#737)
- Elaborate on how to use an extern static correctly (rust-lang-nursery/reference#736)
## book
4 commits in 5c5cfd2e94cd42632798d9bd3d1116133e128ac9..87dd6843678575f8dda962f239d14ef4be14b352
2019-12-16 09:27:21 -0600 to 2020-01-20 15:20:40 -0500
- Fix listing numbers (rust-lang/book#2227)
- Move `async` and `await` keywords to 'Currently in Use' (rust-lang/book#2140)
- More cleanup - remove unneeded files (rust-lang/book#2213)
- Small cleanups extracted from the bigger pr i'm working on (rust-lang/book#2212)
## rust-by-example
1 commits in 1d59403cb5269c190cc52a95584ecc280345495a..1c2bd024d13f8011307e13386cf1fea2180352b5
2019-12-27 08:27:05 -0300 to 2020-01-20 12:18:36 -0300
- CamelCase -> UpperCamelCase (rust-lang/rust-by-example#1302)
## embedded-book
1 commits in 9493b7d4dc97eda439bd8780f05ad7b234cd1cd7..4d78994915af1bde9a95c04a8c27d8dca066232a
2019-12-27 20:05:00 +0000 to 2020-01-14 08:25:25 +0000
- Update .gitattributes (rust-embedded/book#221)