660 Commits

Author SHA1 Message Date
Mazdak Farrokhzad
485a084b45
Rollup merge of #61545 - flip1995:internal_lints, r=oli-obk
Implement another internal lints

cc #49509

This adds ~~two~~ one internal lint~~s~~:
1. LINT_PASS_IMPL_WITHOUT_MACRO: Make sure, that the `{declare,impl}_lint_pass` macro is used to implement lint passes. cc #59669
2. ~~USAGE_OF_TYCTXT_AND_SPAN_ARGS: item 2 on the list in #49509~~

~~With 2. I wasn't sure, if this lint should be applied everywhere. That means a careful review of 0955835 would be great. Also 73fb9b4 allows this lint on some functions. Should I also apply this lint there?~~

TODO (not directly relevant for review):
- [ ] https://github.com/rust-lang/rust/pull/59316#discussion_r280186517 (not sure yet, if this works or how to query for `rustc_private`, since it's not in [`Features`](https://doc.rust-lang.org/nightly/nightly-rustc/syntax/feature_gate/struct.Features.html) 🤔 cc @eddyb)
- [x] https://github.com/rust-lang/rust/pull/61735#discussion_r292389870
- [x] Check explicitly for the `{declare,impl}_lint_pass!` macros

r? @oli-obk
2019-07-05 20:26:51 +02:00
Mark Rousskov
8a7dded1a2 Switch master to 1.38 2019-07-04 11:26:57 -04:00
Jeremy Stucki
3cd4df70a5
Add missing lifetime specifier 2019-07-03 10:01:02 +02:00
Jeremy Stucki
ec711767a7
Remove needless lifetimes 2019-07-03 10:01:02 +02:00
Jeremy Stucki
d50a3a7b86
Remove needless lifetimes 2019-07-03 10:01:01 +02:00
Jeremy Stucki
6ae80cf23f
Remove needless lifetimes 2019-07-03 10:01:01 +02:00
Niko Matsakis
0dd074e854 more centril nits 2019-07-02 12:25:23 -04:00
Niko Matsakis
fb2c997d4e fix silly bugs in binary_search_util test 2019-07-02 12:25:22 -04:00
Niko Matsakis
adba6a8f90 address nits by mattewjasper 2019-07-02 12:25:21 -04:00
Niko Matsakis
3e01c7416a just create a binary search slice helper fn 2019-07-02 12:25:16 -04:00
Niko Matsakis
89a205bf44 add a VecMap data structure 2019-07-02 12:15:21 -04:00
Niko Matsakis
a18c779fa2 pacify the mercilous tidy
long lines, trailing newlines
2019-07-02 12:15:21 -04:00
Niko Matsakis
7fd0db7dd3 add a depth_first_search helper function 2019-07-02 12:15:20 -04:00
Niko Matsakis
4c91bb9571 introduce a VecGraph abstraction that cheaply stores graphs
This is perhaps better than the linked list approach I was using
before. Lower memory overhead, Theta(N+E) storage. Does require a
sort. =)
2019-07-02 12:15:20 -04:00
Niko Matsakis
4e85665e08 implement the graph traits for SCC 2019-07-02 12:15:20 -04:00
bors
ef064d2f66 Auto merge of #61871 - Zoxc:no-lift-branch, r=eddyb
Don't use lift to detect local types

This overlaps with https://github.com/rust-lang/rust/pull/61392.

r? @eddyb
2019-07-02 08:09:15 +00:00
Igor Matuszewski
ad62b4203c Fix clippy::precedence 2019-06-26 14:14:27 +02:00
Igor Matuszewski
33f58baf6e Fix clippy::redundant_closure 2019-06-26 14:11:58 +02:00
Igor Matuszewski
6c93b47c01 Fix clippy::cast_losless 2019-06-26 14:11:58 +02:00
Igor Matuszewski
12806b7050 Fix clippy::redundant_field_names 2019-06-26 13:59:58 +02:00
John Kåre Alsaker
8465daf982 Check for local types in writeback with debug assertions 2019-06-26 13:04:06 +02:00
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
flip1995
7de6f54728
Turn internal lints into tool lints 2019-06-24 10:45:21 +02:00
flip1995
65c81dee75
Allow default_hash_types in some crates 2019-06-24 10:45:20 +02:00
Mazdak Farrokhzad
74380b3336
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
2019-06-23 01:59:20 +02:00
Julien Cretin
b8106b59d2 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.
2019-06-23 01:30:41 +02:00
Dylan MacKenzie
c8cbd4fc78 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.
2019-06-22 10:18:19 -07:00
bors
4a365a29d6 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.
2019-06-22 15:12:15 +00:00
bors
4edff843dd Auto merge of #61347 - Centril:stabilize-underscore_const_names, r=petrochenkov
Stabilize underscore_const_names in 1.37.0

