]> git.lizzy.rs Git - rust.git/log
rust.git
4 years agosimplify
Markus Westerlind [Tue, 25 Feb 2020 14:39:01 +0000 (15:39 +0100)]
simplify

4 years agoperf: Merge region_obligations snapshotting into the undo log
Markus Westerlind [Tue, 25 Feb 2020 13:45:07 +0000 (14:45 +0100)]
perf: Merge region_obligations snapshotting into the undo log

4 years agoperf: Limit leak check snapshotting to probe_maybe_skip_leak_check
Markus Westerlind [Tue, 25 Feb 2020 13:31:07 +0000 (14:31 +0100)]
perf: Limit leak check snapshotting to probe_maybe_skip_leak_check

4 years agoperf: Lazily recive the Rollback argument in rollback_to
Markus Westerlind [Tue, 25 Feb 2020 13:08:34 +0000 (14:08 +0100)]
perf: Lazily recive the Rollback argument in rollback_to

4 years agoperf: Separate CombinedSnapshot into a FullSnapshot for probing
Markus Westerlind [Tue, 25 Feb 2020 12:32:58 +0000 (13:32 +0100)]
perf: Separate CombinedSnapshot into a FullSnapshot for probing

4 years agoMove projection_cache into the combined undo log
Markus Westerlind [Tue, 25 Feb 2020 12:08:38 +0000 (13:08 +0100)]
Move projection_cache into the combined undo log

4 years agoAllow SnapshotMap to have a separate undo_log
Markus Westerlind [Tue, 25 Feb 2020 09:29:47 +0000 (10:29 +0100)]
Allow SnapshotMap to have a separate undo_log

4 years agoMove region_constraint to the unified undo log
Markus Westerlind [Tue, 25 Feb 2020 08:47:07 +0000 (09:47 +0100)]
Move region_constraint to the unified undo log

4 years agoperf: Reduce snapshot/rollback overhead
Markus Westerlind [Mon, 24 Feb 2020 09:40:36 +0000 (10:40 +0100)]
perf: Reduce snapshot/rollback overhead

By merging the undo_log of all structures part of the snapshot the cost
of creating a snapshot becomes much cheaper. Since snapshots with no or
few changes are so frequent this ends up mattering more than the slight
overhead of dispatching on the variants that map to each field.

4 years agoAllow `hir().find` to return `None`
John Kåre Alsaker [Mon, 16 Mar 2020 18:17:40 +0000 (19:17 +0100)]
Allow `hir().find` to return `None`

4 years agoAuto merge of #71907 - Dylan-DPC:rollup-z8iaqlv, r=Dylan-DPC
bors [Tue, 5 May 2020 02:51:41 +0000 (02:51 +0000)]
Auto merge of #71907 - Dylan-DPC:rollup-z8iaqlv, r=Dylan-DPC

Rollup of 10 pull requests

Successful merges:

 - #71587 (Report cannot move errors in promoted MIR)
 - #71711 (Updates to some ignored tests)
 - #71845 (Add const examples)
 - #71878 (Add remove_current_as_list to LinkedList's CursorMut)
 - #71881 (Correctly handle UEFI targets as Windows-like when emitting sections for LLVM bitcode)
 - #71883 (add a missing "at" in a comment)
 - #71891 (¬∃x. ¬y => ∀x. y)
 - #71892 (Update btree_map::VacantEntry::insert docs to actually call insert)
 - #71902 (Suggest to add missing feature when using gated const features)
 - #71904 (fix typo in function name)

Failed merges:

r? @ghost

4 years agoRollup merge of #71904 - euclio:function-typo, r=jonas-schievink
Dylan DPC [Mon, 4 May 2020 23:49:52 +0000 (01:49 +0200)]
Rollup merge of #71904 - euclio:function-typo, r=jonas-schievink

fix typo in function name

Drive-by fix.

4 years agoRollup merge of #71902 - mibac138:const-feature-diag, r=varkor
Dylan DPC [Mon, 4 May 2020 23:49:51 +0000 (01:49 +0200)]
Rollup merge of #71902 - mibac138:const-feature-diag, r=varkor

Suggest to add missing feature when using gated const features

Fixes #71797

4 years agoRollup merge of #71892 - integer32llc:btreemap-entry-vacant-docs, r=jonas-schievink
Dylan DPC [Mon, 4 May 2020 23:49:49 +0000 (01:49 +0200)]
Rollup merge of #71892 - integer32llc:btreemap-entry-vacant-docs, r=jonas-schievink

Update btree_map::VacantEntry::insert docs to actually call insert

It looks like they were copied from the `or_insert` docs. This change
makes the example more like the hash_map::VacantEntry::insert docs.

4 years agoRollup merge of #71891 - lcnr:not-iter-any, r=Dylan-DPC
Dylan DPC [Mon, 4 May 2020 23:49:48 +0000 (01:49 +0200)]
Rollup merge of #71891 - lcnr:not-iter-any, r=Dylan-DPC

¬∃x. ¬y => ∀x. y

4 years agoRollup merge of #71883 - Dante-Broggi:patch-1, r=Dylan-DPC
Dylan DPC [Mon, 4 May 2020 23:49:46 +0000 (01:49 +0200)]
Rollup merge of #71883 - Dante-Broggi:patch-1, r=Dylan-DPC

