]> git.lizzy.rs Git - rust.git/log
rust.git
5 years agoAuto merge of #61765 - Keruspe:rustbuild-cxx, r=alexcrichton
bors [Tue, 25 Jun 2019 12:07:19 +0000 (12:07 +0000)]
Auto merge of #61765 - Keruspe:rustbuild-cxx, r=alexcrichton

rustbuild: detect cxx for all targets

Replaces #61544
Fixes #59917

We need CXX to build llvm-libunwind which can be enabled for alltargets.
As we needed it for all hosts anyways, just move the detection so that it is ran for all targets (which contains all hosts) instead.

5 years agoAuto merge of #62094 - oli-obk:zst_intern, r=eddyb
bors [Tue, 25 Jun 2019 09:10:18 +0000 (09:10 +0000)]
Auto merge of #62094 - oli-obk:zst_intern, r=eddyb

 Don't ICE on mutable zst slices

fixes #62045

5 years agoAuto merge of #61572 - Aaron1011:fix/generator-ref, r=varkor
bors [Tue, 25 Jun 2019 02:17:05 +0000 (02:17 +0000)]
Auto merge of #61572 - Aaron1011:fix/generator-ref, r=varkor

Fix HIR visit order

Fixes #61442

When rustc::middle::region::ScopeTree computes its yield_in_scope
field, it relies on the HIR visitor order to properly compute which
types must be live across yield points. In order for the computed scopes
to agree with the generated MIR, we must ensure that expressions
evaluated before a yield point are visited before the 'yield'
expression.

However, the visitor order for ExprKind::AssignOp
was incorrect. The left-hand side of a compund assignment expression is
evaluated before the right-hand side, but the right-hand expression was
being visited before the left-hand expression. If the left-hand
expression caused a new type to be introduced (e.g. through a
deref-coercion), the new type would be incorrectly seen as occuring
*after* the yield point, instead of before. This leads to a mismatch
between the computed generator types and the MIR, since the MIR will
correctly see the type as being live across the yield point.

To fix this, we correct the visitor order for ExprKind::AssignOp
to reflect the actual evaulation order.

5 years agoAuto merge of #62100 - ehuss:update-cargo, r=alexcrichton
bors [Mon, 24 Jun 2019 23:28:11 +0000 (23:28 +0000)]
Auto merge of #62100 - ehuss:update-cargo, r=alexcrichton

Update cargo