You are now permitted to write:

```rust
const _: $type_expression = $term_expression;
```

That is, we change the [grammar of items](9d1984d7ae/grammar/item.lyg (L3-L42)), as written in [the *`.lyg`* notation](263bf161da (grammar)), from:

```java
Item = attrs:OuterAttr* vis:Vis? kind:ItemKind;
ItemKind =
  | ...
  | Const:{ "const" name:IDENT ":" ty:Type "=" value:Expr ";" }
  | ...
  ;
```

into:

```java
Item = attrs:OuterAttr* vis:Vis? kind:ItemKind;
ItemKind =
  | ...
  | Const:{ "const" name:IdentOrUnderscore ":" ty:Type "=" value:Expr ";" }
  | ...
  ;

IdentOrUnderscore =
  | Named:IDENT
  | NoName:"_"
  ;
```

r? @petrochenkov
2019-06-16 20:33:55 +00:00
chansuke
0d77084eff Separate librustc_data_structures module 2019-06-16 14:17:01 +03:00
bors
3f511ade5b Auto merge of #60669 - c410-f3r:attrs-fn, r=petrochenkov
Allow attributes in formal function parameters

Implements https://github.com/rust-lang/rust/issues/60406.

This is my first contribution to the compiler and since this is a large and complex project, I am not fully aware of the consequences of the changes I have made.

**TODO**

- [x] Forbid some built-in attributes.
- [x] Expand cfg/cfg_attr
2019-06-12 07:38:01 +00:00
Tyler Mandry
66e7493543 Add more functionality to BitMatrix 2019-06-10 14:46:40 -07:00
Mazdak Farrokhzad
e62c9d7917 Stabilize underscore_const_names: stage0 -> bootstrap. 2019-06-10 06:17:39 +02:00
Mazdak Farrokhzad
56d71c2910 Stabilize underscore_const_names. 2019-06-10 06:17:39 +02:00
Caio
1eaaf440d5 Allow attributes in formal function parameters 2019-06-09 07:58:40 -03:00
Eduard-Mihai Burtescu
961fe5479f rustc: use indexmap instead of a plain vector for upvars. 2019-06-01 19:17:22 +03:00
Tim Vermeulen
f1d0829e20 Add Step::sub_usize 2019-05-25 02:53:08 +02:00
Andreas Molzer
3f28811774 Add documentation on the reasoning
Explains the thought process behind adding the union algorithm and
discusses the alternative and heuristic behind.
2019-05-22 21:08:29 +02:00
Andreas Molzer
8877f4c30d Improve 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.
2019-05-22 17:44:14 +02:00
Andreas Molzer
7fa6e878be Provide some benchmarks for bitset hybrid union 2019-05-22 16:16:56 +02:00
Ralf Jung
a2168b0259 update doc comment 2019-05-21 17:14:09 +02:00
Ralf Jung
5ea5fe3072 static_assert: make use of anonymous constants 2019-05-21 09:10:24 +02:00
Mazdak Farrokhzad
581cf70367
Rollup merge of #60959 - petrochenkov:sassert, r=estebank
rustc: Improve type size assertions

Now they
- Tell what the new size is, when it changes
- Do not require passing an identifier

```
   ::: src\libsyntax\parse\token.rs:223:1
    |
223 |    static_assert_size!(Token, 123);
    |    -------------------------------- in this macro invocation
    |
    = note: expected type `[(); 123]`
               found type `[(); 16]`
```
2019-05-20 23:03:07 +02:00
Michael Woerister
a79c06a9ce Document requirements for HashStable implementations better. 2019-05-20 10:36:31 +02:00
Vadim Petrochenkov
88fa5c6a45 Improve type size assertions
Now they
- Tell what the new size is, when it changes
- Do not require passing an identifier
2019-05-19 13:59:44 +03:00
Michael Woerister
eed1e1ecd2 Remove unused field from StableHasher. 2019-05-17 15:27:08 +02:00
Marcel Hellwig
cc314b066a Remove bitrig support from rust 2019-05-13 11:09:06 +02:00
Jesper Steen Møller
6da7649f61 Delegate SmallVec's stable_hash to array's stable_hash. 2019-05-04 20:29:35 +02:00
Jesper Steen Møller
6802082039 Hash all of the import_ids for the TraitCandidate. 2019-05-04 20:29:35 +02:00
bors
a9c8c08ecb Auto merge of #60288 - Zoxc:update-rayon, r=nikomatsakis
Update rustc-rayon version

r? @nikomatsakis
2019-04-27 17:08:11 +00:00