Commit Graph

83592 Commits

Author SHA1 Message Date
bors
b80cb47889 Auto merge of #54286 - nnethercote:BitSet, r=pnkfelix
Merge `bitvec.rs` and `indexed_set.rs`

Because it's not good to have two separate implementations. Also, I will combine the best parts of each to improve NLL memory usage on some benchmarks significantly.
2018-09-18 03:52:39 +00:00
bors
2224a42c35 Auto merge of #52036 - collin5:b50509-2, r=collin5
Clean up dependency tracking in Rustbuild [2/2]

Make `clear_if_dirty` calls in `Builder::cargo` with stamp dependencies for the given Mode.

Continuation of #50904
Ref issue #50509
r? @Mark-Simulacrum
2018-09-17 21:15:12 +00:00
Nicholas Nethercote
53589b7e4e Some "word"-related improvements.
- Rename `BitSet::data` and `BitMatrix::vector` as `words`, because that's
  what they are.

- Remove `BitSet::words_mut()`, which is no longer necessary.

- Better distinguish multiple meanins of "word", i.e. "word index" vs
  "word ref" vs "word" (i.e. the value itself).
2018-09-18 07:08:18 +10:00
Nicholas Nethercote
a0da3e9f4f Eliminate BitwiseOperator.
`BitwiseOperator` is an unnecessarily low-level thing. This commit
replaces it with `BitSetOperator`, which works on `BitSet`s instead of
words. Within `bit_set.rs`, the commit eliminates `Intersect`, `Union`,
and `Subtract` by instead passing a function to `bitwise()`.
2018-09-18 07:08:18 +10:00
Nicholas Nethercote
266e2d3d69 Merge indexed_set.rs into bitvec.rs, and rename it bit_set.rs.
Currently we have two files implementing bitsets (and 2D bit matrices).
This commit combines them into one, taking the best features from each.

This involves renaming a lot of things. The high level changes are as
follows.
- bitvec.rs              --> bit_set.rs
- indexed_set.rs         --> (removed)
- BitArray + IdxSet      --> BitSet (merged, see below)
- BitVector              --> GrowableBitSet
- {,Sparse,Hybrid}IdxSet --> {,Sparse,Hybrid}BitSet
- BitMatrix              --> BitMatrix
- SparseBitMatrix        --> SparseBitMatrix

The changes within the bitset types themselves are as follows.

```
OLD             OLD             NEW
BitArray<C>     IdxSet<T>       BitSet<T>
--------        ------          ------
grow            -               grow
new             -               (remove)
new_empty       new_empty       new_empty
new_filled      new_filled      new_filled
-               to_hybrid       to_hybrid
clear           clear           clear
set_up_to       set_up_to       set_up_to
clear_above     -               clear_above
count           -               count
contains(T)     contains(&T)    contains(T)
contains_all    -               superset
is_empty        -               is_empty
insert(T)       add(&T)         insert(T)
insert_all      -               insert_all()
remove(T)       remove(&T)      remove(T)
words           words           words
words_mut       words_mut       words_mut
-               overwrite       overwrite
merge           union           union
-               subtract        subtract
-               intersect       intersect
iter            iter            iter
```

In general, when choosing names I went with:
- names that are more obvious (e.g. `BitSet` over `IdxSet`).
- names that are more like the Rust libraries (e.g. `T` over `C`,
  `insert` over `add`);
- names that are more set-like (e.g. `union` over `merge`, `superset`
  over `contains_all`, `domain_size` over `num_bits`).

Also, using `T` for index arguments seems more sensible than `&T` --
even though the latter is standard in Rust collection types -- because
indices are always copyable. It also results in fewer `&` and `*`
sigils in practice.
2018-09-18 07:08:09 +10:00
bors
354a29a5f1 Auto merge of #54277 - petrochenkov:afterder, r=alexcrichton
Temporarily prohibit proc macro attributes placed after derives

... and also proc macro attributes used together with `#[test]`/`#[bench]`.

Addresses item 6 from https://github.com/rust-lang/rust/pull/50911#issuecomment-411605393.

The end goal is straightforward predictable left-to-right expansion order for attributes.
Right now derives are expanded last regardless of their relative ordering with macro attributes and right now it's simpler to temporarily prohibit macro attributes placed after derives than changing the expansion order.
I'm not sure whether the new beta is already released or not, but if it's released, then this patch needs to be backported, so the solution needs to be minimal.