17 commits in 807429e1b6da4e2ec52488ef2f59e77068c31e1f..4c1fa54d10f58d69ac9ff55be68e1b1c25ecb816
2019-06-11 14:06:10 +0000 to 2019-06-24 11:24:18 +0000
- Fix typo in comment (rust-lang/cargo#7066)
- travis: enforce formatting of subcrates as well (rust-lang/cargo#7063)
- _cargo: Make function style consistent (rust-lang/cargo#7060)
- Update some fix comments. (rust-lang/cargo#7061)
- Stabilize default-run (rust-lang/cargo#7056)
- Fix typo in comment (rust-lang/cargo#7054)
- fix(fingerpring): do not touch intermediate artifacts (rust-lang/cargo#7050)
- Resolver test/debug cleanup (rust-lang/cargo#7045)
- Rename to_url → into_url (rust-lang/cargo#7048)
- Remove needless lifetimes (rust-lang/cargo#7047)
- Revert test directory cleaning change. (rust-lang/cargo#7042)
- cargo book /reference/manifest: fix typo (rust-lang/cargo#7041)
- Extract resolver tests to their own crate (rust-lang/cargo#7011)
- ci: Do not install addons on rustfmt build jobs (rust-lang/cargo#7038)
- Support absolute paths in dep-info files (rust-lang/cargo#7030)
- ci: Run cargo fmt on all workspaces (rust-lang/cargo#7033)
- Deprecated ONCE_INIT in favor of Once::new() (rust-lang/cargo#7031)

5 years agoAuto merge of #61787 - ecstatic-morse:dataflow-split-block-sets, r=pnkfelix
bors [Mon, 24 Jun 2019 20:44:18 +0000 (20:44 +0000)]
Auto merge of #61787 - ecstatic-morse:dataflow-split-block-sets, r=pnkfelix

rustc_mir: Hide initial block state when defining transfer functions

This PR addresses [this FIXME](https://github.com/rust-lang/rust/blob/2887008e0ce0824be4e0e9562c22ea397b165c97/src/librustc_mir/dataflow/mod.rs#L594-L596).

This makes `sets.on_entry` inaccessible in `{before_,}{statement,terminator}_effect`. This field was meant to allow implementors of `BitDenotation` to access the initial state for each block (optionally with the effect of all previous statements applied via `accumulates_intrablock_state`) while defining transfer functions.  However, the ability to set the initial value for the entry set of each basic block (except for START_BLOCK) no longer exists. As a result, this functionality is mostly useless, and when it *was* used it was used erroneously (see #62007).

Since `on_entry` is now useless, we can also remove `BlockSets`, which held the `gen`, `kill`, and `on_entry` bitvectors and replace it with a `GenKill` struct. Variables of this type are called `trans` since they represent a transfer function. `GenKill`s are stored contiguously in `AllSets`, which reduces the number of bounds checks and may improve cache performance: one is almost never accessed without the other.

Replacing `BlockSets` with `GenKill` allows us to define some new helper functions which streamline dataflow iteration and the dataflow-at-location APIs. Notably, `state_for_location` used a subtle side-effect of the `kill`/`kill_all` setters to apply the transfer function, and could be incorrect if a transfer function depended on effects of previous statements in the block on `gen_set`.

Additionally, this PR merges `BitSetOperator` and `InitialFlow` into one trait. Since the value of `InitialFlow` defines the semantics of the `join` operation, there's no reason to have seperate traits for each. We can add a default impl of `join` which branches based on `BOTTOM_VALUE`.  This should get optimized away.

5 years agoUpdate cargo
Eric Huss [Mon, 24 Jun 2019 18:57:20 +0000 (11:57 -0700)]
Update cargo

5 years agoAuto merge of #62081 - RalfJung:miri-pointer-checks, r=oli-obk
bors [Mon, 24 Jun 2019 17:44:13 +0000 (17:44 +0000)]
Auto merge of #62081 - RalfJung:miri-pointer-checks, r=oli-obk

Refactor miri pointer checks

Centralize bounds, alignment and NULL checking for memory accesses in one function: `memory.check_ptr_access`. That function also takes care of converting a `Scalar` to a `Pointer`, should that be needed.  Not all accesses need that though: if the access has size 0, `None` is returned. Everyone accessing memory based on a `Scalar` should use this method to get the `Pointer` they need.

All operations on the `Allocation` work on `Pointer` inputs and expect all the checks to have happened (and will ICE if the bounds are violated). The operations on `Memory` work on `Scalar` inputs and do the checks themselves.

The only other public method to check pointers is `memory.ptr_may_be_null`, which is needed in a few places. No need for `check_align` or similar methods. That makes the public API surface much easier to use and harder to mis-use.

This should be largely no-functional-change, except that ZST accesses to a "true" pointer that is dangling or out-of-bounds are now considered UB. This is to be conservative wrt. whatever LLVM might be doing.

While I am at it, this also removes the assumption that the vtable part of a `dyn Trait`-fat-pointer is a `Pointer` (as opposed to a pointer cast to an integer, stored as raw bits).

r? @oli-obk

5 years agoPacify tidy
Oliver Scherer [Mon, 24 Jun 2019 14:34:50 +0000 (16:34 +0200)]
Pacify tidy

5 years agoAdd regression test
Oliver Scherer [Mon, 24 Jun 2019 13:34:29 +0000 (15:34 +0200)]
Add regression test

5 years agoDon't ICE on mutable zst slices
Oliver Scherer [Mon, 24 Jun 2019 13:31:52 +0000 (15:31 +0200)]
Don't ICE on mutable zst slices

5 years agoSimplify vtable interning
Oliver Scherer [Mon, 24 Jun 2019 13:31:25 +0000 (15:31 +0200)]
Simplify vtable interning

5 years agoAuto merge of #62092 - lzutao:clippy-update, r=oli-obk
bors [Mon, 24 Jun 2019 13:08:12 +0000 (13:08 +0000)]
Auto merge of #62092 - lzutao:clippy-update, r=oli-obk

submodules: Update clippy from 5a11ed7b to 8c80b65f

```bash
% git shortlog --no-merges 5a11ed7b92cc4cf40a4568a8fc1ff54b198c333b..
Daniele D'Orazio (4):
      make needless_return work with void functions
      update tests and fix lints in clippy
      more idiomatic code
      cargo fmt

Jeremy Stucki (1):
      Remove needless lifetimes

Lzu Tao (1):
      Fix fallout cause NodeId pruning

Matthias Krüger (1):
      readme: update

Mazdak Farrokhzad (5):
      Fix fallout from rust-lang/rust PR 60861.
      Account for let_chains in collapsible_if ui test cases.
      Fix dogfood test failures.
      Pacify rustfmt.
      Put 'if let' back into comment.

flip1995 (1):
      Remove another unnecessary lifetime
```
r? @Manishearth , cc @oli-obk

5 years agofix reoccurring typo
Ralf Jung [Mon, 24 Jun 2019 12:28:16 +0000 (14:28 +0200)]
fix reoccurring typo

5 years agosubmodules: Update clippy from 5a11ed7b to 8c80b65f
Lzu Tao [Mon, 24 Jun 2019 09:42:31 +0000 (09:42 +0000)]
submodules: Update clippy from 5a11ed7b to 8c80b65f

5 years agoAuto merge of #62012 - wesleywiser:const_prop_use_ecx, r=oli-obk
bors [Mon, 24 Jun 2019 07:48:29 +0000 (07:48 +0000)]
Auto merge of #62012 - wesleywiser:const_prop_use_ecx, r=oli-obk

Use ecx for const-prop local storage

r? @oli-obk

5 years agorustbuild: always set cxx for build host
Marc-Antoine Perennou [Mon, 24 Jun 2019 07:12:24 +0000 (09:12 +0200)]
rustbuild: always set cxx for build host

Even if it's not in hosts

Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
5 years agoAuto merge of #62075 - Centril:guardless-match-arms, r=petrochenkov
bors [Mon, 24 Jun 2019 05:00:10 +0000 (05:00 +0000)]
Auto merge of #62075 - Centril:guardless-match-arms, r=petrochenkov

Remove `ast::Guard`

With the introduction of `ast::ExprKind::Let` in https://github.com/rust-lang/rust/pull/60861, the `ast::Guard` structure is now redundant in terms of representing [`if let` guards](https://github.com/rust-lang/rust/issues/51114) in AST since it can be represented by `ExprKind::Let` syntactically. Therefore, we remove `ast::Guard` here.

However, we keep `hir::Guard` because the semantic representation is a different matter and this story is more unclear right now (might involve `goto 'arm` in HIR or something...).

r? @petrochenkov

5 years agoReplace Vec<Vec<_>> with Vec<_>
Aaron Hill [Mon, 24 Jun 2019 00:22:02 +0000 (20:22 -0400)]
Replace Vec<Vec<_>> with Vec<_>

5 years agoAuto merge of #62070 - ia0:rustfmt, r=petrochenkov
bors [Sun, 23 Jun 2019 22:50:56 +0000 (22:50 +0000)]
Auto merge of #62070 - ia0:rustfmt, r=petrochenkov

Run rustfmt on some libsyntax files

As part of #62008, run rustfmt on:
- src/libsyntax/ext/tt/macro_rules.rs
- src/libsyntax/ext/tt/quoted.rs

There is no semantic change. To fix potential merge conflicts, simply choose the other side then run rustfmt and fix any tidy check (like line length).

5 years agoAuto merge of #62037 - Mark-Simulacrum:tidy-fast, r=eddyb
bors [Sun, 23 Jun 2019 20:05:01 +0000 (20:05 +0000)]
Auto merge of #62037 - Mark-Simulacrum:tidy-fast, r=eddyb

Speed up tidy

master:
  Time (mean ± σ):      3.478 s ±  0.033 s    [User: 3.298 s, System: 0.178 s]
  Range (min … max):    3.425 s …  3.525 s    10 runs

This PR:
  Time (mean ± σ):      1.098 s ±  0.006 s    [User: 783.7 ms, System: 310.2 ms]
  Range (min … max):    1.092 s …  1.113 s    10 runs

Alleviates https://github.com/rust-lang/rust/issues/59884. For the most part each commit stands on its own. Timings are on warm filesystem cache.

r? @eddyb

5 years agoFix typos pointed out by @varkor
Aaron Hill [Sun, 23 Jun 2019 19:50:59 +0000 (15:50 -0400)]
Fix typos pointed out by @varkor

Co-Authored-By: varkor <github@varkor.com>
5 years agoexpand comment
Ralf Jung [Sun, 23 Jun 2019 18:18:30 +0000 (20:18 +0200)]
expand comment

5 years agodeduplicate some code
Ralf Jung [Sun, 23 Jun 2019 18:08:55 +0000 (20:08 +0200)]
deduplicate some code

5 years agoAuto merge of #61778 - petrochenkov:pass, r=Mark-Simulacrum
bors [Sun, 23 Jun 2019 17:16:22 +0000 (17:16 +0000)]
Auto merge of #61778 - petrochenkov:pass, r=Mark-Simulacrum

compiletest: Introduce `// {check,build,run}-pass` pass modes

Pass UI tests now have three modes
```
// check-pass
// build-pass
// run-pass
```
mirroring equivalent well-known `cargo` commands.

`// check-pass` will compile the test skipping codegen (which is expensive and isn't supposed to fail in most cases).
`// build-pass` will compile and link the test without running it.
`// run-pass` will compile, link and run the test.
Tests without a "pass" annotation are still considered "fail" tests.

Most UI tests would probably want to switch to `check-pass`.
Tests validating codegen would probably want to run the generated code as well and use `run-pass`.
`build-pass` should probably be rare (linking tests?).

https://github.com/rust-lang/rust/pull/61755 will provide a way to run the tests with any mode, e.g. bump `check-pass` tests to `run-pass` to satisfy especially suspicious people, and be able to make sure that codegen doesn't breaks in some entirely unexpected way.
Tests marked with any mode are expected to pass with any other mode, if that's not the case for some legitimate reason, then the test should be made a "fail" test rather than a "pass" test.
Perhaps some secondary CI can verify this invariant, but that's not super urgent.

`// compile-pass` still works and is equivalent to `build-pass`.
Why is `// compile-pass` bad - 1) it gives an impression that the test is only compiled, but not linked, 2) it doesn't mirror a cargo command.
It can be removed some time in the future in a separate PR.

cc https://github.com/rust-lang/rust/issues/61712

5 years agomake code more symmetric
Ralf Jung [Sun, 23 Jun 2019 16:06:11 +0000 (18:06 +0200)]
make code more symmetric

5 years agocomment tweaks, better validation errors, update UI tests
Ralf Jung [Sun, 23 Jun 2019 16:00:07 +0000 (18:00 +0200)]
comment tweaks, better validation errors, update UI tests

5 years agoclean up internals of pointer checks; make get_size_and_align also check for fn alloc...
Ralf Jung [Sun, 23 Jun 2019 14:42:51 +0000 (16:42 +0200)]
clean up internals of pointer checks; make get_size_and_align also check for fn allocations

5 years agomove CheckInAllocMsg to more logical place
Ralf Jung [Sun, 23 Jun 2019 14:31:16 +0000 (16:31 +0200)]
move CheckInAllocMsg to more logical place

5 years agoCentralize bounds, alignment and NULL checking for memory accesses in one function...
Ralf Jung [Sun, 23 Jun 2019 12:26:36 +0000 (14:26 +0200)]
Centralize bounds, alignment and NULL checking for memory accesses in one function: memory.check_ptr_access

That function also takes care of converting a Scalar to a Pointer, should that be needed.  Not all accesses need that though: if the access has size 0, None is returned.
Everyone accessing memory based on a Scalar should use this method to get the Pointer they need.

All operations on the Allocation work on Pointer inputs and expect all the checks to have happened (and will ICE if the bounds are violated).
The operations on Memory work on Scalar inputs and do the checks themselves.

The only other public method to check pointers is memory.ptr_may_be_null, which is needed in a few places.
With this, we can make all the other methods (tests for a pointer being in-bounds and checking alignment) private helper methods, used to implement the two public methods.
That maks the public API surface much easier to use and harder to mis-use.

While I am at it, this also removes the assumption that the vtable part of a `dyn Trait`-fat-pointer is a `Pointer` (as opposed to a pointer cast to an integer, stored as raw bits).

5 years agoExit early from feature search if no features in file
Mark Rousskov [Fri, 21 Jun 2019 18:58:48 +0000 (14:58 -0400)]
Exit early from feature search if no features in file

5 years agoCollect features only once
Mark Rousskov [Fri, 21 Jun 2019 18:32:58 +0000 (14:32 -0400)]
Collect features only once

5 years agoUse Path/PathBuf directly instead of through path::
Mark Rousskov [Fri, 21 Jun 2019 18:19:05 +0000 (14:19 -0400)]
Use Path/PathBuf directly instead of through path::

5 years agoSkip querying each ignore directive if none in file
Mark Rousskov [Fri, 21 Jun 2019 17:16:41 +0000 (13:16 -0400)]
Skip querying each ignore directive if none in file

5 years agoUtilize entry.metadata over fs::symlink_metadata
Mark Rousskov [Fri, 21 Jun 2019 16:53:32 +0000 (12:53 -0400)]
Utilize entry.metadata over fs::symlink_metadata

5 years agoMove file-reading into walker loop
Mark Rousskov [Fri, 21 Jun 2019 16:47:15 +0000 (12:47 -0400)]
Move file-reading into walker loop

5 years agoPass contents and DirEntry to walkers
Mark Rousskov [Fri, 21 Jun 2019 16:23:20 +0000 (12:23 -0400)]
Pass contents and DirEntry to walkers

5 years agoStop calling format! to check feature gate
Mark Rousskov [Fri, 21 Jun 2019 16:08:26 +0000 (12:08 -0400)]
Stop calling format! to check feature gate

5 years agoUse walkdir crate
Mark Rousskov [Fri, 21 Jun 2019 16:05:00 +0000 (12:05 -0400)]
Use walkdir crate

It's more efficient than the fs::read_dir API

5 years agoCache Regex's
Mark Rousskov [Fri, 21 Jun 2019 16:04:27 +0000 (12:04 -0400)]
Cache Regex's

5 years agoMake tidy quieter by default
Mark Rousskov [Fri, 21 Jun 2019 15:04:30 +0000 (11:04 -0400)]
Make tidy quieter by default

5 years agoAuto merge of #60861 - Centril:let-chains-ast-intro, r=petrochenkov
bors [Sun, 23 Jun 2019 12:28:12 +0000 (12:28 +0000)]
Auto merge of #60861 - Centril:let-chains-ast-intro, r=petrochenkov

[let_chains, 2/6] Introduce `Let(..)` in AST, remove IfLet + WhileLet and parse let chains

Here we remove `ast::ExprKind::{IfLet, WhileLet}` and introduce `ast::ExprKind::Let`.
Moreover, we also:
+ connect the parsing logic for let chains
+ introduce the feature gate
+ rewire HIR lowering a bit.

However, this does not connect the new syntax to semantics in HIR.
That will be the subject of a subsequent PR.

Per https://github.com/rust-lang/rust/issues/53667#issuecomment-471583239.
Next step after https://github.com/rust-lang/rust/pull/59288.

cc @Manishearth re. Clippy.

r? @oli-obk

5 years agoRun rustfmt
Julien Cretin [Wed, 29 May 2019 18:21:26 +0000 (20:21 +0200)]
Run rustfmt

5 years agoRemove redundant syntax::ast::Guard.
Mazdak Farrokhzad [Sun, 23 Jun 2019 09:32:16 +0000 (11:32 +0200)]
Remove redundant syntax::ast::Guard.

5 years agoAuto merge of #62069 - Centril:rollup-m8n4uw7, r=Centril
bors [Sun, 23 Jun 2019 00:10:17 +0000 (00:10 +0000)]
Auto merge of #62069 - Centril:rollup-m8n4uw7, r=Centril

Rollup of 5 pull requests

Successful merges:

 - #62047 (Trigger `unused_attribute` lint on `#[cfg_attr($pred,)]`)
 - #62049 (Fix one missing `dyn`.)
 - #62051 (Lint empty `#[derive()]` as unused attribute.)
 - #62057 (Deny explicit_outlives_requirements in the compiler)
 - #62068 (Fix meta-variable binding errors in macros)

Failed merges:

r? @ghost

5 years agoRollup merge of #62068 - ia0:fix_meta_var, r=petrochenkov
Mazdak Farrokhzad [Sat, 22 Jun 2019 23:59:20 +0000 (01:59 +0200)]
Rollup merge of #62068 - ia0:fix_meta_var, r=petrochenkov

Fix meta-variable binding errors in macros

The errors are either:
- The meta-variable used in the right-hand side is not bound (or defined) in the
  left-hand side.
- The meta-variable used in the right-hand side does not repeat with the same
  kleene operator as its binder in the left-hand side. Either it does not repeat
  enough, or it uses a different operator somewhere.

This change should have no semantic impact.

Found by https://github.com/rust-lang/rust/pull/62008

5 years agoRollup merge of #62057 - matthewjasper:deny-unnecessary-outlives, r=Mark-Simulacrum
Mazdak Farrokhzad [Sat, 22 Jun 2019 23:59:19 +0000 (01:59 +0200)]
Rollup merge of #62057 - matthewjasper:deny-unnecessary-outlives, r=Mark-Simulacrum

Deny explicit_outlives_requirements in the compiler

5 years agoRollup merge of #62051 - Centril:unused-derive-, r=petrochenkov
Mazdak Farrokhzad [Sat, 22 Jun 2019 23:59:17 +0000 (01:59 +0200)]
Rollup merge of #62051 - Centril:unused-derive-, r=petrochenkov

Lint empty `#[derive()]` as unused attribute.

Closes https://github.com/rust-lang/rust/issues/54651.

cc https://github.com/rust-lang/rust/issues/55112

r? @petrochenkov

5 years agoRollup merge of #62049 - crlf0710:patch-2, r=jonas-schievink
Mazdak Farrokhzad [Sat, 22 Jun 2019 23:59:16 +0000 (01:59 +0200)]
Rollup merge of #62049 - crlf0710:patch-2, r=jonas-schievink

Fix one missing `dyn`.

It's in the documentation of `Unsize`.

5 years agoRollup merge of #62047 - Centril:cfg-attr-empty-lint, r=estebank
Mazdak Farrokhzad [Sat, 22 Jun 2019 23:59:15 +0000 (01:59 +0200)]
Rollup merge of #62047 - Centril:cfg-attr-empty-lint, r=estebank

Trigger `unused_attribute` lint on `#[cfg_attr($pred,)]`

Lint on `#[cfg_attr($pred,)]` as decided in https://github.com/rust-lang/rust/issues/54881#issuecomment-441442173.

Closes https://github.com/rust-lang/rust/issues/54881.

r? @estebank

5 years agolet_chains: note re. back-compat wrt. expr beginning.
Mazdak Farrokhzad [Sat, 22 Jun 2019 23:41:09 +0000 (01:41 +0200)]
let_chains: note re. back-compat wrt. expr beginning.

5 years agolet_chains: Revert 'fn with' in ast_validation.
Mazdak Farrokhzad [Sat, 22 Jun 2019 23:39:13 +0000 (01:39 +0200)]
let_chains: Revert 'fn with' in ast_validation.

5 years agoFix meta-variable binding errors in macros
Julien Cretin [Wed, 29 May 2019 18:05:43 +0000 (20:05 +0200)]
Fix meta-variable binding errors in macros

The errors are either:
- The meta-variable used in the right-hand side is not bound (or defined) in the
  left-hand side.
- The meta-variable used in the right-hand side does not repeat with the same
  kleene operator as its binder in the left-hand side. Either it does not repeat
  enough, or it uses a different operator somewhere.

This change should have no semantic impact.

5 years agolet_chains: More accurately describe `ast::ExprKind::Let`.
Mazdak Farrokhzad [Sat, 22 Jun 2019 23:17:11 +0000 (01:17 +0200)]
let_chains: More accurately describe `ast::ExprKind::Let`.

Co-Authored-By: Vadim Petrochenkov <vadim.petrochenkov@gmail.com>
5 years agolet_chains: Add test cases to pprust-expr-roundtrip.
Mazdak Farrokhzad [Mon, 17 Jun 2019 23:28:51 +0000 (01:28 +0200)]
let_chains: Add test cases to pprust-expr-roundtrip.

5 years agolet_chains: Fix bugs in pretty printing.
Mazdak Farrokhzad [Mon, 17 Jun 2019 23:28:20 +0000 (01:28 +0200)]
let_chains: Fix bugs in pretty printing.

5 years agolet_chains: Refactor parse_{if,while}_expr a bit.
Mazdak Farrokhzad [Mon, 17 Jun 2019 20:03:23 +0000 (22:03 +0200)]
let_chains: Refactor parse_{if,while}_expr a bit.

5 years agolet_chains: --bless tests due to recovery in lowering.
Mazdak Farrokhzad [Mon, 17 Jun 2019 05:38:26 +0000 (07:38 +0200)]
let_chains: --bless tests due to recovery in lowering.

5 years agolet_chains: Remove ast_validation logic in favor of lowering with recovery.
Mazdak Farrokhzad [Mon, 17 Jun 2019 05:36:45 +0000 (07:36 +0200)]
let_chains: Remove ast_validation logic in favor of lowering with recovery.

5 years agolet_chains: Adjust tests for pre-expansion gating.
Mazdak Farrokhzad [Mon, 17 Jun 2019 03:41:45 +0000 (05:41 +0200)]
let_chains: Adjust tests for pre-expansion gating.

5 years agolet_chains: Move feature gating to pre-expansion.
Mazdak Farrokhzad [Mon, 17 Jun 2019 03:41:21 +0000 (05:41 +0200)]
let_chains: Move feature gating to pre-expansion.

5 years agolet_chains: Inline visit_expr_with_let_maybe_allowed.
Mazdak Farrokhzad [Sun, 16 Jun 2019 23:18:22 +0000 (01:18 +0200)]
let_chains: Inline visit_expr_with_let_maybe_allowed.

5 years agolet_chains: readd kw::let to ident_can_begin_expr.
Mazdak Farrokhzad [Sun, 16 Jun 2019 22:45:09 +0000 (00:45 +0200)]
let_chains: readd kw::let to ident_can_begin_expr.

5 years agolet_chains: Fuse PatternSource::Let & ::LetExpr.
Mazdak Farrokhzad [Sun, 16 Jun 2019 22:16:29 +0000 (00:16 +0200)]
let_chains: Fuse PatternSource::Let & ::LetExpr.

5 years agolet_chains: scrutinee -> condition
Mazdak Farrokhzad [Sat, 25 May 2019 10:59:44 +0000 (12:59 +0200)]
let_chains: scrutinee -> condition

5 years agolet_chains: Account for const generics in validation tests.
Mazdak Farrokhzad [Tue, 21 May 2019 04:50:53 +0000 (06:50 +0200)]
let_chains: Account for const generics in validation tests.

5 years agolet_chains: Change AST validation strategy slightly.
Mazdak Farrokhzad [Sat, 18 May 2019 09:49:27 +0000 (11:49 +0200)]
let_chains: Change AST validation strategy slightly.

5 years agolet_chains: scrutinee -> head expression.
Mazdak Farrokhzad [Fri, 17 May 2019 23:22:43 +0000 (01:22 +0200)]
let_chains: scrutinee -> head expression.

5 years agolet_chains: Fix outdated doc-comment re. 'parse_if_expr'.
Mazdak Farrokhzad [Fri, 17 May 2019 22:34:55 +0000 (00:34 +0200)]
let_chains: Fix outdated doc-comment re. 'parse_if_expr'.

5 years agolet_chains: Improve documentation for ast::ExprKind::Let(..).
Mazdak Farrokhzad [Fri, 17 May 2019 22:27:12 +0000 (00:27 +0200)]
let_chains: Improve documentation for ast::ExprKind::Let(..).

5 years agolet_chains: Comment out Let in ident_can_begin_expr.
Mazdak Farrokhzad [Thu, 16 May 2019 12:17:10 +0000 (14:17 +0200)]
let_chains: Comment out Let in ident_can_begin_expr.

5 years agolet_chains: Test pretty output for simple stable if-let.
Mazdak Farrokhzad [Wed, 15 May 2019 19:03:44 +0000 (21:03 +0200)]
let_chains: Test pretty output for simple stable if-let.

5 years agolet_chains: Remove redundant tests in syntax-ambiguity-*.rs.
Mazdak Farrokhzad [Sat, 11 May 2019 13:11:54 +0000 (15:11 +0200)]
let_chains: Remove redundant tests in syntax-ambiguity-*.rs.

5 years agolet_chains: Add test protecting the precedence of && in relation to other things.
Mazdak Farrokhzad [Wed, 15 May 2019 13:16:04 +0000 (15:16 +0200)]
let_chains: Add test protecting the precedence of && in relation to other things.

5 years agolet_chains: Adjust unnecessary parens tests.
Mazdak Farrokhzad [Wed, 15 May 2019 13:33:34 +0000 (15:33 +0200)]
let_chains: Adjust unnecessary parens tests.

5 years agolet_chains: Add feature gate tests.
Mazdak Farrokhzad [Sat, 11 May 2019 13:11:31 +0000 (15:11 +0200)]
let_chains: Add feature gate tests.

5 years agolet_chains: Add tests for places where let expressions aren't allowed.
Mazdak Farrokhzad [Sat, 11 May 2019 13:06:36 +0000 (15:06 +0200)]
let_chains: Add tests for places where let expressions aren't allowed.

5 years agolet_chains: Add feature gate.
Mazdak Farrokhzad [Sat, 11 May 2019 13:11:04 +0000 (15:11 +0200)]
let_chains: Add feature gate.

5 years agolet_chains: Adjust lowering logic in lieu of ::Let.
Mazdak Farrokhzad [Wed, 15 May 2019 14:05:05 +0000 (16:05 +0200)]
let_chains: Adjust lowering logic in lieu of ::Let.

5 years agolet_chains: Handle disallowing of let chains in places lowering won't support.
Mazdak Farrokhzad [Wed, 15 May 2019 14:02:51 +0000 (16:02 +0200)]
let_chains: Handle disallowing of let chains in places lowering won't support.

5 years agolet_chains: Handle in unused parenthesis lint.
Mazdak Farrokhzad [Wed, 15 May 2019 14:03:43 +0000 (16:03 +0200)]
let_chains: Handle in unused parenthesis lint.

5 years agolet_chains: Handle in resolve.
Mazdak Farrokhzad [Wed, 15 May 2019 14:05:39 +0000 (16:05 +0200)]
let_chains: Handle in resolve.

5 years agolet_chains: Add support for parsing let expressions.
Mazdak Farrokhzad [Wed, 15 May 2019 14:03:22 +0000 (16:03 +0200)]
let_chains: Add support for parsing let expressions.

5 years agolet_chains: Handle it in AST pretty printing.
Mazdak Farrokhzad [Wed, 15 May 2019 14:05:58 +0000 (16:05 +0200)]
let_chains: Handle it in AST pretty printing.

5 years agolet_chains: Remove ast::ExprKind::{IfLet, WhileLet} from visitors and introduce ...
Mazdak Farrokhzad [Wed, 15 May 2019 14:06:58 +0000 (16:06 +0200)]
let_chains: Remove ast::ExprKind::{IfLet, WhileLet} from visitors and introduce ::Let.

5 years agolet_chains: Remove ast::ExprKind::{IfLet, WhileLet} and introduce ::Let.
Mazdak Farrokhzad [Wed, 15 May 2019 14:04:12 +0000 (16:04 +0200)]
let_chains: Remove ast::ExprKind::{IfLet, WhileLet} and introduce ::Let.

5 years agoMove run-pass test to run-pass/generator
Aaron Hill [Sat, 22 Jun 2019 21:31:14 +0000 (17:31 -0400)]
Move run-pass test to run-pass/generator

5 years agoFix fallout from rebase
Aaron Hill [Sat, 22 Jun 2019 21:30:56 +0000 (17:30 -0400)]
Fix fallout from rebase

5 years agoAuto merge of #62040 - felixrabe:patch-3, r=dtolnay
bors [Sat, 22 Jun 2019 20:45:34 +0000 (20:45 +0000)]
Auto merge of #62040 - felixrabe:patch-3, r=dtolnay

Punctuation typo in ! docs

5 years agoChange how we compute yield_in_scope
Aaron Hill [Fri, 7 Jun 2019 02:23:28 +0000 (22:23 -0400)]
Change how we compute yield_in_scope

Compound operators (e.g. 'a += b') have two different possible
evaluation orders. When the left-hand side is a primitive type, the
expression is evaluated right-to-left. However, when the left-hand side
is a non-primitive type, the expression is evaluated left-to-right.

This causes problems when we try to determine if a type is live across a
yield point. Since we need to perform this computation before typecheck
has run, we can't simply check the types of the operands.

This commit calculates the most 'pessimistic' scenario - that is,
erring on the side of treating more types as live, rather than fewer.
This is perfectly safe - in fact, this initial liveness computation is
already overly conservative (e.g. issue #57478). The important thing is
that we compute a superset of the types that are actually live across
yield points. When we generate MIR, we'll determine which types actually
need to stay live across a given yield point, and which ones cam
actually be dropped.

Concretely, we force the computed HIR traversal index for
right-hand-side yield expression to be equal to the maximum index for
the left-hand side. This covers both possible execution orders:

* If the expression is evalauted right-to-left, our 'pessismitic' index
is unecessary, but safe. We visit the expressions in an
ExprKind::AssignOp from right to left, so it actually would have been
safe to do nothing. However, while increasing the index of a yield point
might cause the compiler to reject code that could actually compile, it
will never cause incorrect code to be accepted.
* If the expression is evaluated left-to-right, our 'pessimistic' index
correctly ensures that types in the left-hand-side are seen as occuring
before the yield - which is exactly what we want

5 years agoFix HIR visit order
Aaron Hill [Wed, 5 Jun 2019 23:54:34 +0000 (19:54 -0400)]
Fix HIR visit order

Fixes #61442

When rustc::middle::region::ScopeTree ccomputes its yield_in_scope
field, it relies on the HIR visitor order to properly compute which
types must be live across yield points. In order for the computed scopes
to agree with the generated MIR, we must ensure that expressions
evaluated before a yield point are visited before the 'yield'
expression.

However, the visitor order for ExprKind::AssignOp
was incorrect. The left-hand side of a compund assignment expression is
evaluated before the right-hand side, but the right-hand expression was
being visited before the left-hand expression. If the left-hand
expression caused a new type to be introduced (e.g. through a
deref-coercion), the new type would be incorrectly seen as occuring
*after* the yield point, instead of before. This leads to a mismatch
between the computed generator types and the MIR, since the MIR will
correctly see the type as being live across the yield point.

To fix this, we correct the visitor order for ExprKind::AssignOp
to reflect the actual evaulation order.

5 years agoAuto merge of #61874 - jonas-schievink:remove-rem-output-default, r=Centril
bors [Sat, 22 Jun 2019 17:59:05 +0000 (17:59 +0000)]
Auto merge of #61874 - jonas-schievink:remove-rem-output-default, r=Centril

Remove the default type of `Rem::Output`

Associated type defaults are not yet stable, and `Rem` is the only trait that specifies a default. Let's see what breaks when it's removed.

cc https://github.com/rust-lang/rust/pull/61812#issuecomment-502394566
cc @Centril

@bors try

5 years agoMerge `BitSetOperator` and `InitialFlow` into one trait.
Dylan MacKenzie [Fri, 21 Jun 2019 19:39:01 +0000 (12:39 -0700)]
Merge `BitSetOperator` and `InitialFlow` into one trait.

Since the value of `InitialFlow` defines the semantics of the `join`
operation, there's no reason to have seperate traits for each. We can
add a default impl of `join` which branches based on `BOTTOM_VALUE`.
This should get optimized away.

5 years agorustc_mir: don't pass `on_entry` when building transfer functions.
Dylan MacKenzie [Wed, 12 Jun 2019 22:00:43 +0000 (15:00 -0700)]
rustc_mir: don't pass `on_entry` when building transfer functions.

This commit makes `sets.on_entry` inaccessible in
`{before_,}{statement,terminator}_effect`. This field was meant to allow
implementors of `BitDenotation` to access the initial state for each
block (optionally with the effect of all previous statements applied via
`accumulates_intrablock_state`) while defining transfer functions.
However, the ability to set the initial value for the entry set of each
basic block (except for START_BLOCK) no longer exists. As a result, this
functionality is mostly useless, and when it *was* used it was used
erroneously (see #62007).

Since `on_entry` is now useless, we can also remove `BlockSets`, which
held the `gen`, `kill`, and `on_entry` bitvectors and replace it with a
`GenKill` struct. Variables of this type are called `trans` since they
represent a transfer function. `GenKill`s are stored contiguously in
`AllSets`, which reduces the number of bounds checks and may improve
cache performance: one is almost never accessed without the other.

Replacing `BlockSets` with `GenKill` allows us to define some new helper
functions which streamline dataflow iteration and the
dataflow-at-location APIs. Notably, `state_for_location` used a subtle
side-effect of the `kill`/`kill_all` setters to apply the transfer
function, and could be incorrect if a transfer function depended on
effects of previous statements in the block on `gen_set`.

5 years agoDeny explicit_outlives_requirements in the compiler
Matthew Jasper [Sat, 22 Jun 2019 16:13:19 +0000 (17:13 +0100)]
Deny explicit_outlives_requirements in the compiler

5 years agoAuto merge of #61020 - HeroicKatora:master, r=matthewjasper
bors [Sat, 22 Jun 2019 15:12:15 +0000 (15:12 +0000)]
Auto merge of #61020 - HeroicKatora:master, r=matthewjasper

librustc_data_structures: Speedup union of sparse and dense hybrid set

This optimization speeds up the union of a hybrid bitset when that
switches it from a sparse representation to a dense bitset. It now
clones the dense bitset and integrate only the spare elements instead of
densifying the sparse bitset, initializing all elements, and then a
union on two dense bitset, touching all words a second time.

It's not completely certain if the added complexity is worth it but I would
like to hear some feedback in any case. Benchmark results from my machine:

```
Now:  bit_set::union_hybrid_sparse_to_dense ... bench:          72 ns/iter (+/- 5)
Previous: bit_set::union_hybrid_sparse_to_dense ... bench:          90 ns/iter (+/- 6)
```

This being the second iteration of trying to improve the speed, since I missed the return value in the first, and forgot to run the relevant tests. Oops.

5 years agoLint empty 'derive()' as unused attribute.
Mazdak Farrokhzad [Sat, 22 Jun 2019 11:19:34 +0000 (13:19 +0200)]
Lint empty 'derive()' as unused attribute.

5 years agoFix one missing `dyn`.
CrLF0710 [Sat, 22 Jun 2019 10:35:43 +0000 (18:35 +0800)]
Fix one missing `dyn`.

It's in the documentation of `Unsize`.

5 years agoAuto merge of #62024 - RalfJung:miri, r=oli-obk
bors [Sat, 22 Jun 2019 10:31:43 +0000 (10:31 +0000)]
Auto merge of #62024 - RalfJung:miri, r=oli-obk

update miri

r? @oli-obk

5 years agoupdate miri
Ralf Jung [Sat, 22 Jun 2019 10:30:05 +0000 (12:30 +0200)]
update miri

5 years agoAdd test for linting on 'cfg_attr(,)'.
Mazdak Farrokhzad [Sat, 22 Jun 2019 10:12:26 +0000 (12:12 +0200)]
Add test for linting on 'cfg_attr(,)'.