Commit Graph

101436 Commits

Author SHA1 Message Date
Guanqun Lu
e1e60c339a reorder Install struct's fields based on the order in config.toml.example 2019-10-24 23:51:02 +08:00
Guanqun Lu
945223128a reorder Build struct's fields based on the order in config.toml.example 2019-10-24 23:50:03 +08:00
Guanqun Lu
a90954163b reorder Llvm struct's fields based on the order in config.toml.example 2019-10-24 23:46:05 +08:00
Guanqun Lu
2f7e3d55c9 add the missing rust.musl-root option in config.toml.example 2019-10-24 23:43:06 +08:00
Guanqun Lu
9adea61777 add a WARNING to rust.optimize option in config.toml.example 2019-10-24 23:41:48 +08:00
Manish Goregaokar
7d0162d7ed Update clippy 2019-10-24 08:15:32 -07:00
Michael Woerister
ee1173a8ff self-profiling: Update measureme to 0.4.0 and use new RAII-based API. 2019-10-24 17:14:38 +02:00
Michael Woerister
f6aa64b7b0 self-profiling: Remove unused methods from profiler. 2019-10-24 17:13:38 +02:00
Alex Crichton
060b6cbe74 Update hashbrown to 0.6.2
Pulls in rust-lang/hashbrown#119 which should be a good improvement for
compile times of hashmap-heavy crates.
2019-10-24 08:07:03 -07:00
Sydney Acksman
4cfcb77084 Changed APIT with explicit generic args span to specific arg spans 2019-10-24 09:47:26 -05:00
Lukas Kalbertodt
c36b9ddcb4
Add UI tests for array::IntoIter impls
This it to make sure traits are implemented for arrays with length 32
and below, while they are not implemented for >= 33.
2019-10-24 15:46:44 +02:00
Lukas Kalbertodt
5334a307d5
Add unit tests for array::IntoIter
Many tests are based on tests by Josh Stone <cuviper@gmail.com>
2019-10-24 15:46:44 +02:00
Lukas Kalbertodt
a2e94ca1ee
Add array::IntoIter as a consuming/by-value array iterator
The iterator is implemented using const generics. It implements the
traits `Iterator`, `DoubleEndedIterator`, `ExactSizeIterator`,
`FusedIterator` and `TrustedLen`. It also contains a public method
`new` to create it from an array.

`IntoIterator` was not implemented for arrays yet, as there are still
some open questions regarding backwards compatibility. This commit
only adds the iterator impl and does not yet offer a convenient way
to obtain that iterator.
2019-10-24 15:46:44 +02:00
Esteban Küber
18d873e8f0 Avoid ICE when adjusting bad self ty 2019-10-24 00:41:14 -07:00
bors
8e0007f829 Auto merge of #65474 - Mark-Simulacrum:rustc-dev-split, r=pietroalbini
Split the rustc target libraries into separate rustc-dev component

This is re-applies a squashed version of #64823 as well as including #65337 to fix bugs noted after merging the first PR.

