Commit Graph

95388 Commits

Author SHA1 Message Date
bors 8aa42ed7c2 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](2887008e0c/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.
2019-06-24 20:44:18 +00:00
Eric Huss 342fa2be25 Update cargo 2019-06-24 11:57:20 -07:00
Mazdak Farrokhzad a60bbb0f6b --bless you. 2019-06-24 20:45:19 +02:00
bors 7e08576e42 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
2019-06-24 17:44:13 +00:00
Mazdak Farrokhzad 5eaedda9f5 Address review comments. 2019-06-24 18:32:52 +02:00
Oliver Scherer 91a15e2857 Pacify tidy 2019-06-24 16:34:50 +02:00
Oliver Scherer 1140a916f6 Add regression test 2019-06-24 15:34:29 +02:00
Oliver Scherer 6b26fdad0a Don't ICE on mutable zst slices 2019-06-24 15:31:52 +02:00
Oliver Scherer 354163d478 Simplify vtable interning 2019-06-24 15:31:25 +02:00
bors bbbb3e5974 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
2019-06-24 13:08:12 +00:00
Ralf Jung 7e830286c7 fix reoccurring typo 2019-06-24 14:28:16 +02:00
Lzu Tao ca354e9dac submodules: Update clippy from 5a11ed7b to 8c80b65f 2019-06-24 09:42:31 +00:00
ljedrz 87438a163e HirIdification: miscellaneous bits 2019-06-24 10:31:00 +02:00
ljedrz d82a12f64f HirIdify driver::pretty::HirPrinterSupport::node_path 2019-06-24 10:03:37 +02:00
ljedrz f05cbc98f8 HIR: rename find_by_hir_id to find 2019-06-24 09:58:49 +02:00
ljedrz 90de9edce5 HIR: remove the NodeId find 2019-06-24 09:55:11 +02:00
bors 166c49d7a1 Auto merge of #62012 - wesleywiser:const_prop_use_ecx, r=oli-obk
Use ecx for const-prop local storage

r? @oli-obk
2019-06-24 07:48:29 +00:00
ljedrz d08bd72e97 HIR: rename get_parent_node_by_hir_id to get_parent_node 2019-06-24 09:46:38 +02:00
ljedrz c7e1f4dcb7 HIR: remove the NodeId get_parent_node, HirIdify is_argument 2019-06-24 09:41:29 +02:00
Marc-Antoine Perennou 087cd77d96 rustbuild: always set cxx for build host
Even if it's not in hosts

Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2019-06-24 09:12:24 +02:00
Mazdak Farrokhzad 5baac07d4b lint-type-overflow2: warn -> deny. 2019-06-24 07:58:37 +02:00
Mazdak Farrokhzad e4e0f959ce promoted_errors: warn -> deny. 2019-06-24 07:58:37 +02:00
Mazdak Farrokhzad e364eb40d5 add '// ignore-pass' where applicable. 2019-06-24 07:58:37 +02:00
Mazdak Farrokhzad 54337fab39 compiletest: support '--pass check' and '// ignore-pass'. 2019-06-24 07:58:37 +02:00
Mazdak Farrokhzad a56a6d7525 bootstrap: pass '--pass' on to compiletest. 2019-06-24 07:58:37 +02:00
bors 3cc3486733 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
2019-06-24 05:00:10 +00:00
Aaron Hill 770655a47f
Replace Vec<Vec<_>> with Vec<_> 2019-06-23 20:23:07 -04:00
bors 85ed21e83c 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).
2019-06-23 22:50:56 +00:00
bors de7c4e4231 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
2019-06-23 20:05:01 +00:00
Aaron Hill e3d8001f00
Fix typos pointed out by @varkor
Co-Authored-By: varkor <github@varkor.com>
2019-06-23 15:50:59 -04:00
Yuki Okushi a257dff99c Add test for issue-38591 2019-06-24 04:36:13 +09:00
Ralf Jung 38104abf63 expand comment 2019-06-23 20:18:30 +02:00
Ralf Jung 9954af4a9f deduplicate some code 2019-06-23 20:08:55 +02:00
bors 2cd5ed495c 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
2019-06-23 17:16:22 +00:00
Ralf Jung 9492038ae9 make code more symmetric 2019-06-23 18:06:11 +02:00
Ralf Jung 9c32ede099 comment tweaks, better validation errors, update UI tests 2019-06-23 18:03:57 +02:00
Ralf Jung c12c8a78ea clean up internals of pointer checks; make get_size_and_align also check for fn allocations 2019-06-23 17:25:58 +02:00
Ralf Jung dcc8371d4e move CheckInAllocMsg to more logical place 2019-06-23 16:31:16 +02:00
Ralf Jung c50b9d197f 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).
2019-06-23 15:55:04 +02:00
Mark Rousskov 777951c926 Exit early from feature search if no features in file 2019-06-23 09:10:26 -04:00
Mark Rousskov 6c5c78d00c Collect features only once 2019-06-23 09:10:26 -04:00
Mark Rousskov ebbc662f07 Use Path/PathBuf directly instead of through path:: 2019-06-23 09:10:26 -04:00
Mark Rousskov 7dd7c0ff0a Skip querying each ignore directive if none in file 2019-06-23 09:10:26 -04:00
Mark Rousskov d619e44a55 Utilize entry.metadata over fs::symlink_metadata 2019-06-23 09:10:26 -04:00
Mark Rousskov 38f0b90e45 Move file-reading into walker loop 2019-06-23 09:10:26 -04:00
Mark Rousskov c113a3769d Pass contents and DirEntry to walkers 2019-06-23 09:10:26 -04:00
Mark Rousskov 5c33c3e308 Stop calling format! to check feature gate 2019-06-23 09:10:26 -04:00
Mark Rousskov e17b02d9b9 Use walkdir crate
It's more efficient than the fs::read_dir API
2019-06-23 09:10:24 -04:00
Mark Rousskov 5f1da8e533 Cache Regex's 2019-06-23 09:10:08 -04:00
Mark Rousskov 2b6371dbfb Make tidy quieter by default 2019-06-23 09:09:44 -04:00