]> git.lizzy.rs Git - rust.git/log
rust.git
4 years agoRollup merge of #73315 - GuillaumeGomez:clean-up-config-strs, r=kinnison
Manish Goregaokar [Thu, 18 Jun 2020 22:20:53 +0000 (15:20 -0700)]
Rollup merge of #73315 - GuillaumeGomez:clean-up-config-strs, r=kinnison

Clean up some weird command strings

r? @kinnison

4 years agoRollup merge of #73034 - doctorn:nomangle-inline-linkage, r=matthewjasper
Manish Goregaokar [Thu, 18 Jun 2020 22:20:51 +0000 (15:20 -0700)]
Rollup merge of #73034 - doctorn:nomangle-inline-linkage, r=matthewjasper

Export `#[inline]` fns with extern indicators

In ancient history (#36280) we stopped `#[inline]` fns being codegened if they weren't used. However,

- #72944
- #72463

observe that when writing something like

```rust
#![crate_type = "cdylib"]

#[no_mangle]
#[inline]
pub extern "C" fn foo() {
    // ...
}
```

we really _do_ want `foo` to be codegened. This change makes this the case.

Resolves #72944, resolves #72463 (and maybe some more)

4 years agoRollup merge of #72968 - integer32llc:docs-arrow-keys, r=GuillaumeGomez
Manish Goregaokar [Thu, 18 Jun 2020 22:20:49 +0000 (15:20 -0700)]
Rollup merge of #72968 - integer32llc:docs-arrow-keys, r=GuillaumeGomez

Only highlight doc search results via mouseover if mouse has moved

## What happens

- Go to https://doc.rust-lang.org/stable/std/index.html
- Put your mouse cursor somewhere in the middle where search results will appear and then don't move the mouse
- Press 's' to focus the search box
- Type a query that brings up enough search results to go under where your mouse cursor is
- Press the down arrow
- The search result that is one below where your mouse cursor is will be highlighted.

## What I expected

When not currently using the mouse, I expect doing a search and then pressing the down arrow to always highlight the first search result immediately below the search box.

## The fix

This feels a bit hacky to me; I'm open to other solutions. This introduces a global JS var that keeps track of whether the person searching has moved their mouse after doing a search or not, and only uses the mouse position to highlight search results if the person HAS moved the mouse AFTER doing a search.

4 years agoRollup merge of #72836 - poliorcetics:std-time-os-specificities, r=shepmaster
Manish Goregaokar [Thu, 18 Jun 2020 22:20:47 +0000 (15:20 -0700)]
Rollup merge of #72836 - poliorcetics:std-time-os-specificities, r=shepmaster

Complete the std::time documentation to warn about the inconsistencies between OS

Fixes #48980.

I put the new documentation in `src/libstd/time.rs` at the module-level because it affects all types, even the one that are not directly system dependents if they are used with affected types, but there may be a better place for it.

4 years agoRollup merge of #72814 - RalfJung:mir-visir-terminator, r=oli-obk
Manish Goregaokar [Thu, 18 Jun 2020 22:20:45 +0000 (15:20 -0700)]
Rollup merge of #72814 - RalfJung:mir-visir-terminator, r=oli-obk

remove visit_terminator_kind from MIR visitor

For some reason, we had both `visit_terminator` and `visit_terminator_kind`. In contrast, for `Statement` we just have `visit_statement`. So this cleans things up by removing `visit_terminator_kind` and porting its users to `visit_terminator`.

4 years agoRollup merge of #72804 - estebank:opaque-missing-lts-in-fn-2, r=nikomatsakis
Manish Goregaokar [Thu, 18 Jun 2020 22:20:43 +0000 (15:20 -0700)]
Rollup merge of #72804 - estebank:opaque-missing-lts-in-fn-2, r=nikomatsakis

Further tweak lifetime errors involving `dyn Trait` and `impl Trait` in return position

* Suggest substituting `'static` lifetime in impl/dyn `Trait + 'static` instead of `Trait + 'static + '_`
* When `'static` is explicit, also suggest constraining argument with it
* Reduce verbosity of suggestion message and mention lifetime in label
* Tweak output for overlapping required/captured spans
* Give these errors an error code

Follow up to #72543.

r? @nikomatsakis

4 years agoRollup merge of #72628 - MikailBag:array-default-tests, r=shepmaster
Manish Goregaokar [Thu, 18 Jun 2020 22:20:41 +0000 (15:20 -0700)]
Rollup merge of #72628 - MikailBag:array-default-tests, r=shepmaster

Add tests for 'impl Default for [T; N]'

Related: #71690.
This pull request adds two tests:
- Even it T::default() panics, no leaks occur.
- [T; 0] is Default even if T is not.

I believe at some moment `Default` impl for arrays will be rewritten to use const generics instead of macros, and these tests will help to prevent behavior changes.

4 years agoRollup merge of #72279 - RalfJung:raw-ref-macros, r=nikomatsakis
Manish Goregaokar [Thu, 18 Jun 2020 22:20:39 +0000 (15:20 -0700)]
Rollup merge of #72279 - RalfJung:raw-ref-macros, r=nikomatsakis

add raw_ref macros

In https://github.com/rust-lang/rust/issues/64490, various people were in favor of exposing `&raw` as a macro first before making the actual syntax stable. So this PR (unstably) introduces those macros.

I'll create the tracking issue if we're okay moving forward with this.

4 years agoRollup merge of #71976 - mibac138:let-recovery, r=estebank
Manish Goregaokar [Thu, 18 Jun 2020 22:20:36 +0000 (15:20 -0700)]
Rollup merge of #71976 - mibac138:let-recovery, r=estebank

Improve diagnostics for `let x += 1`

Fixes(?) #66736

The code responsible for the `E0404` errors is [here](https://github.com/rust-lang/rust/blob/master/src/librustc_parse/parser/ty.rs#L399-L424) which I don't think can be easily modified to prevent emitting an error in one specific case. Because of this I couldn't get rid of `E0404` and instead added `E0067` along with a help message which will fix the problem.

r? @estebank

4 years agoRollup merge of #71338 - estebank:recursive-impl-trait, r=nikomatsakis
Manish Goregaokar [Thu, 18 Jun 2020 22:20:33 +0000 (15:20 -0700)]
Rollup merge of #71338 - estebank:recursive-impl-trait, r=nikomatsakis

Expand "recursive opaque type" diagnostic

Fix #70968, partially address #66523.

4 years agoRollup merge of #70551 - mark-i-m:ty-err-2, r=varkor
Manish Goregaokar [Thu, 18 Jun 2020 22:20:30 +0000 (15:20 -0700)]
Rollup merge of #70551 - mark-i-m:ty-err-2, r=varkor

Make all uses of ty::Error delay a span bug

r? @eddyb

A second attempt at https://github.com/rust-lang/rust/pull/70245

resolves https://github.com/rust-lang/rust/issues/70866

4 years agoAuto merge of #73384 - petrochenkov:gnulink, r=cuviper
bors [Thu, 18 Jun 2020 04:29:23 +0000 (04:29 +0000)]
Auto merge of #73384 - petrochenkov:gnulink, r=cuviper

linker: Never pass `-no-pie` to non-gnu linkers

Fixes https://github.com/rust-lang/rust/issues/73370

4 years agoAuto merge of #73065 - Amanieu:tls-fix, r=oli-obk
bors [Thu, 18 Jun 2020 00:29:10 +0000 (00:29 +0000)]
Auto merge of #73065 - Amanieu:tls-fix, r=oli-obk

Fix link error with #[thread_local] introduced by #71192

r? @oli-obk

4 years agoAuto merge of #69890 - lenary:lenary/riscv-frame-pointers, r=hanna-kruppe,Mark-Simulacrum
bors [Wed, 17 Jun 2020 11:30:56 +0000 (11:30 +0000)]
Auto merge of #69890 - lenary:lenary/riscv-frame-pointers, r=hanna-kruppe,Mark-Simulacrum

[RISC-V] Do not force frame pointers

We have been seeing some very inefficient code that went away when using
`-Cforce-frame-pointers=no`. For instance `core::ptr::drop_in_place` at
`-Oz` was compiled into a function which consisted entirely of saving
registers to the stack, then using the frame pointer to restore the same
registers (without any instructions between the prolog and epilog).

The RISC-V LLVM backend supports frame pointer elimination, so it makes
sense to allow this to happen when using Rust. It's not clear to me that
frame pointers have ever been required in the general case.

In rust-lang/rust#61675 it was pointed out that this made reassembling
stack traces easier, which is true, but there is a code generation
option for forcing frame pointers, and I feel the default should not be
to require frame pointers, given it demonstrably makes code size worse
(around 10% in some embedded applications).

The kinds of targets mentioned in rust-lang/rust#61675 are popular, but
should not dictate that code generation should be worse for all RISC-V
targets, especially as there is a way to use CFI information to
reconstruct the stack when the frame pointer is eliminated. It is also
a misconception that `fp` is always used for the frame pointer. `fp` is
an ABI name for `x8` (aka `s0`), and if no frame pointer is required,
`x8` may be used for other callee-saved values.

---

I am partly posting this to get feedback from @fintelia who introduced the change to require frame pointers, and @hanna-kruppe who had issues with the original PR. I would understand if we wanted to remove this setting on only a subset of RISC-V targets, but my preference would be to remove this setting everywhere.

There are more details on the code size savings seen in Tock here: https://github.com/tock/tock/pull/1660

4 years agoAuto merge of #73322 - Amanieu:asm-srcloc-llvm, r=cuviper
bors [Tue, 16 Jun 2020 20:40:22 +0000 (20:40 +0000)]
Auto merge of #73322 - Amanieu:asm-srcloc-llvm, r=cuviper

Update LLVM submodule

Only includes one commit:
- [D80759](https://reviews.llvm.org/D80759): Fix FastISel dropping srcloc metadata from InlineAsm

Fixes #40555

4 years agoAuto merge of #73402 - Dylan-DPC:rollup-8udzpfu, r=Dylan-DPC
bors [Tue, 16 Jun 2020 14:58:14 +0000 (14:58 +0000)]
Auto merge of #73402 - Dylan-DPC:rollup-8udzpfu, r=Dylan-DPC

Rollup of 8 pull requests

Successful merges:

 - #73237 (Check for overflow in DroplessArena and align returned memory)
 - #73339 (Don't run generator transform when there's a TyErr)
 - #73372 (Re-order correctly the sections in the sidebar)
 - #73373 (Use track caller for bug! macro)
 - #73380 (Add more info to `x.py build --help` on default value for `-j JOBS`.)
 - #73381 (Fix typo in docs of std::mem)
 - #73389 (Use `Ipv4Addr::from<[u8; 4]>` when possible)
 - #73400 (Fix forge-platform-support URL)

Failed merges:

r? @ghost

4 years agoformat derives
Who? Me?! [Tue, 16 Jun 2020 14:41:05 +0000 (09:41 -0500)]
format derives

Co-authored-by: lzutao <taolzu@gmail.com>
4 years agoRollup merge of #73400 - rnestler:patch-1, r=jonas-schievink
Dylan DPC [Tue, 16 Jun 2020 13:08:48 +0000 (15:08 +0200)]
Rollup merge of #73400 - rnestler:patch-1, r=jonas-schievink

Fix forge-platform-support URL

Apparently it got changed.

4 years agoRollup merge of #73389 - lzutao:from, r=kennytm
Dylan DPC [Tue, 16 Jun 2020 13:08:47 +0000 (15:08 +0200)]
Rollup merge of #73389 - lzutao:from, r=kennytm

Use `Ipv4Addr::from<[u8; 4]>` when possible

Resolve this comment: https://github.com/rust-lang/rust/pull/73331#discussion_r440098369

4 years agoRollup merge of #73381 - ratijas:fix-typo-std-mem, r=jonas-schievink
Dylan DPC [Tue, 16 Jun 2020 13:08:45 +0000 (15:08 +0200)]
Rollup merge of #73381 - ratijas:fix-typo-std-mem, r=jonas-schievink

Fix typo in docs of std::mem

4 years agoRollup merge of #73380 - pnkfelix:make-bootstrap-help-print-num-cpus, r=Mark-Simulacrum
Dylan DPC [Tue, 16 Jun 2020 13:08:43 +0000 (15:08 +0200)]
Rollup merge of #73380 - pnkfelix:make-bootstrap-help-print-num-cpus, r=Mark-Simulacrum

Add more info to `x.py build --help` on default value for `-j JOBS`.

4 years agoRollup merge of #73373 - lzutao:bug-trackcaller, r=Amanieu
Dylan DPC [Tue, 16 Jun 2020 13:08:42 +0000 (15:08 +0200)]
Rollup merge of #73373 - lzutao:bug-trackcaller, r=Amanieu

Use track caller for bug! macro

4 years agoRollup merge of #73372 - GuillaumeGomez:re-order-sidebar-sections, r=kinnison
Dylan DPC [Tue, 16 Jun 2020 13:08:40 +0000 (15:08 +0200)]
Rollup merge of #73372 - GuillaumeGomez:re-order-sidebar-sections, r=kinnison

Re-order correctly the sections in the sidebar

Before that, "trait implementations" and "implementors" titles in the sidebar were before "methods" for example. Which wasn't logical considering that the two sections come after in the "content".

r? @kinnison

4 years agoRollup merge of #73339 - jonas-schievink:unbug, r=estebank
Dylan DPC [Tue, 16 Jun 2020 13:08:37 +0000 (15:08 +0200)]
Rollup merge of #73339 - jonas-schievink:unbug, r=estebank

Don't run generator transform when there's a TyErr

Not sure if this might cause any problems later on, but we shouldn't be hitting codegen or const eval for the produced MIR anyways, so it should be fine.

cc https://github.com/rust-lang/rust/issues/72685#issuecomment-643749020

4 years agoRollup merge of #73237 - tmiasko:arena, r=nnethercote
Dylan DPC [Tue, 16 Jun 2020 13:08:35 +0000 (15:08 +0200)]
Rollup merge of #73237 - tmiasko:arena, r=nnethercote

Check for overflow in DroplessArena and align returned memory

* Check for overflow when calculating the slice start & end position.
* Align the pointer obtained from the allocator, ensuring that it
  satisfies user requested alignment (the allocator is only asked for
  layout compatible with u8 slice).
* Remove an incorrect assertion from DroplessArena::align.
* Avoid forming references to an uninitialized memory in DroplessArena.

Helps with #73007, #72624.

4 years agoFix forge-platform-support URL
Raphael Nestler [Tue, 16 Jun 2020 11:42:09 +0000 (13:42 +0200)]
Fix forge-platform-support URL

Apparently it got changed.

4 years agoAuto merge of #73285 - Mark-Simulacrum:clippy-fail, r=RalfJung,oli-obk
bors [Tue, 16 Jun 2020 11:26:45 +0000 (11:26 +0000)]
Auto merge of #73285 - Mark-Simulacrum:clippy-fail, r=RalfJung,oli-obk

Avoid prematurely recording toolstates

When we're running with dry_run enabled (i.e. all builds do this initially), we're
guaranteed to save of a toolstate of TestFail for tools that aren't tested. In practice,
we do test tools as well, so for those tools we would initially record them as being
TestPass, and then later on re-record the correct state after actually testing them.
However, this would not work well if the build failed for whatever reason (e.g. panicking
in bootstrap, or as was the case in #73097, clippy failing to test successfully), we would
just go on believing that things passed when they in practice did not.

This commit also adjusts saving toolstate to never record clippy explicitly (otherwise, it
would be recorded when building it); eventually that'll likely move to other tools as well
but not yet. This is deemed simpler than checking everywhere we generically save
toolstate.

We also move clippy out of the "toolstate" no-fail-fast build into a separate x.py
invocation; this should no longer be technically required but provides the nice state of
letting us check toolstate for all tools and only then check clippy (giving full results
on every build).

r? @oli-obk

Supercedes #73275, also fixes #73274

4 years agoadd probably accidentally missing super_* calls
Ralf Jung [Wed, 10 Jun 2020 08:10:09 +0000 (10:10 +0200)]
add probably accidentally missing super_* calls

4 years agofmt; make visit_terminator arg names consistent with the rest
Ralf Jung [Wed, 10 Jun 2020 08:03:26 +0000 (10:03 +0200)]
fmt; make visit_terminator arg names consistent with the rest

4 years agorename location field of Drop terminators to place
Ralf Jung [Wed, 10 Jun 2020 07:56:54 +0000 (09:56 +0200)]
rename location field of Drop terminators to place

4 years agoget rid of an unused 'span' field
Ralf Jung [Sun, 31 May 2020 12:47:54 +0000 (14:47 +0200)]
get rid of an unused 'span' field

4 years agoremove visit_terminator_kind from MIR visitor
Ralf Jung [Sun, 31 May 2020 10:13:29 +0000 (12:13 +0200)]
remove visit_terminator_kind from MIR visitor

4 years agoadd tracking issue
Ralf Jung [Tue, 16 Jun 2020 07:25:29 +0000 (09:25 +0200)]
add tracking issue

4 years agoAuto merge of #72962 - lcnr:ObligationCause-lrc, r=ecstatic-morse
bors [Tue, 16 Jun 2020 06:22:52 +0000 (06:22 +0000)]
Auto merge of #72962 - lcnr:ObligationCause-lrc, r=ecstatic-morse

store `ObligationCause` on the heap

Stores `ObligationCause` on the heap using an `Rc`.

This PR trades off some transient memory allocations to reduce the size of–and thus the number of instructions required to memcpy–a few widely used data structures in trait solving.

4 years agoUse `Ipv4Addr::from<[u8; 4]>` when possible
Lzu Tao [Tue, 16 Jun 2020 01:54:17 +0000 (01:54 +0000)]
Use `Ipv4Addr::from<[u8; 4]>` when possible

4 years agotrack caller for delay_span_bug
mark [Tue, 26 May 2020 17:49:11 +0000 (12:49 -0500)]
track caller for delay_span_bug

4 years agomake all uses of ty::Error or ConstKind::Error delay a span bug
mark [Wed, 6 May 2020 04:02:09 +0000 (23:02 -0500)]
make all uses of ty::Error or ConstKind::Error delay a span bug

4 years agolinker: Never pass `-no-pie` to non-gnu linkers
Vadim Petrochenkov [Mon, 15 Jun 2020 20:05:05 +0000 (23:05 +0300)]
linker: Never pass `-no-pie` to non-gnu linkers

4 years agoFix typo in docs of std::mem
ivan tkachenko [Mon, 15 Jun 2020 19:08:56 +0000 (22:08 +0300)]
Fix typo in docs of std::mem

4 years agoreview comments
Esteban Küber [Mon, 15 Jun 2020 19:11:28 +0000 (12:11 -0700)]
review comments

4 years agoAdd more info to `x.py build --help` on default value for `-j JOBS`.
Felix S. Klock II [Mon, 15 Jun 2020 19:02:57 +0000 (15:02 -0400)]
Add more info to `x.py build --help` on default value for `-j JOBS`.

4 years agoExpand "recursive opaque type" diagnostic
Esteban Küber [Sun, 19 Apr 2020 23:52:15 +0000 (16:52 -0700)]
Expand "recursive opaque type" diagnostic

Fix #70968, partially address #66523.

4 years agoDisable clippy tests
Mark Rousskov [Mon, 15 Jun 2020 17:57:55 +0000 (13:57 -0400)]
Disable clippy tests

4 years agoAvoid prematurely recording toolstates
Mark Rousskov [Fri, 12 Jun 2020 15:06:26 +0000 (11:06 -0400)]
Avoid prematurely recording toolstates

When we're running with dry_run enabled (i.e. all builds do this initially), we're
guaranteed to save of a toolstate of TestFail for tools that aren't tested. In practice,
we do test tools as well, so for those tools we would initially record them as being
TestPass, and then later on re-record the correct state after actually testing them.
However, this would not work well if the build failed for whatever reason (e.g. panicking
in bootstrap, or as was the case in 73097, clippy failing to test successfully), we would
just go on believing that things passed when they in practice did not.

This commit also adjusts saving toolstate to never record clippy explicitly (otherwise, it
would be recorded when building it); eventually that'll likely move to other tools as well
but not yet. This is deemed simpler than checking everywhere we generically save
toolstate.

We also move clippy out of the "toolstate" no-fail-fast build into a separate x.py
invocation; this should no longer be technically required but provides the nice state of
letting us check toolstate for all tools and only then check clippy (giving full results
on every build).

4 years agofix rebase
Esteban Küber [Mon, 15 Jun 2020 16:09:20 +0000 (09:09 -0700)]
fix rebase

4 years agoChange E0758 to E0759 to avoid conflict with #72912
Esteban Küber [Wed, 3 Jun 2020 18:34:04 +0000 (11:34 -0700)]
Change E0758 to E0759 to avoid conflict with #72912

4 years agosmall tweaks
Esteban Küber [Tue, 2 Jun 2020 23:05:48 +0000 (16:05 -0700)]
small tweaks

4 years agoRegister new eror code
Esteban Küber [Tue, 2 Jun 2020 17:47:58 +0000 (10:47 -0700)]
Register new eror code

4 years agoUse note for requirement source span
Esteban Küber [Tue, 2 Jun 2020 00:51:12 +0000 (17:51 -0700)]
Use note for requirement source span

4 years agoreview comments: wording
Esteban Küber [Mon, 1 Jun 2020 23:15:10 +0000 (16:15 -0700)]
review comments: wording

4 years agoTweak wording and add error code
Esteban Küber [Sat, 30 May 2020 17:15:58 +0000 (10:15 -0700)]
Tweak wording and add error code

4 years agoTweak output for overlapping required/captured spans
Esteban Küber [Sat, 30 May 2020 16:54:05 +0000 (09:54 -0700)]
Tweak output for overlapping required/captured spans

4 years agoMove overlapping span to a note
Esteban Küber [Sat, 30 May 2020 02:46:22 +0000 (19:46 -0700)]
Move overlapping span to a note

4 years agoReduce verbosity of suggestion message and mention lifetime in label
Esteban Küber [Sat, 30 May 2020 01:59:42 +0000 (18:59 -0700)]
Reduce verbosity of suggestion message and mention lifetime in label

4 years agoWhen `'static` is explicit, suggest constraining argument with it
Esteban Küber [Sat, 30 May 2020 01:05:20 +0000 (18:05 -0700)]
When `'static` is explicit, suggest constraining argument with it

4 years agoSuggest substituting `'static` lifetime in impl/dyn `Trait + 'static` return types
Esteban Küber [Fri, 29 May 2020 22:09:43 +0000 (15:09 -0700)]
Suggest substituting `'static` lifetime in impl/dyn `Trait + 'static` return types

4 years agoAuto merge of #72357 - ortem:new-dbg-pretty-printers, r=pnkfelix
bors [Mon, 15 Jun 2020 15:21:45 +0000 (15:21 +0000)]
Auto merge of #72357 - ortem:new-dbg-pretty-printers, r=pnkfelix

Implement new gdb/lldb pretty-printers

Reopened #60826

This PR replaces current gdb and lldb pretty-printers with new ones that were originally written for [IntelliJ Rust](https://github.com/intellij-rust/intellij-rust/tree/master/prettyPrinters).

The current state of lldb pretty-printers is poor, because [they don't use synthetic children](https://github.com/rust-lang/rust/issues/55586#issuecomment-436610063). When I started to reimplement lldb pretty-printers with synthetic children support, I've found current version strange and hard to support. I think `debugger_pretty_printers_common.py` is overkill, so I got rid of it.

The new pretty-printers have to support all types supported by current pretty-printers, and also support `Rc`, `Arc`, `Cell`, `Ref`, `RefCell`, `RefMut`, `HashMap`, `HashSet`.

Fixes #56252

4 years agoUse track caller for bug! macro
Lzu Tao [Mon, 15 Jun 2020 14:17:58 +0000 (14:17 +0000)]
Use track caller for bug! macro

4 years agoRe-order correctly the sections in the sidebar
Guillaume Gomez [Mon, 15 Jun 2020 13:25:24 +0000 (15:25 +0200)]
Re-order correctly the sections in the sidebar

4 years agoComplete the std::time documentation to warn about the inconsistencies between OS
Alexis Bourget [Mon, 15 Jun 2020 13:19:02 +0000 (15:19 +0200)]
Complete the std::time documentation to warn about the inconsistencies between OS

4 years agoJoin mutiple lines if it is more readable
Lzu Tao [Mon, 15 Jun 2020 13:15:47 +0000 (13:15 +0000)]
Join mutiple lines if it is more readable

4 years agoAuto merge of #73369 - RalfJung:rollup-hl8g9zf, r=RalfJung
bors [Mon, 15 Jun 2020 11:39:23 +0000 (11:39 +0000)]
Auto merge of #73369 - RalfJung:rollup-hl8g9zf, r=RalfJung

Rollup of 10 pull requests

Successful merges:

 - #72707 (Use min_specialization in the remaining rustc crates)
 - #72740 (On recursive ADT, provide indirection structured suggestion)
 - #72879 (Miri: avoid tracking current location three times)
 - #72938 (Stabilize Option::zip)
 - #73086 (Rename "cyclone" to "apple-a7" per changes in upstream LLVM)
 - #73104 (Example about explicit mutex dropping)
 - #73139 (Add methods to go from a nul-terminated Vec<u8> to a CString)
 - #73296 (Remove vestigial CI job msvc-aux.)
 - #73304 (Revert heterogeneous SocketAddr PartialEq impls)
 - #73331 (extend network support for HermitCore)

Failed merges:

r? @ghost

4 years agoUpdate sanitizer test
Nathan Corbyn [Mon, 15 Jun 2020 10:12:19 +0000 (11:12 +0100)]
Update sanitizer test

4 years agoRollup merge of #73331 - hermitcore:listen, r=kennytm
Ralf Jung [Mon, 15 Jun 2020 10:01:14 +0000 (12:01 +0200)]
Rollup merge of #73331 - hermitcore:listen, r=kennytm

extend network support for HermitCore

- add basic support of TcpListerner for HermitCore
- revise TcpStream to support peer_addr

4 years agoRollup merge of #73304 - dtolnay:socketeq, r=Mark-Simulacrum
Ralf Jung [Mon, 15 Jun 2020 10:01:13 +0000 (12:01 +0200)]
Rollup merge of #73304 - dtolnay:socketeq, r=Mark-Simulacrum

Revert heterogeneous SocketAddr PartialEq impls

Originally added in #72239.

These lead to inference regressions (mostly in tests) in code that looks like:

```rust
let socket = SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 8080);
assert_eq!(socket, "127.0.0.1:8080".parse().unwrap());
```

That compiles as of stable 1.44.0 but fails in beta with:

```console
error[E0284]: type annotations needed
 --> src/main.rs:3:41
  |
3 |     assert_eq!(socket, "127.0.0.1:8080".parse().unwrap());
  |                                         ^^^^^ cannot infer type for type parameter `F` declared on the associated function `parse`
  |
  = note: cannot satisfy `<_ as std::str::FromStr>::Err == _`
help: consider specifying the type argument in the method call
  |
3 |     assert_eq!(socket, "127.0.0.1:8080".parse::<F>().unwrap());
  |
```

Closes #73242.

4 years agoRollup merge of #73296 - ehuss:remove-msvc-aux, r=Mark-Simulacrum
Ralf Jung [Mon, 15 Jun 2020 10:01:11 +0000 (12:01 +0200)]
Rollup merge of #73296 - ehuss:remove-msvc-aux, r=Mark-Simulacrum

Remove vestigial CI job msvc-aux.

This CI job isn't really doing anything, so it seems prudent to remove it.

For some history:
* This was introduced in #48809 when the msvc job was split in two to keep it under 2 hours (oh the good old days). At the time, this check-aux job did a bunch of things:
    * tidy
    * src/test/pretty
    * src/test/run-pass/pretty
    * src/test/run-fail/pretty
    * src/test/run-pass-valgrind/pretty
    * src/test/run-pass-fulldeps/pretty
    * src/test/run-fail-fulldeps/pretty
* Tidy was removed in #60777.
* run-pass and run-pass-fulldeps moved to UI in #63029
* src/test/pretty removed in #58140
* src/test/run-fail moved to UI in #71185
* run-fail-fulldeps removed in #51285

Over time through attrition, the job was left with one lonely thing: `src/test/run-pass-valgrind/pretty`. And of course, this wasn't actually running the "pretty" tests. The normal `run-pass-valgrind` tests ran, and then when it tried to run in "pretty" mode, all the tests were ignored because compiletest thought nothing had changed (apparently compiletest isn't fingerprinting the mode?  Needs more investigation…). `run-pass-valgrind` is already being run as part of `x86_64-msvc-1`, so there's no need to run it here.

I've taken the liberty of removing `src/test/run-pass-valgrind/pretty` as a distinct test. I'm guessing from the other PR's that the pretty tests should now live in `src/test/pretty`, and that the team has moved away from doing pretty tests on other parts of the `src/test` tree.

4 years agoRollup merge of #73139 - poliorcetics:cstring-from-vec-with-nul, r=dtolnay
Ralf Jung [Mon, 15 Jun 2020 10:01:09 +0000 (12:01 +0200)]
Rollup merge of #73139 - poliorcetics:cstring-from-vec-with-nul, r=dtolnay

Add methods to go from a nul-terminated Vec<u8> to a CString

Fixes #73100.

Doc tests have been written and the documentation on the error type
updated too.

I used `#[stable(feature = "cstring_from_vec_with_nul", since = "1.46.0")]` but I don't know if the version is correct.

4 years agoRollup merge of #73104 - poliorcetics:explicit-mutex-drop-example, r=dtolnay
Ralf Jung [Mon, 15 Jun 2020 10:01:07 +0000 (12:01 +0200)]
Rollup merge of #73104 - poliorcetics:explicit-mutex-drop-example, r=dtolnay

Example about explicit mutex dropping

Fixes #67457.

Following the remarks made in #73074, I added an example on the main `Mutex` type, with a situation where there is mutable data and a computation result.

In my testing it is effectively needed to explicitly drop the lock, else it deadlocks.

r? @dtolnay because you were the one to review the previous PR.

4 years agoRollup merge of #73086 - trevyn:apple-a7, r=nikic
Ralf Jung [Mon, 15 Jun 2020 10:01:05 +0000 (12:01 +0200)]
Rollup merge of #73086 - trevyn:apple-a7, r=nikic

Rename "cyclone" to "apple-a7" per changes in upstream LLVM

It looks like they intended to keep "cyclone" as a legacy option, but removed it from the list of subtarget features. This created a flood of warnings when targeting aarch64-apple-ios, and probably also created incorrectly optimized artifacts.

See:
https://reviews.llvm.org/D70779
https://reviews.llvm.org/D70779#C1703593NL568

LLVM 10 merged into master at:
https://github.com/rust-lang/rust/pull/67759

4 years agoRollup merge of #72938 - lzutao:stabilize_option_zip, r=dtolnay
Ralf Jung [Mon, 15 Jun 2020 10:01:03 +0000 (12:01 +0200)]
Rollup merge of #72938 - lzutao:stabilize_option_zip, r=dtolnay

Stabilize Option::zip

This PR stabilizes the following API:

```rust
impl<T> Option<T> {
    pub fn zip<U>(self, other: Option<U>) -> Option<(T, U)>;
}
```

This API has real world usage as seen in <https://grep.app/search?q=-%3E%20Option%3C%5C%28T%2C%5Cs%3FU%5C%29%3E&regexp=true&filter[lang][0]=Rust>.

The `zip_with` method is left unstably as this API is kinda niche
and it hasn't received much usage in Rust repositories on GitHub.

cc #70086

4 years agoRollup merge of #72879 - RalfJung:miri-tctx-at, r=oli-obk
Ralf Jung [Mon, 15 Jun 2020 10:01:01 +0000 (12:01 +0200)]
Rollup merge of #72879 - RalfJung:miri-tctx-at, r=oli-obk

Miri: avoid tracking current location three times

Miri tracks the current instruction to execute in the call stack, but it also additionally has two `TyCtxtAt` that carry a `Span` that also tracks the current instruction. That is quite silly, so this PR uses `TyCtxt` instead, and then uses a method for computing the current span when a `TyCtxtAt` is needed. Having less redundant (semi-)global state seems like a good improvement to me. :D

To keep the ConstProp errors the same, I had to add the option to `error_to_const_error` to overwrite the span. Also for some reason this changes cycle errors a bit -- not sure if we are now better or worse as giving those queries the right span. (It is unfortunately quite easy to accidentally use `DUMMY_SP` by calling the query on a `TyCtxt` instead of a `TyCtxtAt`.)

r? @oli-obk @eddyb

4 years agoRollup merge of #72740 - estebank:recursive-indirection, r=matthewjasper
Ralf Jung [Mon, 15 Jun 2020 10:00:59 +0000 (12:00 +0200)]
Rollup merge of #72740 - estebank:recursive-indirection, r=matthewjasper

On recursive ADT, provide indirection structured suggestion

4 years agoRollup merge of #72707 - matthewjasper:rustc_min_spec, r=oli-obk
Ralf Jung [Mon, 15 Jun 2020 10:00:58 +0000 (12:00 +0200)]
Rollup merge of #72707 - matthewjasper:rustc_min_spec, r=oli-obk

Use min_specialization in the remaining rustc crates

This adds a lot of `transmute` calls to replace the unsound uses of specialization.
It's ugly, but at least it's honest about what's going on.

cc #71420, @RalfJung

4 years agoFix sanitizer test
Nathan Corbyn [Mon, 15 Jun 2020 09:21:19 +0000 (10:21 +0100)]
Fix sanitizer test

4 years agoFix whitespace
Nathan Corbyn [Tue, 9 Jun 2020 14:54:34 +0000 (15:54 +0100)]
Fix whitespace

4 years agoFix exports with `#[inline(always)]`
Nathan Corbyn [Tue, 9 Jun 2020 14:49:59 +0000 (15:49 +0100)]
Fix exports with `#[inline(always)]`

4 years agoFix whitespace
Nathan Corbyn [Mon, 8 Jun 2020 08:54:33 +0000 (09:54 +0100)]
Fix whitespace

4 years agoExport all fns with extern indicator
Nathan Corbyn [Mon, 8 Jun 2020 08:37:11 +0000 (09:37 +0100)]
Export all fns with extern indicator

4 years agoExport `#[inline] #[no_mangle]` fns in cdylibs and staticlibs
Nathan Corbyn [Fri, 5 Jun 2020 15:47:37 +0000 (16:47 +0100)]
Export `#[inline] #[no_mangle]` fns in cdylibs and staticlibs

4 years agoAuto merge of #73367 - RalfJung:rollup-4ewvk9b, r=RalfJung
bors [Mon, 15 Jun 2020 08:09:38 +0000 (08:09 +0000)]
Auto merge of #73367 - RalfJung:rollup-4ewvk9b, r=RalfJung

Rollup of 10 pull requests

Successful merges:

 - #71824 (Check for live drops in constants after drop elaboration)
 - #72389 (Explain move errors that occur due to method calls involving `self`)
 - #72556 (Fix trait alias inherent impl resolution)
 - #72584 (Stabilize vec::Drain::as_slice)
 - #72598 (Display information about captured variable in `FnMut` error)
 - #73336 (Group `Pattern::strip_*` method together)
 - #73341 (_match.rs: fix module doc comment)
 - #73342 (Fix iterator copied() documentation example code)
 - #73351 (Update E0446.md)
 - #73353 (structural_match: non-structural-match ty closures)

Failed merges:

r? @ghost

4 years agoremove obsolete , to pass the format check
Stefan Lankes [Mon, 15 Jun 2020 08:05:14 +0000 (10:05 +0200)]
remove obsolete , to pass the format check

4 years agoAvoid forming references to an uninitialized memory in DroplessArena
Tomasz Miąsko [Sun, 14 Jun 2020 00:00:00 +0000 (00:00 +0000)]
Avoid forming references to an uninitialized memory in DroplessArena

Return a pointer from `alloc_raw` instead of a slice. There is no
practical use for slice as a return type and changing it to a pointer
avoids forming references to an uninitialized memory.

4 years agoRollup merge of #73353 - davidtwco:issue-73003-non-structural-match-ty-closures,...
Ralf Jung [Mon, 15 Jun 2020 07:57:37 +0000 (09:57 +0200)]
Rollup merge of #73353 - davidtwco:issue-73003-non-structural-match-ty-closures, r=varkor

structural_match: non-structural-match ty closures

Fixes #73003.

This PR adds a `Closure` variant to `NonStructuralMatchTy` in `structural_match`, fixing an ICE which can occur when `impl_trait_in_bindings` is used with constants.

4 years agoRollup merge of #73351 - gnodarse:patch-1, r=ecstatic-morse
Ralf Jung [Mon, 15 Jun 2020 07:57:35 +0000 (09:57 +0200)]
Rollup merge of #73351 - gnodarse:patch-1, r=ecstatic-morse

Update E0446.md

The existing error documentation did not show how to use a child module's functions if the types used in those functions are private. These are some other places this problem has popped up that did not present a solution (these are from before the solution existed, 2016-2017. The solution was released in the Rust 2018 edition. However these were the places I was pointed to when I encountered the problem myself):
https://github.com/rust-lang/rust/issues/30905
https://stackoverflow.com/questions/39334430/how-to-reference-private-types-from-public-functions-in-private-modules/62374958#62374958

4 years agoRollup merge of #73342 - schteve:master, r=jonas-schievink
Ralf Jung [Mon, 15 Jun 2020 07:57:33 +0000 (09:57 +0200)]
Rollup merge of #73342 - schteve:master, r=jonas-schievink

Fix iterator copied() documentation example code

The documentation for copied() gives example code with variable v_cloned instead of v_copied. This seems like a copy/paste error from cloned() and it would be clearer to use v_copied.

4 years agoRollup merge of #73341 - jonas-schievink:matchdoc, r=davidtwco
Ralf Jung [Mon, 15 Jun 2020 07:57:32 +0000 (09:57 +0200)]
Rollup merge of #73341 - jonas-schievink:matchdoc, r=davidtwco

_match.rs: fix module doc comment

It was applied to a `use` item, not to the module

4 years agoRollup merge of #73336 - lzutao:pattern-group, r=sfackler
Ralf Jung [Mon, 15 Jun 2020 07:57:30 +0000 (09:57 +0200)]
Rollup merge of #73336 - lzutao:pattern-group, r=sfackler

Group `Pattern::strip_*` method together

4 years agoRollup merge of #72598 - Aaron1011:feature/fnmut-capture-span, r=nikomatsakis
Ralf Jung [Mon, 15 Jun 2020 07:57:28 +0000 (09:57 +0200)]
Rollup merge of #72598 - Aaron1011:feature/fnmut-capture-span, r=nikomatsakis

Display information about captured variable in `FnMut` error

Fixes #69446

When we encounter a region error involving an `FnMut` closure, we
display a specialized error message. However, we currently do not
tell the user which upvar was captured. This makes it difficult to
determine the cause of the error, especially when the closure is large.

This commit records marks constraints involving closure upvars
with `ConstraintCategory::ClosureUpvar`. When we decide to 'blame'
a `ConstraintCategory::Return`, we additionall store
the captured upvar if we found a `ConstraintCategory::ClosureUpvar` in
the path.

When generating an error message, we point to relevant spans if we have
closure upvar information available. We further customize the message if
an `async` closure is being returned, to make it clear that the captured
variable is being returned indirectly.

4 years agoRollup merge of #72584 - CAD97:stabilize-58957, r=dtolnay
Ralf Jung [Mon, 15 Jun 2020 07:57:26 +0000 (09:57 +0200)]
Rollup merge of #72584 - CAD97:stabilize-58957, r=dtolnay

Stabilize vec::Drain::as_slice

and add `AsRef<[T]> for Drain<'_, T>`.

Tracking issue: #58957. Does not stabilize `slice::IterMut::as_slice` yet. cc @cuviper
This PR proposes stabilizing just the `vec::Drain::as_slice` part of that tracking issue.

My ultimate goal here: being able to use `for<T, I: Iterator<Item=T> + AsRef<[T]>> I` to refer to `vec::IntoIter`, `vec::Drain`, and eventually `array::IntoIter`, as an approximation of the set of by-value iterators that can be "previewed" as by-ref iterators. (Actually expressing that as a trait requires GAT.)

4 years agoRollup merge of #72556 - matthew-mcallister:trait-alias-inherent-impl, r=estebank
Ralf Jung [Mon, 15 Jun 2020 07:57:24 +0000 (09:57 +0200)]
Rollup merge of #72556 - matthew-mcallister:trait-alias-inherent-impl, r=estebank

Fix trait alias inherent impl resolution

Fixes #60021 and fixes #72415.

Obviously, the fix was very easy, but getting started with the testing and debugging rust compiler was an interesting experience. Now I can cross it off my bucket list!

4 years agoRollup merge of #72389 - Aaron1011:feature/move-fn-self-msg, r=nikomatsakis
Ralf Jung [Mon, 15 Jun 2020 07:57:22 +0000 (09:57 +0200)]
Rollup merge of #72389 - Aaron1011:feature/move-fn-self-msg, r=nikomatsakis

Explain move errors that occur due to method calls involving `self`

When calling a method that takes `self` (e.g. `vec.into_iter()`), the method receiver is moved out of. If the method receiver is used again, a move error will be emitted::

```rust
fn main() {
    let a = vec![true];
    a.into_iter();
    a;
}
```

emits

```
error[E0382]: use of moved value: `a`
 --> src/main.rs:4:5
  |
2 |     let a = vec![true];
  |         - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
3 |     a.into_iter();
  |     - value moved here
4 |     a;
  |     ^ value used here after move
```

However, the error message doesn't make it clear that the move is caused by the call to `into_iter`.

This PR adds additional messages to move errors when the move is caused by using a value as the receiver of a `self` method::

```
error[E0382]: use of moved value: `a`
   --> vec.rs:4:5
    |
2   |     let a = vec![true];
    |         - move occurs because `a` has type `std::vec::Vec<bool>`, which does not implement the `Copy` trait
3   |     a.into_iter();
    |     ------------- value moved due to this method call
4   |     a;
    |     ^ value used here after move
    |
note: this function takes `self`, which moves the receiver
   --> /home/aaron/repos/rust/src/libcore/iter/traits/collect.rs:239:5
    |
239 |     fn into_iter(self) -> Self::IntoIter;
```

TODO:

- [x] Add special handling for `FnOnce/FnMut/Fn` - we probably don't want to point at the unstable trait methods
- [x] Consider adding additional context for operations (e.g. `Shr::shr`) when the call was generated using the operator syntax (e.g. `a >> b`)
- [x] Consider pointing to the method parent (impl or trait block) in addition to the method itself.

4 years agoRollup merge of #71824 - ecstatic-morse:const-check-post-drop-elab, r=oli-obk
Ralf Jung [Mon, 15 Jun 2020 07:57:20 +0000 (09:57 +0200)]
Rollup merge of #71824 - ecstatic-morse:const-check-post-drop-elab, r=oli-obk

Check for live drops in constants after drop elaboration

Resolves #66753.

This PR splits the MIR "optimization" pass series in two and introduces a query–`mir_drops_elaborated_and_const_checked`–that holds the result of the `post_borrowck_cleanup` analyses and checks for live drops. This query is invoked in `rustc_interface` for all items requiring const-checking, which means we now do `post_borrowck_cleanup` for items even if they are unused in the crate.

As a result, we are now more precise about when drops are live. This is because drop elaboration can e.g. eliminate drops of a local when all its fields are moved from. This does not mean we are doing value-based analysis on move paths, however; Storing a `Some(CustomDropImpl)` into a field of a local will still set the qualifs for that entire local.

r? @oli-obk

4 years agoCheck for overflow in DroplessArena and return aligned pointer
Tomasz Miąsko [Thu, 11 Jun 2020 00:00:00 +0000 (00:00 +0000)]
Check for overflow in DroplessArena and return aligned pointer

* Check for overflow when calculating the slice start & end position.
* Align the pointer obtained from the allocator, ensuring that it
  satisfies user requested alignment (the allocator is only asked for
  layout compatible with u8 slice).
* Remove an incorrect assertion from DroplessArena::align.

4 years agoadd comment about the usage of Arc
Stefan Lankes [Mon, 15 Jun 2020 07:29:32 +0000 (09:29 +0200)]
add comment about the usage of Arc

4 years agouse Ipv6Addr::from to build the IPv6 address
Stefan Lankes [Mon, 15 Jun 2020 06:53:58 +0000 (08:53 +0200)]
use Ipv6Addr::from to build the IPv6 address

4 years agoRevert "simplify conversion to IpAddr::V6"
Stefan Lankes [Mon, 15 Jun 2020 06:43:44 +0000 (08:43 +0200)]
Revert "simplify conversion to IpAddr::V6"

This reverts commit d221ffc68e543f4a38efcc2bd34f52145f89003b.

4 years agoRevert "changes to pass the format check"
Stefan Lankes [Mon, 15 Jun 2020 06:43:08 +0000 (08:43 +0200)]
Revert "changes to pass the format check"

This reverts commit 9d596b50f15dfff47fa2272ee63cdc9aeb9307fa.

4 years agoremove obsolete line
Stefan Lankes [Mon, 15 Jun 2020 06:07:56 +0000 (08:07 +0200)]
remove obsolete line

4 years agochanges to pass the format check
Stefan Lankes [Mon, 15 Jun 2020 05:28:53 +0000 (07:28 +0200)]
changes to pass the format check

4 years agoAuto merge of #72080 - matthewjasper:uniform-impl-trait, r=nikomatsakis
bors [Mon, 15 Jun 2020 04:10:24 +0000 (04:10 +0000)]
Auto merge of #72080 - matthewjasper:uniform-impl-trait, r=nikomatsakis

Clean up type alias impl trait implementation

- Removes special case for top-level impl trait
- Removes associated opaque types
- Forbid lifetime elision in let position impl trait. This is consistent with the behavior for inferred types.
- Handle lifetimes in type alias impl trait more uniformly with other parameters

cc #69323
cc #63063
Closes #57188
Closes #62988
Closes #69136
Closes #73061