add a missing "at" in a comment

4 years agoRollup merge of #71881 - IsaacWoods:master, r=petrochenkov
Dylan DPC [Mon, 4 May 2020 23:49:44 +0000 (01:49 +0200)]
Rollup merge of #71881 - IsaacWoods:master, r=petrochenkov

Correctly handle UEFI targets as Windows-like when emitting sections for LLVM bitcode

This handles UEFI handles when emitting inline assembly for sections containing LLVM bitcode. See details in #71880. I have locally confirmed that this change fixes compilation of projects using the `x86_64-unknown-uefi` target compiling with `cargo-xbuild`, but I am not very familiar with LLVM bitcode so this may not be the correct approach.

r? @alexcrichton as they wrote the initial LLVM bitcode emitting code?

4 years agoRollup merge of #71878 - main--:patch-2, r=Amanieu
Dylan DPC [Mon, 4 May 2020 23:49:43 +0000 (01:49 +0200)]
Rollup merge of #71878 - main--:patch-2, r=Amanieu

Add remove_current_as_list to LinkedList's CursorMut

The `remove_current` method only returns the inner `T` and deallocates the list node. This is unnecessary for move operations, where the element is going to be linked back into this (or even a different) `LinkedList`. The `remove_current_as_list` method avoids this by returning the unlinked list node as a new single-element `LinkedList` structure.