The second PR is confirmed as fixing windows-gnu, and presumably also fixes other platforms, such as musl (i.e. #65335 should be fixed); `RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org rustup toolchain install nightly-2019-10-16` can be installed to confirm that this is indeed the case.
2019-10-24 07:27:00 +00:00
wangxiangqing
b1331563ba Deprecated proc_macro doesn't trigger warning on build library
Change-Id: Ib3a396e7334d209fe6c6ef425bbfc7b2ae471378
2019-10-24 14:14:51 +08:00
bors
55e00631e5 Auto merge of #65733 - Centril:rollup-0zth66f, r=Centril
Rollup of 12 pull requests

Successful merges:

 - #64178 (More Clippy fixes for alloc, core and std)
 - #65144 (Add Cow::is_borrowed and Cow::is_owned)
 - #65193 (Lockless LintStore)
 - #65479 (Add the `matches!( $expr, $pat ) -> bool` macro)
 - #65518 (Avoid ICE when checking `Destination` of `break` inside a closure)
 - #65583 (rustc_metadata: use a table for super_predicates, fn_sig, impl_trait_ref.)
 - #65641 (Derive `Rustc{En,De}codable` for `TokenStream`.)
 - #65648 (Eliminate `intersect_opt`.)
 - #65657 (Remove `InternedString`)
 - #65691 (Update E0659 error code long explanation to 2018 edition)
 - #65696 (Fix an issue with const inference variables sticking around under Chalk + NLL)
 - #65704 (relax ExactSizeIterator bound on write_bytes)

Failed merges:

r? @ghost
2019-10-24 03:38:57 +00:00
Esteban Küber
8467ceff22 Tweak format string error to point at arguments always
Add secondary span labels with no text to make it clear when there's a
mismatch bewteen the positional arguments in a format string and the
arguments to the macro. This shouldn't affect experienced users, but it
should make it easier for newcomers to more clearly understand how
`format!()` and `println!()` are supposed to be used.

```
error: 2 positional arguments in format string, but there is 1 argument
 --> file8.rs:2:14
  |
2 |     format!("{} {}", 1);
  |              ^^ ^^   -
```

instead of

```
error: 2 positional arguments in format string, but there is 1 argument
 --> file8.rs:2:14
  |
2 |     format!("{} {}", 1);
  |              ^^ ^^
```
2019-10-23 17:32:33 -07:00
Mazdak Farrokhzad
822f787546 Adjust the tracking issue for untagged_unions.
Also elaborate on some feature gates in `active.rs`.
2019-10-24 02:24:14 +02:00
Eduard-Mihai Burtescu
d717806363 rustc_typeck: don't record direct callees in generator_interior. 2019-10-24 01:58:25 +03:00
Mazdak Farrokhzad
15a6c09b6e pre-expansion gate type_ascription 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
e4ed886578 pre-expansion gate box_syntax 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
137ded8ab1 pre-expansion gate label_break_value 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
66995a6a71 dedup GAT gate checks 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
1935ba658c pre-expansion gate try_blocks 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
665a876e30 pre-expansion gate exclusive_range_pattern 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
2aff6b36d7 pre-expansion gate box_patterns 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
1f470ceac2 pre-expansion gate decl_macro 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
49cbfa1a6f pre-expansion gate const_generics 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
04c661ba02 pre-expansion gate crate_visibility_modifier 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
c17a1fd7d0 pre-expansion gate associated_type_bounds 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
2d182b82ce pre-expansion gate trait_alias. 2019-10-24 00:32:03 +02:00
Mazdak Farrokhzad
2e64bb2d37 syntax: reject trait Foo: Bar = Baz;.
Add test for rejecting `trait A: B1 = B2;`.
Also test rejection of `trait A: = B;`.
2019-10-24 00:31:11 +02:00
Guillaume Gomez
01a1bcb7f9 Fix default "disable-shortcuts" feature value 2019-10-24 00:25:04 +02:00
David Wood
7ffbd62445
ignore uninhabited non-exhaustive variant fields
This commit modifies the uninhabitedness checking so that the fields of
a non-exhaustive variant (which is not local) are ignored if they are
uninhabited. This is an improvement over the previous behaviour which
considered all non-local non-exhaustive variants useful because
unreachable patterns are now detected.

Signed-off-by: David Wood <david@davidtw.co>
2019-10-23 22:10:58 +01:00
Mazdak Farrokhzad
3cd7a17406
Rollup merge of #65704 - RalfJung:exact-size, r=oli-obk
relax ExactSizeIterator bound on write_bytes

Too many iterators don't have that bound. Instead we do run-time checks.

r? @oli-obk
2019-10-23 22:19:24 +02:00
Mazdak Farrokhzad
b2b35797d0
Rollup merge of #65696 - varkor:nll-chalk-const-generics-issue, r=eddyb
Fix an issue with const inference variables sticking around under Chalk + NLL

Fixes https://github.com/rust-lang/rust/issues/65675.
Fixes https://github.com/rust-lang/rust/issues/62579.

r? @eddyb
cc @LukasKalbertodt @skinny121
2019-10-23 22:19:22 +02:00
Mazdak Farrokhzad
ba9a9ebb25
Rollup merge of #65691 - GuillaumeGomez:2018-edition-E0659, r=Dylan-DPC
Update E0659 error code long explanation to 2018 edition

Fixes #65571

r? @Centril
2019-10-23 22:19:21 +02:00
Mazdak Farrokhzad
a649b1666c
Rollup merge of #65657 - nnethercote:rm-InternedString-properly, r=eddyb
Remove `InternedString`

This PR removes `InternedString` by converting all occurrences to `Symbol`. There are a handful of places that need to use the symbol chars instead of the symbol index, e.g. for stable sorting; local conversions `LocalInternedString` is used in those places.

r? @eddyb
2019-10-23 22:19:19 +02:00
Mazdak Farrokhzad
951b8c84be
Rollup merge of #65648 - nnethercote:rm-intersect_opt, r=nikomatsakis
Eliminate `intersect_opt`.

Its fourth argument is always `Some(pred)`, so the pattern matching is
unnecessary. This commit inlines and removes it.

r? @nikomatsakis
2019-10-23 22:19:17 +02:00
Mazdak Farrokhzad
4a870aaee4
Rollup merge of #65641 - nnethercote:derive-TokenStream-Encodable-Decodable, r=petrochenkov
Derive `Rustc{En,De}codable` for `TokenStream`.

`TokenStream` used to be a complex type, but it is now just a newtype
around a `Lrc<Vec<TreeAndJoint>>`. Currently it uses custom encoding
that discards the `IsJoint` and custom decoding that adds `NonJoint`
back in for every token tree. This requires building intermediate
`Vec<TokenTree>`s.

This commit makes `TokenStream` derive `Rustc{En,De}codable`. This
simplifies the code, and avoids the creation of the intermediate
vectors, saving up to 3% on various benchmarks. It also changes the AST
JSON output in one test.

r? @petrochenkov
2019-10-23 22:19:16 +02:00
Mazdak Farrokhzad
c192e318ca
Rollup merge of #65583 - eddyb:more-query-like-cross-crate-tables, r=michaelwoerister
rustc_metadata: use a table for super_predicates, fn_sig, impl_trait_ref.

This is an attempt at a part of #65407, i.e. moving parts of cross-crate "metadata" into tables that match queries more closely.

Three new tables should be enough to see some perf/metadata size changes.
(need to do something similar to https://github.com/rust-lang/rust/pull/59953#issuecomment-542521919)

There are other bits of data that could be made into tables, but they can be more compact so the impact would likely be not as bad, and they're also more work to set up.
2019-10-23 22:19:14 +02:00
Mazdak Farrokhzad
6bb7449fdb
Rollup merge of #65518 - estebank:i-want-to-break-free, r=eddyb
Avoid ICE when checking `Destination` of `break` inside a closure

Fix #65383, fix #62480. This is a `[regression-from-stable-to-stable]` and a fairly small change to avoid the ICE by properly handling this case.
2019-10-23 22:19:13 +02:00
Mazdak Farrokhzad
a1514b4758
Rollup merge of #65479 - SimonSapin:matches, r=alexcrichton
Add the `matches!( $expr, $pat ) -> bool` macro

# Motivation

This macro is:

* General-purpose (not domain-specific)
* Simple (the implementation is short)
* Very popular [on crates.io](https://crates.io/crates/matches) (currently 37th in all-time downloads)
* The two previous points combined make it number one in [left-pad index](https://twitter.com/bascule/status/1184523027888988160) score

As such, I feel it is a good candidate for inclusion in the standard library.

In fact I already felt that way five years ago: https://github.com/rust-lang/rust/pull/14685 (Although the proof of popularity was not as strong at the time.)

# API

<details>
<del>

Back then, the main concern was that this macro may not be quite universally-enough useful to belong in the prelude.

Therefore, this PR adds the macro such that using it requires one of:

```rust
use core::macros::matches;
use std::macros::matches;
```

</del>
</details>

Like arms of a `match` expression, the macro supports multiple patterns separated by `|` and optionally followed by `if` and a guard expression:

```rust
let foo = 'f';
assert!(matches!(foo, 'A'..='Z' | 'a'..='z'));

let bar = Some(4);
assert!(matches!(bar, Some(x) if x > 2));
```

<details>
<del>

# Implementation constraints

A combination of reasons make it tricky for a standard library macro not to be in the prelude.

Currently, all public `macro_rules` macros in the standard library macros end up “in the prelude” of every crate not through `use std::prelude::v1::*;` like for other kinds of items, but through `#[macro_use]` on `extern crate std;`. (Both are injected by `src/libsyntax_ext/standard_library_imports.rs`.)

`#[macro_use]` seems to import every macro that is available at the top-level of a crate, even if through a `pub use` re-export.

Therefore, for `matches!` not to be in the prelude, we need it to be inside of a module rather than at the root of `core` or `std`.

However, the only way to make a `macro_rules` macro public outside of the crate where it is defined appears to be `#[macro_export]`. This exports the macro at the root of the crate regardless of which module defines it. See [macro scoping](https://doc.rust-lang.org/reference/macros-by-example.html#scoping-exporting-and-importing) in the reference.

Therefore, the macro needs to be defined in a crate that is not `core` or `std`.

# Implementation

This PR adds a new `matches_macro` crate as a private implementation detail of the standard library. This crate is `#![no_core]` so that libcore can depend on it. It contains a `macro_rules` definition with `#[macro_export]`.

libcore and libstd each have a new public `macros` module that contains a `pub use` re-export of the macro. Both the module and the macro are unstable, for now.

The existing private `macros` modules are renamed `prelude_macros`, though their respective source remains in `macros.rs` files.

</del>
</details>
2019-10-23 22:19:11 +02:00
Mazdak Farrokhzad
7c043e284a
Rollup merge of #65193 - Mark-Simulacrum:lockless-lintstore, r=nikomatsakis
Lockless LintStore

This removes mutability from the lint store after registration. Each commit stands alone, for the most part, though they don't make sense out of sequence.

The intent here is to move LintStore to a more parallel-friendly architecture, although also just a cleaner one from an implementation perspective. Specifically, this has the following changes:
 * We no longer implicitly register lints when registering lint passes
    * For the most part this means that registration calls now likely want to call something like:
       `lint_store.register_lints(&Pass::get_lints())` as well as `register_*_pass`.
    * In theory this is a simplification as it's much easier for folks to just register lints and then have passes that implement whichever lint however they want, rather than necessarily tying passes to lints.
 * Lint passes still have a list of associated lints, but a followup PR could plausibly change that
   * This list must be known for a given pass type, not instance, i.e., `fn get_lints()` is the signature instead of `fn get_lints(&self)` as before.
 * We do not store pass objects, instead storing constructor functions. This means we always get new passes when running lints (this happens approximately once though for a given compiler session, so no behavior change is expected).
 * Registration API is _much_ simpler: generally all functions are just taking `Fn() -> PassObject` rather than several different `bool`s.
2019-10-23 22:19:10 +02:00
Mazdak Farrokhzad
4b9fbfbc29
Rollup merge of #65144 - clarfon:moo, r=sfackler
Add Cow::is_borrowed and Cow::is_owned

Implements #65143.
2019-10-23 22:19:08 +02:00
Mazdak Farrokhzad
426c6cf84f
Rollup merge of #64178 - mati865:clippy, r=scottmcm
More Clippy fixes for alloc, core and std

Continuation of https://github.com/rust-lang/rust/pull/63805
2019-10-23 22:19:07 +02:00
Mara Bos
18ae175d60 Prevent unnecessary allocation in PathBuf::set_extension.
It was allocating a new OsString that was immediately dropped after
using it with set_file_name. Now it directly changes the extension in
the original buffer, without touching the rest of the file name or
allocating a temporary string.
2019-10-23 21:21:25 +02:00
Umesh Kalappa
eb6d757cb0 UI failures fix 2019-10-23 10:19:45 -07:00
varkor
624e34a5d0 Account for const generalisation in nll_relate 2019-10-23 18:00:35 +01:00