How to fix broken code (derives):
- Move macro attributes above derives. This won't change expansion order, they are expanded before derives anyway.

Using attribute macros on same items with `#[test]` and `#[bench]` is prohibited for similar expansion order reasons, but this one is going to be reverted much sooner than restrictions on derives.

How to fix broken code (test/bench):
- Enable `#![feature(plugin)]` (don't ask why).

r? @ghost
2018-09-17 18:13:26 +00:00
bors
186fe09143 Auto merge of #54293 - flip1995:clippyup, r=Manishearth
Update Clippy

Fix Clippy test-fail due to #53910

r? @Manishearth @SimonSapin
2018-09-17 15:39:00 +00:00
flip1995
059ab7715c
Update Clippy 2018-09-17 15:37:19 +02:00
Collins Abitekaniza
5ae40be851 refactor Builder::cargo, clean deps for cmd!=test 2018-09-17 14:34:42 +03:00
bors
f1aefb48d2 Auto merge of #54249 - RalfJung:miri, r=eddyb
Update miri
2018-09-17 08:59:11 +00:00
Ralf Jung
8d908b5b24 update miri 2018-09-17 09:20:03 +02:00
bors
ed9439768e Auto merge of #54260 - maxdeviant:public-scope-fields, r=petrochenkov
Make rustc::middle::region::Scope's fields public

This PR makes the following changes to `rustc::middle::region::Scope`:

- [x] Makes `region::Scope`'s fields public
- [x] Removes the `impl Scope` block with constructors (as per [this comment](https://github.com/rust-lang/rust/pull/54032#discussion_r216618208))
- [x] Updates call sites throughout the compiler

Closes #54122.
2018-09-17 06:34:29 +00:00
bors
0b0d2edf79 Auto merge of #54254 - RalfJung:miri-dangling, r=eddyb
miri engine: keep around some information for dead allocations

We use it to test if a dangling ptr is aligned and non-NULL. This makes some code pass that should pass (writing a ZST to a properly aligned dangling pointer), and makes some code fail that should fail (writing a ZST to a pointer obtained via pointer arithmetic from a real location, but ouf-of-bounds -- that pointer could be NULL, so we cannot allow writing to it).

CTFE does not allow these operations; tests are added to miri with https://github.com/solson/miri/pull/453.
2018-09-17 03:58:41 +00:00
bors
0c6478998e Auto merge of #54247 - Munksgaard:better-error-message-in-no_lookup_host_duplicates, r=alexcrichton
Improve output if no_lookup_host_duplicates test fails

If the test fails, output the offending addresses and a helpful error message.
Also slightly improve legibility of the preceding line that puts the addresses
into a HashMap.
2018-09-17 01:36:58 +00:00
bors
5aac93c8fb Auto merge of #53910 - IsaacWoods:unify_cvoid, r=SimonSapin
Move std::os::raw::c_void into libcore and re-export in libstd

Implements the first part of [RFC 2521](https://github.com/rust-lang/rfcs/pull/2521).

cc #53856
2018-09-16 23:13:30 +00:00
bors
cb6d2dfa89 Auto merge of #53461 - petrochenkov:pmu, r=alexcrichton
resolve: Do not error on access to proc macros imported with `#[macro_use]`

This error is artificial, but previously, when `#[macro_use] extern crate x;` was stable, but non-derive proc macros were not, it worked like kind of a feature gate. Now both features are stable, so the error is no longer necessary.

This PR simplifies how `#[macro_use] extern crate x;` works - it takes all items from macro namespace of `x`'s root and puts them into macro prelude from which they all can now be accessed.
2018-09-16 20:28:21 +00:00
Vadim Petrochenkov
e411bb33f8 resolve: Do not error on access to proc macros imported with #[macro_use] 2018-09-16 21:13:41 +03:00
bors
8a2dec6e58 Auto merge of #53804 - RalfJung:ptr-invalid, r=nagisa
fix some uses of pointer intrinsics with invalid pointers

[Found by miri](https://github.com/solson/miri/pull/446):

* `Vec::into_iter` calls `ptr::read` (and the underlying `copy_nonoverlapping`) with an unaligned pointer to a ZST. [According to LLVM devs](https://bugs.llvm.org/show_bug.cgi?id=38583), this is UB because it contradicts the metadata we are attaching to that pointer.
* `HashMap` creation calls `ptr:.write_bytes` on a NULL pointer with a count of 0. This is likely not currently UB *currently*, but it violates the rules we are setting in https://github.com/rust-lang/rust/pull/53783, and we might want to exploit those rules later (e.g. with more `nonnull` attributes for LLVM).

    Probably what `HashMap` really should do is use `NonNull::dangling()` instead of 0 for the empty case, but that would require a more careful analysis of the code.

It seems like ideally, we should do a review of usage of such intrinsics all over libstd to ensure that they use valid pointers even when the size is 0. Is it worth opening an issue for that?
2018-09-16 18:03:39 +00:00
Vadim Petrochenkov
229df02c0b Temporarily prohibit proc macro attributes placed after derives
... and also proc macro attributes used together with test/bench.
2018-09-16 19:51:41 +03:00
bors
d3cba9b4b4 Auto merge of #54270 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 5 pull requests

Successful merges:

 - #53941 (rustdoc: Sort implementors)
 - #54181 (Suggest && and || instead of 'and' and 'or')
 - #54209 (Partially revert 674a5db "Fix undesirable fallout [from macro modularization]")
 - #54213 (De-overlap the lifetimes of `flow_inits` and `flow_{un,ever_}inits`.)
 - #54244 (Add a small search box to seach Rust's standary library)

Failed merges:

r? @ghost
2018-09-16 15:42:02 +00:00
Ralf Jung
357c5dacee use mem::zeroed to make up ZST values 2018-09-16 14:26:27 +02:00
Guillaume Gomez
8b1e5e1f01
Rollup merge of #54244 - kzys:search-box, r=GuillaumeGomez
Add a small search box to seach Rust's standary library

This change partially addresses #14572. No CSS doesn't look fancy
but at least it is functional.
2018-09-16 12:25:46 +02:00
Guillaume Gomez
937abc9add
Rollup merge of #54213 - nnethercote:keccak-flow_inits-memory, r=nikomatsakis
De-overlap the lifetimes of `flow_inits` and `flow_{un,ever_}inits`.

This reduces `max-rss` for an `nll-check` build by 27% for `keccak`, and
by 8% for `inflate`.

r? @nikomatsakis
2018-09-16 12:25:45 +02:00
Guillaume Gomez
4f5ab7f6bc
Rollup merge of #54209 - petrochenkov:mexpr, r=pnkfelix
Partially revert 674a5db "Fix undesirable fallout [from macro modularization]"

Partially revert 674a5db1a5

~~Closes~~ (see pnkfelix comments below) https://github.com/rust-lang/rust/issues/53675
2018-09-16 12:25:43 +02:00
Guillaume Gomez
54a1d2b131
Rollup merge of #54181 - vi:hint_and_or, r=estebank
Suggest && and || instead of 'and' and 'or'

Resolves #54109.

Note: competing pull reqeust: #54179

r? @csmoe
2018-09-16 12:25:42 +02:00
Guillaume Gomez
3466d8044f
Rollup merge of #53941 - kzys:sort-impls, r=GuillaumeGomez
rustdoc: Sort implementors

Fixes #53812
2018-09-16 12:25:41 +02:00
bors
32dc5a0783 Auto merge of #54157 - euclio:structured-suggestion, r=estebank
use structured suggestion for "missing mut" label

Fixes #54133 for both NLL and non-NLL.

r? @estebank

I'm not super happy with the existing wording here, since it's now a suggestion. I wonder if the message would work better as something like "help: make binding mutable: `mut foo`"?

Also, are the `HELP` and `SUGGESTION` comments necessary?
2018-09-16 09:47:05 +00:00
Kazuyoshi Kato
2fe4503703 Check the remaining nodes 2018-09-16 00:39:12 -07:00
bors
f4819878cd Auto merge of #53754 - RalfJung:slice_align_to, r=alexcrichton
stabilize slice_align_to

This is very hard to implement correctly, and leads to [serious bugs](https://github.com/llogiq/bytecount/pull/42) when done incorrectly. Moreover, this is needed to be able to run code that opportunistically exploits alignment on miri. So code using `align_to`/`align_to_mut` gets the benefit of a well-tested implementation *and* of being able to run in miri to test for (some kinds of) UB.

This PR also clarifies the guarantee wrt. the middle part being as long as possible.  Should the docs say under which circumstances the middle part could be shorter? Currently, that can only happen when running in miri.
2018-09-16 07:22:24 +00:00
bors
e4ba1d41e3 Auto merge of #54116 - eddyb:extern-prelude, r=petrochenkov
rustc_resolve: allow only core, std, meta and --extern in Rust 2018 paths.

As per https://github.com/rust-lang/rust/issues/53166#issuecomment-419265401:
* Rust 2018 imports can no longer refer to crates not in "extern prelude"
  * `::foo` won't load a crate named `foo` unless `foo` is in the "extern prelude"
  * `extern crate foo;`, however, remains unchanged (can load arbitrary crates)
* `--extern crate_name` is added (note the lack of `=path`) as an unstable option
  * adds `crate_name` to the "extern prelude" (see above)
  * crate is searched in sysroot & library paths, just like `extern crate crate_name`.
  * `Cargo` support will be added later
* `core`, `std` and ~~`proc_macro`~~ `meta` are *always* available in the extern prelude
  * warning for interaction with `no_std` / `no_core` will be added later
  * **EDIT**: `proc_macro` was replaced by `meta`, see https://github.com/rust-lang/rust/issues/53166#issuecomment-421137230
    * note that there is no crate named `meta` being added, so `use meta::...;` will fail, we're only whitelisting it so we can start producing `uniform_paths` compatibility errors

Fixes #54006 (as the example now requires `--extern alloc`, which is unstable).
Fixes #54253 (hit during fixing RLS).

r? @petrochenkov cc @aturon @alexcrichton @Centril @joshtriplett
2018-09-15 19:50:26 +00:00
Eduard-Mihai Burtescu
bde0a54737 Revert "Auto merge of #53527 - Emerentius:test_all, r=nrc"
This reverts commit 9f53c87b4b, reversing
changes made to cba0fdf43c.
2018-09-15 22:48:38 +03:00
Eduard-Mihai Burtescu
4529d10636 Update submodules to include rust-lang-nursery/rust-clippy#3189 and rust-lang-nursery/rls#1054. 2018-09-15 22:48:10 +03:00
Eduard-Mihai Burtescu
653cd47c09 rustc_resolve: use continue instead of return to "exit" a loop iteration. 2018-09-15 22:48:10 +03:00
Eduard-Mihai Burtescu
38c82a2180 rustc_resolve: always include core, std and meta in the extern prelude. 2018-09-15 22:48:10 +03:00
Eduard-Mihai Burtescu
9eb7a3c76f rustc_resolve: don't allow ::crate_name to bypass extern_prelude. 2018-09-15 22:48:10 +03:00
Eduard-Mihai Burtescu
26b1ed1b92 rustc: add unstable support for --extern crate_name without a path. 2018-09-15 22:48:10 +03:00
Eduard-Mihai Burtescu
afc2149c05 rustc: support extern crates loaded after query engine creation. 2018-09-15 22:48:10 +03:00
Marshall Bowers
2d7176f3a3 Fix missing struct name 2018-09-15 15:43:44 -04:00
Marshall Bowers
fa1868d9da Make rustc::middle::region::Scope's fields public 2018-09-15 13:10:29 -04:00
Philip Munksgaard
0e9d260e0a Improve output if no_lookup_host_duplicates fails
If the test fails, output the offending addresses and a helpful error message.
Also slightly improve legibility of the preceding line that puts the addresses
into a HashMap.
2018-09-15 17:17:35 +02:00
bors
9f53c87b4b Auto merge of #53527 - Emerentius:test_all, r=nrc
Add option to run all tests

This adds the "--include-ignored" flag to libtest, which allows running ignored and unignored tests in one go.

Closes #50363
2018-09-15 15:01:51 +00:00
Ralf Jung
f3a76a18d7 keep around some information for dead allocations so that we can use it to make sure a dangling ptr aligned and non-NULL 2018-09-15 16:34:30 +02:00
bors
cba0fdf43c Auto merge of #52896 - SergioBenitez:master, r=alexcrichton
Add inspection and setter methods to proc_macro::Diagnostic.

A few useful methods for `proc_macro::Diagnostic`.

r? @alexcrichton
2018-09-15 12:33:44 +00:00
bors
d92b0661c0 Auto merge of #54227 - flip1995:clippyup, r=kennytm
Update Clippy

Clippy one commit behind #54226. This should work

r? @Manishearth
2018-09-15 10:09:25 +00:00
bors
7896af9508 Auto merge of #54177 - nnethercote:streamline-bit-stuff, r=Mark-Simulacrum
Remove bitslice.rs

As the comment in `bitslice.rs` says:

> FIXME: merge with `bitvec`
2018-09-15 06:36:22 +00:00
Kazuyoshi Kato
d63fd46929 Add a small search box to seach Rust's standary library
This change partially addresses #14572. No CSS doesn't look fancy
but at least it is functional.
2018-09-14 23:28:32 -07:00
Kazuyoshi Kato
bbcb6339aa Add a test to prevent regression
The way it defines implementations is unrealistic though.
2018-09-14 22:42:44 -07:00
bors
ed45f9cbf4 Auto merge of #54151 - ljedrz:cleanup_hir, r=michaelwoerister
A few cleanups for hir

- prefer `if let` to `match` when only 1 branch matters
- `chain` iterable items that are looped over in sequence
- `sort_by_key` instead of `sort_by` when possible
- change cloning `map`s to `cloned()`
- use `unwrap_or_else` and `ok` when applicable
- a few other minor readability improvements
- whitespace fixes
2018-09-15 02:56:13 +00:00
Vitaly _Vi Shukela
bc63a4a13a
issue 54109: use short suggestions 2018-09-15 02:05:32 +03:00
bors
f789b6bd6d Auto merge of #54069 - petrochenkov:subns, r=aturon
resolve: Introduce two sub-namespaces in macro namespace

Two sub-namespaces are introduced in the macro namespace - one for bang macros and one for attribute-like macros (attributes, derives).

"Sub-namespace" means this is not a newly introduced full namespace, the single macro namespace is still in place.
I.e. you still can't define/import two macros with the same name in a single module, `use` imports still import only one name in macro namespace (from any sub-namespace) and not possibly two.

However, when we are searching for a name used in a `!` macro call context (`my_macro!()`) we skip attribute names in scope, and when we are searching for a name used in attribute context (`#[my_macro]`/`#[derive(my_macro)]`) we are skipping bang macro names in scope.
In other words, bang macros cannot shadow attribute macros and vice versa.

For a non-macro analogy, we could e.g. skip non-traits when searching for `MyTrait` in `impl MyTrait for Type { ... }`.
However we do not do it in non-macro namespaces because we don't have practical issues with e.g. non-traits shadowing traits with the same name, but with macros we do, especially after macro modularization.

For `#[test]` and `#[bench]` we have a hack in the compiler right now preventing their shadowing by `macro_rules! test` and similar things. This hack was introduced after making `#[test]`/`#[bench]` built-in macros instead of built-in attributes (https://github.com/rust-lang/rust/pull/53410), something that needed to be done from the start since they are "active" attributes transforming their inputs.
Now they are passed through normal name resolution and can be shadowed, but that's a breaking change, so we have  a special hack basically applying this PR for `#[test]` and `#[bench]` only.

Soon all potentially built-in attributes will be passed through normal name resolution (https://github.com/rust-lang/rust/pull/53913) and that uncovers even more cases where the strict "macro namespace is a single namespace" rule needs to be broken.
For example, with strict rules, built-in macro `cfg!(...)` would shadow built-in attribute `#[cfg]` (they are different things), standard library macro `thread_local!(...)` would shadow built-in attribute `#[thread_local]` - both of these cases are covered by special hacks in https://github.com/rust-lang/rust/pull/53913 as well.
Crater run uncovered more cases of attributes being shadowed by user-defined macros (`warn`, `doc`, `main`, even `deprecated`), we cannot add exceptions in the compiler for all of them.

Regressions with user-defined attributes like https://github.com/rust-lang/rust/issues/53583 and https://github.com/rust-lang/rust/issues/53898 also appeared after enabling macro modularization.

People are also usually confused (https://github.com/rust-lang/rust/issues/53205#issuecomment-411552763, https://github.com/rust-lang/rust/issues/53583#issuecomment-415447800) when they see conflicts between attributes and non-attribute macros for the first time.

So my proposed solution is to solve this issue by introducing two sub-namespaces and thus skipping resolutions of the wrong kind and preventing more error-causing cases of shadowing.

Fixes https://github.com/rust-lang/rust/issues/53583
2018-09-14 22:17:45 +00:00