(per https://github.com/rust-lang/rust/issues/58533#issuecomment-623010157)

4 years agoRollup merge of #71845 - steveklabnik:add-const-examples, r=dtolnay
Dylan DPC [Mon, 4 May 2020 23:49:41 +0000 (01:49 +0200)]
Rollup merge of #71845 - steveklabnik:add-const-examples, r=dtolnay

Add const examples

I only added them to `std::f32` to get feedback on this approach before adding the other constants.

When looking at https://github.com/rust-lang/rust/pull/68952, I found the docs a little confusing. Unless you're intimately aware of what's going on here, I don't think it's super clear what is deprecated and what you're supposed to do instead. I think short examples really clarify what's meant here, so that's what I did.

4 years agoRollup merge of #71711 - Mark-Simulacrum:deignore-tests, r=nikomatsakis
Dylan DPC [Mon, 4 May 2020 23:49:37 +0000 (01:49 +0200)]
Rollup merge of #71711 - Mark-Simulacrum:deignore-tests, r=nikomatsakis

Updates to some ignored tests

This removes or fixes some ignored test cases.

cc #13745

4 years agoRollup merge of #71587 - matthewjasper:promoted-move-errors, r=nikomatsakis
Dylan DPC [Mon, 4 May 2020 23:49:32 +0000 (01:49 +0200)]
Rollup merge of #71587 - matthewjasper:promoted-move-errors, r=nikomatsakis

Report cannot move errors in promoted MIR

Closes #70934

4 years agofix typo in function name
Andy Russell [Mon, 4 May 2020 22:27:23 +0000 (18:27 -0400)]
fix typo in function name

4 years agoSuggest to add missing feature when using gated const features
mibac138 [Mon, 4 May 2020 21:33:10 +0000 (23:33 +0200)]
Suggest to add missing feature when using gated const features

4 years agoUpdate btree_map::VacantEntry::insert docs to actually call insert
Carol (Nichols || Goulding) [Mon, 4 May 2020 19:49:11 +0000 (15:49 -0400)]
Update btree_map::VacantEntry::insert docs to actually call insert

It looks like they were copied from the `or_insert` docs. This change
makes the example more like the hash_map::VacantEntry::insert docs.

4 years agodouble neg
Bastian Kauschke [Mon, 4 May 2020 19:04:11 +0000 (21:04 +0200)]
double neg

4 years agoAuto merge of #71879 - Dylan-DPC:rollup-n05awny, r=Dylan-DPC
bors [Mon, 4 May 2020 17:34:51 +0000 (17:34 +0000)]
Auto merge of #71879 - Dylan-DPC:rollup-n05awny, r=Dylan-DPC

Rollup of 5 pull requests

Successful merges:

 - #71038 (forbid `dyn Trait` in patterns)
 - #71697 (Added MIR constant propagation of Scalars into function call arguments)
 - #71773 (doc: misc rustdoc things)
 - #71810 (Do not try to find binop method on RHS `TyErr`)
 - #71877 (Use f64 in f64 examples)

Failed merges:

r? @ghost

4 years agoadd a missing word
Dante Broggi [Mon, 4 May 2020 15:42:57 +0000 (11:42 -0400)]
add a missing word

4 years agoCorrectly handle UEFI targets as Windows-like when emitting sections for LLVM bitcode
Isaac Woods [Mon, 4 May 2020 15:27:46 +0000 (16:27 +0100)]
Correctly handle UEFI targets as Windows-like when emitting sections for LLVM bitcode

4 years agoRollup merge of #71877 - steveklabnik:small-example-fix, r=Mark-Simulacrum
Dylan DPC [Mon, 4 May 2020 14:15:41 +0000 (16:15 +0200)]
Rollup merge of #71877 - steveklabnik:small-example-fix, r=Mark-Simulacrum

Use f64 in f64 examples

I believe that this is a copy/paste error; this example was using f32,
but it's the docs for f64.

4 years agoRollup merge of #71810 - estebank:issue-71798, r=davidtwco
Dylan DPC [Mon, 4 May 2020 14:15:37 +0000 (16:15 +0200)]
Rollup merge of #71810 - estebank:issue-71798, r=davidtwco

Do not try to find binop method on RHS `TyErr`

Fix #71798.

4 years agoRollup merge of #71773 - tshepang:links, r=davidtwco
Dylan DPC [Mon, 4 May 2020 14:15:32 +0000 (16:15 +0200)]
Rollup merge of #71773 - tshepang:links, r=davidtwco

doc: misc rustdoc things

4 years agoRollup merge of #71697 - felix91gr:new_prop_into_fn_call, r=wesleywiser
Dylan DPC [Mon, 4 May 2020 14:15:28 +0000 (16:15 +0200)]
Rollup merge of #71697 - felix91gr:new_prop_into_fn_call, r=wesleywiser

Added MIR constant propagation of Scalars into function call arguments

Now for the function call arguments!

Caveats:
1. It's only being enabled at `mir-opt-2` or higher, because currently codegen gives performance regressions with this optimization.
2. Only propagates Scalars. Tuples and references (references are `Indirect`, right??) are not being propagated into as of this PR.
3. Maybe more tests would be nice?
4. I need (shamefully) to ask @wesleywiser to write in his words (or explain to me, and then I can write it down) why we want to ignore propagation into `ScalarPairs` and `Indirect` arguments.

r? @wesleywiser

4 years agoRollup merge of #71038 - lcnr:dyn_trait_structural_match, r=pnkfelix
Dylan DPC [Mon, 4 May 2020 14:15:24 +0000 (16:15 +0200)]
Rollup merge of #71038 - lcnr:dyn_trait_structural_match, r=pnkfelix

forbid `dyn Trait` in patterns

Do not allow `&dyn Trait` as a generic const parameters.
This also changes dyn trait in pattern from ICE to error.

closes #63322
closes #70972

r? @eddyb

4 years agoAuto merge of #71754 - alexcrichton:no-bitcode-in-cache, r=nnethercote
bors [Mon, 4 May 2020 14:14:55 +0000 (14:14 +0000)]
Auto merge of #71754 - alexcrichton:no-bitcode-in-cache, r=nnethercote

Don't copy bytecode files into the incr. comp. cache.

It's no longer necessary now that bitcode is embedded into object files.

This change meant that `WorkProductFileKind::Bytecode` is no longer
necessary, which means that type is no longer necessary, which allowed
several places in the code to become simpler.

This commit was written by @nnethercote in https://github.com/rust-lang/rust/pull/70458 but that didn't land. In the meantime though we managed to land it in https://github.com/rust-lang/rust/pull/71528 and that doesn't seem to be causing too many fires, so I'm re-sending this patch!

4 years agowhoops
main() [Mon, 4 May 2020 14:10:59 +0000 (16:10 +0200)]
whoops

4 years agoAdd remove_current_as_list to LinkedList's CursorMut
main() [Mon, 4 May 2020 13:53:02 +0000 (15:53 +0200)]
Add remove_current_as_list to LinkedList's CursorMut

The `remove_current` method only returns the inner `T` and deallocates the list node. This is unnecessary for move operations, where the element is going to be linked back into this (or even a different) `LinkedList`. The `remove_current_as_list` method avoids this by returning the unlinked list node as a new single-element `LinkedList` structure .

4 years agoUse f64 in f64 examples
Steve Klabnik [Mon, 4 May 2020 13:28:53 +0000 (08:28 -0500)]
Use f64 in f64 examples

I believe that this is a copy/paste error; this example was using f32,
but it's the docs for f64.

4 years agoAdd examples to int macros
Steve Klabnik [Mon, 4 May 2020 13:26:39 +0000 (08:26 -0500)]
Add examples to int macros

4 years agof64 examples
Steve Klabnik [Mon, 4 May 2020 13:14:38 +0000 (08:14 -0500)]
f64 examples

4 years agocorrect -> intended
Steve Klabnik [Mon, 4 May 2020 13:07:20 +0000 (08:07 -0500)]
correct -> intended

4 years agoadd some whitespace
Steve Klabnik [Sun, 3 May 2020 14:02:58 +0000 (09:02 -0500)]
add some whitespace

4 years agoAdd examples for std::f32 constants.
Steve Klabnik [Sun, 3 May 2020 14:01:14 +0000 (09:01 -0500)]
Add examples for std::f32 constants.

And also point people to use the associated constants of f32 instead.

4 years agoAuto merge of #71751 - oli-obk:const_ice, r=RalfJung
bors [Mon, 4 May 2020 09:39:53 +0000 (09:39 +0000)]
Auto merge of #71751 - oli-obk:const_ice, r=RalfJung

Move recursion check for zsts back to read site instead of access check site

Reverts https://github.com/rust-lang/rust/pull/71140#discussion_r413709446

Fix #71612
Fix #71709

r? @RalfJung

4 years agoAuto merge of #71108 - estebank:suggest-proj-type-mismatch-constraint, r=oli-obk
bors [Mon, 4 May 2020 06:32:49 +0000 (06:32 +0000)]
Auto merge of #71108 - estebank:suggest-proj-type-mismatch-constraint, r=oli-obk

On type mismatch involving associated type, suggest constraint

When an associated type is found when a specific type was expected, if
possible provide a structured suggestion constraining the associated
type in a bound.

```
error[E0271]: type mismatch resolving `<T as Foo>::Y == i32`
  --> $DIR/associated-types-multiple-types-one-trait.rs:13:5
   |
LL |     want_y(t);
   |     ^^^^^^ expected `i32`, found associated type
...
LL | fn want_y<T:Foo<Y=i32>>(t: &T) { }
   |                 ----- required by this bound in `want_y`
   |
   = note:         expected type `i32`
           found associated type `<T as Foo>::Y`
help: consider constraining the associated type `<T as Foo>::Y` to `i32`
   |
LL | fn have_x_want_y<T:Foo<X=u32, Y = i32>>(t: &T)
   |                             ^^^^^^^^^
```

```
error[E0308]: mismatched types
  --> $DIR/trait-with-missing-associated-type-restriction.rs:12:9
   |
LL |     qux(x.func())
   |         ^^^^^^^^ expected `usize`, found associated type
   |
   = note:         expected type `usize`
           found associated type `<impl Trait as Trait>::A`
help: consider constraining the associated type `<impl Trait as Trait>::A` to `usize`
   |
LL | fn foo(x: impl Trait<A = usize>) {
   |                     ^^^^^^^^^^
```

Fix #71035. Related to #70908.

4 years agoAuto merge of #71866 - Dylan-DPC:rollup-g9xqc8k, r=Dylan-DPC
bors [Mon, 4 May 2020 01:48:07 +0000 (01:48 +0000)]
Auto merge of #71866 - Dylan-DPC:rollup-g9xqc8k, r=Dylan-DPC

Rollup of 4 pull requests

Successful merges:

 - #71645 (Direct contributors to try stage 0 rustdoc first)
 - #71801 (Correctly check comparison operator in MIR typeck)
 - #71844 (List Clippy as a subtree, instead of a submodule)
 - #71864 (Update link in contributing.md)

Failed merges:

r? @ghost

4 years agoreview comment: use early return
Esteban Küber [Mon, 4 May 2020 01:20:53 +0000 (18:20 -0700)]
review comment: use early return

4 years agoRollup merge of #71864 - mibac138:patch-1, r=jonas-schievink
Dylan DPC [Mon, 4 May 2020 01:15:03 +0000 (03:15 +0200)]
Rollup merge of #71864 - mibac138:patch-1, r=jonas-schievink

Update link in contributing.md

4 years agoRollup merge of #71844 - flip1995:subtree_clippy_doc, r=oli-obk
Dylan DPC [Mon, 4 May 2020 01:15:01 +0000 (03:15 +0200)]
Rollup merge of #71844 - flip1995:subtree_clippy_doc, r=oli-obk

List Clippy as a subtree, instead of a submodule

r? @oli-obk

4 years agoRollup merge of #71801 - matthewjasper:operator-subtyping, r=varkor
Dylan DPC [Mon, 4 May 2020 01:14:57 +0000 (03:14 +0200)]
Rollup merge of #71801 - matthewjasper:operator-subtyping, r=varkor

Correctly check comparison operator in MIR typeck

The subtyping for comparisons between pointers was reversed in MIR typeck.
There also wasn't a check that comparisons between numeric types had matching types.

4 years agoRollup merge of #71645 - ecstatic-morse:readme-build-doc, r=Mark-Simulacrum
Dylan DPC [Mon, 4 May 2020 01:14:53 +0000 (03:14 +0200)]
Rollup merge of #71645 - ecstatic-morse:readme-build-doc, r=Mark-Simulacrum

Direct contributors to try stage 0 rustdoc first

After #71458, `./x.py doc --stage 0 src/libstd` is (empirically) able to build the standard library docs using the `rustdoc` packaged with the bootstrap compiler. This means that new contributors don't need to build the compiler to locally inspect small documentation fixes. This was a roadblock for me when I first started contributing to rust and something that still regularly annoys people. We should recommend that contributors give bootstrap `rustdoc` a try before building the whole compiler.

4 years agoreview comments: move logic to their own methods
Esteban Küber [Sun, 3 May 2020 23:42:54 +0000 (16:42 -0700)]
review comments: move logic to their own methods

4 years agoAuto merge of #71631 - RalfJung:miri-unleash-the-gates, r=oli-obk
bors [Sun, 3 May 2020 22:54:55 +0000 (22:54 +0000)]
Auto merge of #71631 - RalfJung:miri-unleash-the-gates, r=oli-obk

Miri: unleash all feature gates

IMO it is silly to unleash features that do not even have a feature gate yet, but not unleash features that do. The only thing this achieves is making unleashed mode annoying to use as we have to figure out the feature flags to enable (and not always do the error messages say what that flag is).

Given that the point of `-Z unleash-the-miri-inside-of-you` is to debug the Miri internals, I see no good reason for this extra hurdle. I cannot imagine a situation where we'd use that flag, realize the program also requires some feature gate, and then be like "oh I guess if this feature is unstable I will do something else". Instead, we'll always just add that flag to the code as well, so requiring the flag achieves nothing.

r? @oli-obk @ecstatic-morse
Fixes https://github.com/rust-lang/rust/issues/71630

4 years agoUpdate link in contributing.md
Michael [Sun, 3 May 2020 22:40:15 +0000 (00:40 +0200)]
Update link in contributing.md

4 years agofix rebase
Esteban Küber [Sun, 3 May 2020 21:09:58 +0000 (14:09 -0700)]
fix rebase

4 years agoAuto merge of #71006 - ecstatic-morse:dataflow-bidi, r=ecstatic-morse
bors [Sun, 3 May 2020 19:46:17 +0000 (19:46 +0000)]
Auto merge of #71006 - ecstatic-morse:dataflow-bidi, r=ecstatic-morse

Use existing framework for backward dataflow analyses

This PR adds support for backward analyses to the dataflow framework and adds a new live variable analysis (based on the existing one in `librustc_mir/util/liveness.rs`). By adding these to the framework instead of having a separate API, all newly implemented backward dataflow analyses get cursors/visitors, `rustc_peek` tests, and graphviz visualizations for free. In the near-term, this makes it much easier to implement global dead-store elimination, and I believe that this will enable even more MIR optimizations in the future.

This PR makes many changes to the dataflow API, since some concepts and terminology only make sense in forward dataflow. Below is a list of the important changes.
- ~~`entry_set` -> `fixpoint` (the fixpoint for backward dataflow problems is after the block's terminator)~~
- `seek_{before,after}` -> `seek_{before,after}_primary_effect` (the unprefixed dataflow effect is now referred to as the "primary" effect instead of the "after" effect. The "before" effect remains the same, although I considered changing it to the "antecedent" effect. In both backward and forward dataflow, the "before" effect is applied prior to the "primary" effect. I feel very strongly that this is the correct choice, as it means consumers don't have to switch between `seek_before` and `seek_after` based on the direction of their analysis.
- `seek_after_assume_call_returns` is now gone. Users can use `ResultsCursor::apply_custom_effect` to emulate it.
- `visit_{statement,terminator}_exit` -> `visit_{statement,terminator}_after_primary_effect`
- `visit_{statement,terminator}` -> `visit_{statement,terminator}_before_primary_effect`

Implementing this also required refactoring the dataflow cursor implementation so it could work in both directions. This is a large percentage of the diff, since the cursor code is rather complex. The fact that the cursor is exhaustively tested in both directions should reassure whomever is unlucky enough to review this :rofl:.

In order to avoid computing the reverse CFG for forward dataflow analyses, I've added some hacks to the existing `mir::BodyAndCache` interface. I've requested changes to this interface that would let me implement this more efficiently.

r? @eddyb (feel free to reassign)
cc @rust-lang/wg-mir-opt

4 years agoUpdate clippy lint
Dylan MacKenzie [Sun, 3 May 2020 18:41:03 +0000 (11:41 -0700)]
Update clippy lint

4 years agoReflect API changes on current master
Dylan MacKenzie [Fri, 1 May 2020 18:19:27 +0000 (11:19 -0700)]
Reflect API changes on current master

4 years agoUse agreed upon terminology in cursor docs
Dylan MacKenzie [Fri, 1 May 2020 18:02:56 +0000 (11:02 -0700)]
Use agreed upon terminology in cursor docs

4 years agoAdd `rustc_peek` test for liveness with borrows
Dylan MacKenzie [Fri, 10 Apr 2020 18:00:48 +0000 (11:00 -0700)]
Add `rustc_peek` test for liveness with borrows

4 years agoSupport liveness in `rustc_peek` tests
Dylan MacKenzie [Fri, 10 Apr 2020 18:00:11 +0000 (11:00 -0700)]
Support liveness in `rustc_peek` tests

4 years agoUse new liveness analysis during generator transform
Dylan MacKenzie [Fri, 10 Apr 2020 18:13:31 +0000 (11:13 -0700)]
Use new liveness analysis during generator transform

4 years agoLive variable analysis
Dylan MacKenzie [Wed, 25 Mar 2020 23:19:14 +0000 (16:19 -0700)]
Live variable analysis

4 years agoInitialize the cursor with an empty state
Dylan MacKenzie [Mon, 20 Apr 2020 00:48:13 +0000 (17:48 -0700)]
Initialize the cursor with an empty state

4 years agoSupport backward dataflow analyses
Dylan MacKenzie [Sun, 22 Mar 2020 19:09:40 +0000 (12:09 -0700)]
Support backward dataflow analyses

4 years agoRename `live_locals` -> `live_locals_at_any_suspension_point`
Dylan MacKenzie [Fri, 10 Apr 2020 18:19:24 +0000 (11:19 -0700)]
Rename `live_locals` -> `live_locals_at_any_suspension_point`

4 years agoAdd `MutatingUseContext::Yield`
Dylan MacKenzie [Thu, 2 Apr 2020 17:54:24 +0000 (10:54 -0700)]
Add `MutatingUseContext::Yield`

...emulating `MutatingUseContext::Call`

4 years agoAuto merge of #71853 - Dylan-DPC:rollup-4qi6ry9, r=Dylan-DPC
bors [Sun, 3 May 2020 16:38:41 +0000 (16:38 +0000)]
Auto merge of #71853 - Dylan-DPC:rollup-4qi6ry9, r=Dylan-DPC

Rollup of 4 pull requests

Successful merges:

 - #71398 (Add `RefCell::take`)
 - #71663 (Fix exceeding bitshifts not emitting for assoc. consts (properly this time, I swear!))
 - #71726 (Suggest deref when coercing `ty::Ref` to `ty::RawPtr` with arbitrary mutability)
 - #71808 (Add long error explanation for E0539)

Failed merges:

r? @ghost

4 years agoRollup merge of #71808 - unexge:long-err-expl-for-e0539, r=GuillaumeGomez
Dylan DPC [Sun, 3 May 2020 16:34:50 +0000 (18:34 +0200)]
Rollup merge of #71808 - unexge:long-err-expl-for-e0539, r=GuillaumeGomez

Add long error explanation for E0539

since this error is similar to [E0551](https://github.com/rust-lang/rust/blob/master/src/librustc_error_codes/error_codes/E0551.md) most of the content was copied from it. part of #61137.

4 years agoRollup merge of #71726 - ldm0:ref2ptr, r=oli-obk
Dylan DPC [Sun, 3 May 2020 16:34:46 +0000 (18:34 +0200)]
Rollup merge of #71726 - ldm0:ref2ptr, r=oli-obk

Suggest deref when coercing `ty::Ref` to `ty::RawPtr` with arbitrary mutability

Fixes #71676
1. Implement dereference suggestion when coercing `ty::Ref` to `ty::RawPtr` with arbitrary mutability.
2. Extract the dereference steps into `deref_steps()`, which removes all the `use` and `pub` noise introduced by last PR #71540, and makes the code more readable.
3. Use the `remove_prefix()` closure which makes the prefix removal more readable.
4. Introduce `Applicability` as a return value of `check_ref` to suggest `Applicability::Unspecified` suggestion.

**Special**: I found it is not possible to genereate `Applicability::MachineApplicable` suggestion for situation like this:
```rust
use std::ops::Deref;
use std::ops::DerefMut;
struct Bar(u8);
struct Foo(Bar);
struct Emm(Foo);
impl Deref for Bar{
    type Target = u8;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl Deref for Foo {
    type Target = Bar;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl Deref for Emm {
    type Target = Foo;
    fn deref(&self) -> &Self::Target {
        &self.0
    }
}
impl DerefMut for Bar{
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
impl DerefMut for Foo {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
impl DerefMut for Emm {
    fn deref_mut(&mut self) -> &mut Self::Target {
        &mut self.0
    }
}
fn main() {
    let a = Emm(Foo(Bar(0)));
    let _: *mut u8 = &a; //~ ERROR mismatched types
}
```
We may suggest `&mut ***a` here, but the `a` is not declared as mutable variable. And also when processing HIR, it's not possible to check if `a` is declared as a mutable variable (currently we do borrow checking with MIR). So we cannot ensure that suggestion when coercing immutable reference to mutable pointer is always machine applicable. Therefore I added a `Applicability` return value in `check_ref()`. And move the `immutable reference -> mutable pointer` situation into a sperate test file without `run-rustfix`. (It seems that `run-rustfix` will also adopt `Applicability::Unspecified` suggestion, which is strange)

4 years agoRollup merge of #71663 - jumbatm:caller-handles-validation-error, r=RalfJung
Dylan DPC [Sun, 3 May 2020 16:34:41 +0000 (18:34 +0200)]
Rollup merge of #71663 - jumbatm:caller-handles-validation-error, r=RalfJung

Fix exceeding bitshifts not emitting for assoc. consts (properly this time, I swear!)

Fixes #69021 and fixes #71353.

As described in https://github.com/rust-lang/rust/issues/71353#issuecomment-617901923, this PR:

- adds a variant of `try_validation!` called `try_validation_pat!` that allows specific failures to be turned into validation failures (but returns the rest, unchanged), and
- allows `InvalidProgram` to be returned out of validation

r? @RalfJung

4 years agoRollup merge of #71398 - ThinkChaos:feat_refcell_take, r=LukasKalbertodt
Dylan DPC [Sun, 3 May 2020 16:34:34 +0000 (18:34 +0200)]
Rollup merge of #71398 - ThinkChaos:feat_refcell_take, r=LukasKalbertodt

Add `RefCell::take`

Add `RefCell::take` to match `Cell` and `Option`.
I also changed a couple of calls to `.replace` to `.take`.

Tracking issue is #71395.

This is my first contribution, please tell me if there's anything I could improve, thanks!

4 years agobless caller-location test
Ralf Jung [Sun, 3 May 2020 16:04:24 +0000 (18:04 +0200)]
bless caller-location test

4 years agoremove unneeded flags; exlain why we still have const_if_match
Ralf Jung [Sun, 3 May 2020 15:14:33 +0000 (17:14 +0200)]
remove unneeded flags; exlain why we still have const_if_match

4 years agofmt
Ralf Jung [Sun, 3 May 2020 15:12:50 +0000 (17:12 +0200)]
fmt

4 years agoList Clippy as a subtree, instead of a submodule
flip1995 [Sun, 3 May 2020 13:58:30 +0000 (15:58 +0200)]
List Clippy as a subtree, instead of a submodule

4 years agowarn about each skipped feature gate
Ralf Jung [Sun, 3 May 2020 12:23:08 +0000 (14:23 +0200)]
warn about each skipped feature gate

4 years agoCorrectly check comparison operators in MIR typeck
Matthew Jasper [Sat, 2 May 2020 12:18:31 +0000 (13:18 +0100)]
Correctly check comparison operators in MIR typeck

4 years agoAuto merge of #70825 - eddyb:enum-discr-correct-generics-parent, r=nikomatsakis
bors [Sun, 3 May 2020 12:05:46 +0000 (12:05 +0000)]
Auto merge of #70825 - eddyb:enum-discr-correct-generics-parent, r=nikomatsakis

typeck: always expose explicit enum discriminant `AnonConst`s' parent in `generics_of`.

This is similar to #70452 but for explicit `enum` discriminant constant expressions.
However, unlike #70452, this PR should have no effect on stable code, as while it alleviates #43408 errors, there is no way to actually compile an `enum` with generic parameters *and* explicit discriminants, without `#![feature(arbitrary_enum_discriminant)]`, as explicit discriminant expression don't count as uses of parameters (if they did, they would count as invariant uses).

<hr/>

There's also 2 other commits here, both related to #70453:
* "ty: use `delay_span_bug` in `ty::AdtDef::eval_explicit_discr`." - hides the ICEs demonstrated on #70453, when there are other errors (which the next commit adds)
* "typeck/wfcheck: require that explicit enum discriminants const-evaluate succesfully." - closes #70453 by picking alternative "2", i.e. erroring when a discriminant doesn't fully const-evaluate from the perspective of the `enum` definition

In the future, it might be possible to allow `enum` discriminants to actually depend on parameters, but that will likely require #68436 + some way to restrict the values so no two variants can end up with overlapping discriminants.

As this PR would close #70453, it shouldn't be merged until a decision is reached there.

r? @nikomatsakis

4 years agoMention `RefCell::take` can panic in docs
ThinkChaos [Sun, 3 May 2020 10:52:23 +0000 (12:52 +0200)]
Mention `RefCell::take` can panic in docs

4 years agoAuto merge of #71828 - Dylan-DPC:rollup-qf5h2w5, r=Dylan-DPC
bors [Sun, 3 May 2020 08:53:03 +0000 (08:53 +0000)]
Auto merge of #71828 - Dylan-DPC:rollup-qf5h2w5, r=Dylan-DPC

Rollup of 5 pull requests

Successful merges:

 - #71165 (`slice::fill`: use `T` instead of generic arg)
 - #71314 (Implement RFC 2523, `#[cfg(version(..))]`)
 - #71542 (Implement `confusable_idents` lint.)
 - #71806 (typo)
 - #71813 (Decode qualifs for associated const defaults)

Failed merges:

r? @ghost

4 years agoRollup merge of #71813 - ecstatic-morse:issue-71734, r=tmandry
Dylan DPC [Sun, 3 May 2020 08:48:08 +0000 (14:18 +0530)]
Rollup merge of #71813 - ecstatic-morse:issue-71734, r=tmandry

Decode qualifs for associated const defaults

Fixes #71734.

We encode qualifs for associated constants, but never expected to decode the qualifs for defaulted associated consts. Fix this, and test that associated const defaults have the correct qualifs cross-crate.

r? @tmandry

4 years agoRollup merge of #71806 - lcnr:patch-3, r=jonas-schievink
Dylan DPC [Sun, 3 May 2020 08:48:04 +0000 (14:18 +0530)]
Rollup merge of #71806 - lcnr:patch-3, r=jonas-schievink

typo

4 years agoRollup merge of #71542 - crlf0710:confusable_idents, r=petrochenkov
Dylan DPC [Sun, 3 May 2020 08:48:02 +0000 (14:18 +0530)]
Rollup merge of #71542 - crlf0710:confusable_idents, r=petrochenkov

Implement `confusable_idents` lint.

This collects all identifier symbols into `ParseSession` and examines them within the non-ascii-idents lint.

The skeleton generation part needs to be added to `unicode-security` crate. Will update this PR when the crate is updated.

r? @petrochenkov

EDIT: also included the `concat_idents` part.

4 years agoRollup merge of #71314 - mibac138:cfg-version, r=petrochenkov
Dylan DPC [Sun, 3 May 2020 08:48:00 +0000 (14:18 +0530)]
Rollup merge of #71314 - mibac138:cfg-version, r=petrochenkov

Implement RFC 2523, `#[cfg(version(..))]`

Hi! This is my first contribution to rust, I hope I didn't miss anything. I tried to implement this feature so that `#[cfg(version(1.44.0))]` works but the parser was printing an error that I wasn't sure how to fix so I just opted for implementing `#[cfg(version("1.44.0"))]` (note the quotes).

Tracking issue: #64796

4 years agoRollup merge of #71165 - lcnr:patch-2, r=Amanieu
Dylan DPC [Sun, 3 May 2020 08:47:53 +0000 (14:17 +0530)]
Rollup merge of #71165 - lcnr:patch-2, r=Amanieu

`slice::fill`: use `T` instead of generic arg

implements https://github.com/rust-lang/rust/issues/70758#issuecomment-613994427

As the discussion in #70758 has shifted, I now use `T` instead of `&T`.

4 years agoAuto merge of #71815 - Mark-Simulacrum:no-llvm-rebuild, r=jonas-schievink
bors [Sun, 3 May 2020 02:58:00 +0000 (02:58 +0000)]
Auto merge of #71815 - Mark-Simulacrum:no-llvm-rebuild, r=jonas-schievink

Don't bust caches on x.py check/build switches

Fixes #71152

4 years agotrailing newlines
Esteban Küber [Wed, 15 Apr 2020 15:26:32 +0000 (08:26 -0700)]
trailing newlines

4 years agoAdd docs
Esteban Küber [Wed, 15 Apr 2020 06:09:30 +0000 (23:09 -0700)]
Add docs

4 years agoSuggest constraint on `impl Trait` in return type
Esteban Küber [Wed, 15 Apr 2020 05:53:52 +0000 (22:53 -0700)]
Suggest constraint on `impl Trait` in return type

Fix #71035.

4 years agofix rebase
Esteban Küber [Tue, 14 Apr 2020 22:21:19 +0000 (15:21 -0700)]
fix rebase

4 years agoPoint at associated types when they have a default type
Esteban Küber [Tue, 14 Apr 2020 22:12:11 +0000 (15:12 -0700)]
Point at associated types when they have a default type

Associated types with a default type in a trait can't be relied upon to
remain of that default type when in use, so literals of that type can't
be used in the trait's items. Point at the associated type and state
that information.

Reduce verbosity for associated consts of the wrong type.

4 years agoreview comment: use or patterns
Esteban Küber [Tue, 14 Apr 2020 02:48:46 +0000 (19:48 -0700)]
review comment: use or patterns

4 years agoWhen a projection is expected, suggest constraining or calling method
Esteban Küber [Tue, 14 Apr 2020 02:46:34 +0000 (19:46 -0700)]
When a projection is expected, suggest constraining or calling method

4 years agoOn type mismatch involving associated type, suggest constraint
Esteban Küber [Mon, 13 Apr 2020 20:36:35 +0000 (13:36 -0700)]
On type mismatch involving associated type, suggest constraint

When an associated type is found when a specific type was expected, if
possible provide a structured suggestion constraining the associated
type in a bound.

```
error[E0271]: type mismatch resolving `<T as Foo>::Y == i32`
  --> $DIR/associated-types-multiple-types-one-trait.rs:13:5
   |
LL |     want_y(t);
   |     ^^^^^^ expected `i32`, found associated type
...
LL | fn want_y<T:Foo<Y=i32>>(t: &T) { }
   |                 ----- required by this bound in `want_y`
   |
   = note:         expected type `i32`
           found associated type `<T as Foo>::Y`
help: consider constraining the associated type `<T as Foo>::Y` to `i32`
   |
LL | fn have_x_want_y<T:Foo<X=u32, Y = i32>>(t: &T)
   |                             ^^^^^^^^^
```

```
error[E0308]: mismatched types
  --> $DIR/trait-with-missing-associated-type-restriction.rs:12:9
   |
LL |     qux(x.func())
   |         ^^^^^^^^ expected `usize`, found associated type
   |
   = note:         expected type `usize`
           found associated type `<impl Trait as Trait>::A`
help: consider constraining the associated type `<impl Trait as Trait>::A` to `usize`
   |
LL | fn foo(x: impl Trait<A = usize>) {
   |                     ^^^^^^^^^^
```

4 years agoAdd build script to rustc_attr because of cfg(version)
mibac138 [Sat, 2 May 2020 16:33:42 +0000 (18:33 +0200)]
Add build script to rustc_attr because of cfg(version)

4 years agoAdd more tests for cfg(version)
mibac138 [Tue, 28 Apr 2020 14:07:50 +0000 (16:07 +0200)]
Add more tests for cfg(version)

4 years agoChange cfg(version) error message wording
mibac138 [Tue, 28 Apr 2020 14:07:11 +0000 (16:07 +0200)]
Change cfg(version) error message wording

4 years agoImplement RFC 2523, `#[cfg(version(..))]`
mibac138 [Sun, 19 Apr 2020 08:47:55 +0000 (10:47 +0200)]
Implement RFC 2523, `#[cfg(version(..))]`

4 years agoAuto merge of #71807 - Dylan-DPC:rollup-jvb8sd9, r=Dylan-DPC
bors [Sat, 2 May 2020 23:35:09 +0000 (23:35 +0000)]
Auto merge of #71807 - Dylan-DPC:rollup-jvb8sd9, r=Dylan-DPC

Rollup of 7 pull requests

Successful merges:

 - #69274 (Implement RFC 2396: `#[target_feature]` 1.1)
 - #71767 (doc: make Stack and StackElement a little pretty)
 - #71772 (Mark query function as must_use.)
 - #71777 (cleanup: `config::CrateType` -> `CrateType`)
 - #71784 (Remove recommendation for unmaintained dirs crate)
 - #71785 (Update comment regarding SO_REUSEADDR on Windows)
 - #71787 (fix rustdoc warnings)

Failed merges:

r? @ghost

4 years agoDon't skip building LLVM if already built
Mark Rousskov [Sat, 2 May 2020 22:39:33 +0000 (18:39 -0400)]
Don't skip building LLVM if already built