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.
Rollup merge of #68421 - ehuss:update-cargo-books, r=alexcrichton
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)
Matthias Krüger [Wed, 22 Jan 2020 00:02:32 +0000 (01:02 +0100)]
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`.
Rollup merge of #68313 - batrla:master, r=alexcrichton
Options IP_MULTICAST_TTL and IP_MULTICAST_LOOP are 1 byte on BSD
Options IP_MULTICAST_TTL and IP_MULTICAST_LOOP are 1 byte on BSD and Solaris
See ip(4P) man page:
IP_MULTICAST_TTL Time to live for multicast datagrams. This option
takes an unsigned character as an argument. Its
value is the TTL that IP uses on outgoing multi-
cast datagrams. The default is 1.
IP_MULTICAST_LOOP Loopback for multicast datagrams. Normally multi-
cast datagrams are delivered to members on the
sending host (or sending zone). Setting the
unsigned character argument to 0 causes the oppo-
site behavior, meaning that when multiple zones
are present, the datagrams are delivered to all
zones except the sending zone.
Rollup merge of #68140 - ecstatic-morse:const-trait-bound-opt-out, r=oli-obk
Implement `?const` opt-out for trait bounds
For now, such bounds are treated exactly the same as unprefixed ones in all contexts. [RFC 2632](https://github.com/rust-lang/rfcs/pull/2632) does not specify whether such bounds are forbidden outside of `const` contexts, so they are allowed at the moment.
Prior to this PR, the constness of a trait bound/impl was stored in `TraitRef`. Now, the constness of an `impl` is stored in `ast::ItemKind::Impl` and the constness of a bound in `ast::TraitBoundModifer`. Additionally, constness of trait bounds is now stored in an additional field of `ty::Predicate::Trait`, and the combination of the constness of the item along with any `TraitBoundModifier` determines the constness of the bound in accordance with the RFC. Encoding the constness of impls at the `ty` level is left for a later PR.
After a discussion in \#wg-grammar on Discord, it was decided that the grammar should not encode the mutual exclusivity of trait bound modifiers. The grammar for trait bound modifiers remains `[?const] [?]`. To encode this, I add a dummy variant to `ast::TraitBoundModifier` that is used when the syntax `?const ?` appears. This variant causes an error in AST validation and disappears during HIR lowering.
bors [Tue, 21 Jan 2020 15:29:18 +0000 (15:29 +0000)]
Auto merge of #65672 - ecstatic-morse:unified-dataflow-proto, r=pnkfelix
A single framework for gen-kill and generic dataflow problems
This is the prototype implementation discussed in rust-lang/compiler-team#202. You can read a high-level description of it in [the proposal](https://hackmd.io/@39Qr_z9cQhasi25sGjmFnA/Skvd9rztS) for that design meeting. This would eventually supersede the existing `BitDenotation` interface.
r? @ghost
cc @rust-lang/compiler (esp. @eddyb and @pnkfelix)
bors [Tue, 21 Jan 2020 06:28:33 +0000 (06:28 +0000)]
Auto merge of #68267 - estebank:lt-sugg, r=petrochenkov
Tweak lifetime definition errors
Taking inspiration from the narrative in @fasterthanlime's https://fasterthanli.me/blog/2019/declarative-memory-management/, add suggestions to some lifetime definition errors.
varkor [Mon, 20 Jan 2020 15:22:12 +0000 (15:22 +0000)]
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.
bors [Mon, 20 Jan 2020 23:35:50 +0000 (23:35 +0000)]
Auto merge of #68405 - JohnTitor:rollup-kj0x4za, r=JohnTitor
Rollup of 8 pull requests
Successful merges:
- #67734 (Remove appendix from Apache license)
- #67795 (Cleanup formatting code)
- #68290 (Fix some tests failing in `--pass check` mode)
- #68297 ( Filter and test predicates using `normalize_and_test_predicates` for const-prop)
- #68302 (Fix #[track_caller] and function pointers)
- #68339 (Add `riscv64gc-unknown-linux-gnu` into target list in build-manifest)
- #68381 (Added minor clarification to specification of GlobalAlloc::realloc.)
- #68397 (rustdoc: Correct order of `async` and `unsafe` in `async unsafe fn`s)
Yuki Okushi [Mon, 20 Jan 2020 22:32:48 +0000 (07:32 +0900)]
Rollup merge of #68381 - mjp41:master, r=Dylan-DPC
Added minor clarification to specification of GlobalAlloc::realloc.
The specification of `realloc` is slightly unclear:
```
/// * `layout` must be the same layout that was used
/// to allocate that block of memory,
```
https://github.com/rust-lang/rust/blob/master/src/libcore/alloc.rs#L541-L542
In the case of an `alloc` or `alloc_zeroed` this is fairly evidently the `layout` parameter passed into the original call. In the case of a `realloc`, this I assume is `layout` modified to contain `new_size`. However, I could not find this case specified in the documentation. Thus technically in a sequence of calls to `realloc`, it would be valid to provide the second call to `realloc` the same `layout` as the first call to `realloc`, which is almost certainly not going to be handled correctly.
Yuki Okushi [Mon, 20 Jan 2020 22:32:44 +0000 (07:32 +0900)]
Rollup merge of #68297 - Aaron1011:fix/new-const-prop-bounds, r=oli-obk
Filter and test predicates using `normalize_and_test_predicates` for const-prop
Fixes #68264
Previously, I attempted to use
`substitute_normalize_and_test_predicates` to detect unsatisfiable
bounds. Unfortunately, since const-prop runs in a generic environment
(we don't have any of the function's generic parameters substituted),
this could lead to cycle errors when attempting to normalize predicates.
This check is replaced with a more precise check. We now only call
`normalize_and_test_predicates` on predicates that have the possibility
of being proved unsatisfiable - that is, predicates that don't depend
on anything local to the function (e.g. generic parameters). This
ensures that we don't hit cycle errors when we normalize said
predicates, while still ensuring that we detect unsatisfiable
predicates.
I haven't been able to come up with a minimization of the Diesel issue - however, I've verified that it compiles successfully.