Commit Graph

77764 Commits

Author SHA1 Message Date
Alex Crichton
fa9e55faeb test: Make a dedicated testsuite for rustfix
This commit adds a dedicated mode to compiletest for running rustfix tests,
adding a new `src/test/rustfix` directory which will execute all tests as a
"rustfix" test, namely requiring that a `*.fixed` is next to the main file which
is the result of the rustfix project's application of fixes.

The `rustfix` crate is pulled in to actually perform the fixing, and the rustfix
compiletest mode will assert a few properties about the fixing:

* The expected fixed output must be the same as rustc's output suggestions
  applied to the original code.
* The fixed code must compile successfully
* The fixed code must have no further diagnostics emitted about it
2018-05-04 15:01:28 -07:00
Pascal Hertleif
b264504403 tidy 2018-05-04 15:01:28 -07:00
Pascal Hertleif
9680f3b381 Skip NLL compiletest in rustfix mode for now 2018-05-04 15:01:28 -07:00
Pascal Hertleif
c02aedfcaf Use rustfix' suggestion fixing API
Uses branch from <https://github.com/rust-lang-nursery/rustfix/pull/63>
until we publish a new release.
2018-05-04 15:01:28 -07:00
Pascal Hertleif
fd6aa149bc First step towards rustfix compiletest mode
This is the first small step towards testing auto-fixable compiler
suggestions using compiletest. Currently, it only checks if next to a
UI test there also happens to a `*.rs.fixed` file, and then uses rustfix
(added as external crate) on the original file, and asserts that it
produces the fixed version.

To show that this works, I've included one such test. I picked this test
case at random (and because it was simple) -- It is not relevant to the
2018 edition. Indeed, in the near future, we want to be able to restrict
rustfix to edition-lints, so this test cast might go away soon.

In case you still think this is somewhat feature-complete, here's a
quick list of things currently missing that I want to add before telling
people they can use this:

- [ ] Make this an actual compiletest mode, with `test [fix] …` output
  and everything
- [ ] Assert that fixed files still compile
- [ ] Assert that fixed files produce no (or a known set of) diagnostics
  output
- [ ] Update `update-references.sh` to support rustfix
- [ ] Use a published version of rustfix (i.e.: publish a new version
  rustfix that exposes a useful API for this)
2018-05-04 15:01:28 -07:00
Manish Goregaokar
01791dee8a Add test 2018-05-04 14:52:53 -07:00
Manish Goregaokar
ae4b38ea66 Rename idiom lints to migration lints 2018-05-04 14:50:39 -07:00
Manish Goregaokar
baa7b32d4b Mark lints with applicability 2018-05-04 14:31:26 -07:00
Alex Crichton
3e0ed2fc05 proc_macro: Explicitly make everything !Send/Sync
This commit adds explicit imp blocks to ensure that all publicly exported types
(except simple enums) are not `Send` nor `Sync` in the `proc_macro` crate.

cc #38356
2018-05-04 14:12:57 -07:00
Manish Goregaokar
9d34e8dd21 Make extern_absolute_paths only work on the new edition 2018-05-04 13:51:12 -07:00
Manish Goregaokar
dafbdeb384 Add idiom lint for bare extern crate 2018-05-04 11:24:36 -07:00
Manish Goregaokar
b1951f450a Make --edition imply the preview flag 2018-05-04 11:18:33 -07:00
Manish Goregaokar
10f66c7172 Rename breakage lints 2018-05-04 11:01:08 -07:00
Manish Goregaokar
7485903b6b Add catch and proc macros to the edition (fixes #50443) 2018-05-04 10:59:33 -07:00
bors
91db9dcf37 Auto merge of #49870 - pnkfelix:issue-27282-immut-borrow-all-pat-ids-in-guards, r=nikomatsakis
Immutably and implicitly borrow all pattern ids for their guards (NLL only)

This is an important piece of rust-lang/rust#27282.

It applies only to NLL mode. It is a change to MIR codegen that is currently toggled on only when NLL is turned on. It thus affect MIR-borrowck but not the earlier static analyses (such as the type checker).

This change makes it so that any pattern bindings of type T for a match arm will map to a `&T` within the context of the guard expression for that arm, but will continue to map to a `T` in the context of the arm body.

To avoid surfacing this type distinction in the user source code (which would be a severe change to the language and would also require far more revision to the compiler internals), any occurrence of such an identifier in the guard expression will automatically get a deref op applied to it.

So an input like:
```rust
let place = (1, Foo::new());
match place {
  (1, foo) if inspect(foo) => feed(foo),
  ...
}
```
will be treated as if it were really something like:
 ```rust
let place = (1, Foo::new());
match place {
    (1, Foo { .. }) if { let tmp1 = &place.1; inspect(*tmp1) }
                    => { let tmp2 = place.1; feed(tmp2) },
    ...
}
```

And an input like:
```rust
let place = (2, Foo::new());
match place {
    (2, ref mut foo) if inspect(foo) => feed(foo),
    ...
}
```
will be treated as if it were really something like:

```rust
let place = (2, Foo::new());
match place {
    (2, Foo { .. }) if { let tmp1 = & &mut place.1; inspect(*tmp1) }
                    => { let tmp2 = &mut place.1; feed(tmp2) },
    ...
}
```

In short, any pattern binding will always look like *some* kind of `&T` within the guard at least in terms of how the MIR-borrowck views it, and this will ensure that guard expressions cannot mutate their the match inputs via such bindings. (It also ensures that guard expressions can at most *copy* values from such bindings; non-Copy things cannot be moved via these pattern bindings in guard expressions, since one cannot move out of a `&T`.)
2018-05-04 15:00:13 +00:00
bors
0bfe3072cb Auto merge of #50435 - cuviper:rm-lookup_host, r=sfackler
Remove the deprecated std::net::{lookup_host,LookupHost}

These are unstable, and were deprecated by #47510, since Rust 1.25.  The
internal `sys` implementations are still kept to support the call in the
common `resolve_socket_addr`.
2018-05-04 12:12:05 +00:00
Felix S. Klock II
930e76e2af Update mir-opt test to reflect change to MIR code-generation. 2018-05-04 13:17:13 +02:00
Michael Woerister
d0253ad724 bootstrap: Fix LLVM bin path setup for Windows. 2018-05-04 03:20:29 -07:00
bors
22a41e4515 Auto merge of #50409 - KiChjang:issue-50343, r=nikomatsakis
Skip checking for unused mutable locals that have no name

Fixes #50343.
2018-05-04 08:22:13 +00:00
Harm Berntsen
235af75d15
Merge armv5te musl container with dist-various-1 2018-05-04 08:59:49 +02:00
Harm Berntsen
80f1912d83
Add eabi suffix to armv5te musl target 2018-05-04 08:47:24 +02:00
bors
e78c51adc2 Auto merge of #50398 - llogiq:memchr-nano-opt, r=nagisa
nano-optimization for memchr::repeat_byte

This replaces the multiple shifts & bitwise or with a single multiplication

In my benchmarks this performs equally well or better, especially on 64bit systems (it shaves a stable nanosecond on my skylake). This may go against conventional wisdom, but the shifts and bitwise ors cannot be pipelined because of hard data dependencies.

While it may or may not be worthwile from an optimization standpoint, it also reduces code size, so there's basically no downside.
2018-05-04 05:38:18 +00:00
Michael Woerister
58eeeb4208 Check that rustc can be built successfully with parallel queries for PRs. 2018-05-04 06:54:21 +02:00
bors
841e0ccb4c Auto merge of #50433 - nrc:update, r=alexcrichton
Update RLS and Rustfmt (and Cargo)

Updates RLS and Rustfmt (the latter fixing tests). Cargo is updated too (to fix RLS tests), but that is covered by https://github.com/rust-lang/rust/pull/50417, so probably  won't do much.

r? @alexcrichton
2018-05-04 02:58:37 +00:00
Nick Cameron
4952426c50 Update RLS and Rustfmt (and Cargo) 2018-05-04 12:33:56 +12:00
bors
1eab9c5a1b Auto merge of #50397 - sgrif:sg-smaller-universe-refactorings, r=nikomatsakis
Refactorings in preparation for the removal of the leak check

This contains all of the commits from #48407 that I was able to pull out on their own. This has most of the refactoring/ground work to unblock other work, but without the behavior changes that still need a crater run and NLL changes.

r? @nikomatsakis
2018-05-04 00:16:41 +00:00
Josh Stone
b539936845 Remove the deprecated std::net::{lookup_host,LookupHost}
These are unstable, and were deprecated by #47510, since Rust 1.25.  The
internal `sys` implementations are still kept to support the call in the
common `resolve_socket_addr`.
2018-05-03 16:24:21 -07:00
Nick Cameron
28dfc07a35 Ping infra team on all tool bustage 2018-05-04 10:21:05 +12:00
bors
e82261dfbb Auto merge of #50413 - kennytm:rollup, r=kennytm
Rollup of 12 pull requests

Successful merges:

 - #50302 (Add query search order check)
 - #50320 (Fix invalid path generation in rustdoc search)
 - #50349 (Rename "show type declaration" to "show declaration")
 - #50360 (Clarify wordings of the `unstable_name_collision` lint.)
 - #50365 (Use two vectors in nearest_common_ancestor.)
 - #50393 (Allow unaligned reads in constants)
 - #50401 (Revert "Implement FromStr for PathBuf")
 - #50406 (Forbid constructing empty identifiers from concat_idents)
 - #50407 (Always inline simple BytePos and CharPos methods.)
 - #50416 (check if the token is a lifetime before parsing)
 - #50417 (Update Cargo)
 - #50421 (Fix ICE when using a..=b in a closure.)

Failed merges:
2018-05-03 20:45:54 +00:00
kennytm
03a0402dbf
Rollup merge of #50320 - GuillaumeGomez:fix-search-path-generation, r=QuietMisdreavus
Fix invalid path generation in rustdoc search

Fixes #50311.
2018-05-04 04:28:00 +08:00
Guillaume Gomez
a876d28b4a Fix invalid path generation in rustdoc search 2018-05-03 22:14:37 +02:00
kennytm
bab812d7ca
Rollup merge of #50416 - rleungx:non-lifetime, r=estebank
check if the token is a lifetime before parsing

Fixes #50381.
2018-05-04 02:16:59 +08:00
kennytm
4cc4a67cea
Rollup merge of #50406 - ExpHP:concat-nonzero-idents, r=dtolnay
Forbid constructing empty identifiers from concat_idents

The empty identifier is a [reserved identifier](8a37c75a3a/src/libsyntax_pos/symbol.rs (L300-L305)) in rust, apparently used for black magicks like representing the crate root or somesuch... and therefore, being able to construct it is Ungood.  Presumably.

...even if the macro that lets you construct it is so useless that you can't actually do any damage with it. (and believe me, I tried)

Fixes #50403.

**Note:** I noticed that when you try to do something similar with `proc_macro::Term`, the compiler actually catches it and flags the identifier as reserved.  Perhaps a better solution would be to somehow have that same check applied here.
2018-05-04 02:16:39 +08:00
kennytm
dfb32af87d
Rollup merge of #50421 - kennytm:fix-50415-ice-when-returning-range-inclusive-from-closure, r=michaelwoerister
Fix ICE when using a..=b in a closure.

Fix #50415.
2018-05-04 02:12:55 +08:00
kennytm
5976e8ac6b
Rollup merge of #50417 - matklad:pr-50379, r=alexcrichton
Update Cargo

This should fix RLS

cc https://github.com/rust-lang/rust/pull/50379, https://github.com/rust-lang/cargo/pull/5465
2018-05-04 02:12:53 +08:00
kennytm
e65098bcf1
Rollup merge of #50407 - nnethercote:inline-BytePos, r=michaelwoerister
Always inline simple BytePos and CharPos methods.

Because they are (a) trivial, and (b) super hot.

This change speeds up most rustc-perf benchmarks, the best by 5%.

Full measurements:
```
coercions-check
	avg: -3.0%	min: -5.4%	max: -1.3%
helloworld-check
	avg: -3.9%	min: -4.1%	max: -3.6%
unify-linearly-check
	avg: -3.1%	min: -3.7%	max: -2.5%
deeply-nested-check
	avg: -2.6%	min: -3.6%	max: -2.1%
coercions-opt
	avg: -2.1%	min: -3.6%	max: -1.3%
coercions
	avg: -2.0%	min: -3.5%	max: -1.0%
issue-46449-check
	avg: -2.8%	min: -3.1%	max: -2.6%
parser-check
	avg: -2.6%	min: -3.1%	max: -2.0%
deeply-nested-opt
	avg: -1.5%	min: -3.0%	max: -0.8%
deeply-nested
	avg: -1.8%	min: -2.9%	max: -1.1%
issue-46449
	avg: -1.4%	min: -2.7%	max: -1.1%
issue-46449-opt
	avg: -1.0%	min: -2.7%	max: -0.5%
regression-31157-check
	avg: -1.7%	min: -2.3%	max: -1.1%
tuple-stress-opt
	avg: -1.0%	min: -2.2%	max: -0.5%
tokio-webpush-simple-check
	avg: -1.6%	min: -2.1%	max: -1.2%
tuple-stress-check
	avg: -1.2%	min: -2.1%	max: -0.8%
unused-warnings-check
	avg: -1.6%	min: -2.0%	max: -1.4%
encoding-check
	avg: -1.4%	min: -1.8%	max: -1.0%
tuple-stress
	avg: -1.0%	min: -1.7%	max: -0.6%
encoding-opt
	avg: -0.9%	min: -1.6%	max: -0.3%
unused-warnings
	avg: -1.3%	min: -1.6%	max: -1.2%
unused-warnings-opt
	avg: -1.3%	min: -1.5%	max: -1.2%
encoding
	avg: -1.0%	min: -1.5%	max: -0.4%
html5ever-opt
	avg: -0.7%	min: -1.5%	max: -0.3%
futures
	avg: -1.0%	min: -1.5%	max: -0.5%
futures-check
	avg: -1.0%	min: -1.5%	max: -0.5%
futures-opt
	avg: -0.8%	min: -1.4%	max: -0.3%
regression-31157-opt
	avg: -0.5%	min: -1.4%	max: -0.0%
unify-linearly-opt
	avg: -1.2%	min: -1.4%	max: -1.0%
parser-opt
	avg: -1.2%	min: -1.4%	max: -1.0%
helloworld
	avg: -1.3%	min: -1.4%	max: -1.3%
helloworld-opt
	avg: -1.3%	min: -1.3%	max: -1.3%
parser
	avg: -1.2%	min: -1.3%	max: -1.0%
regex-check
	avg: -1.1%	min: -1.3%	max: -0.7%
unify-linearly
	avg: -1.1%	min: -1.3%	max: -1.0%
syn-check
	avg: -0.8%	min: -1.3%	max: -0.3%
piston-image-check
	avg: -0.7%	min: -1.2%	max: -0.4%
regex-opt
	avg: -0.5%	min: -1.2%	max: -0.0%
syn
	avg: -0.6%	min: -1.2%	max: -0.3%
hyper
	avg: -0.8%	min: -1.2%	max: -0.4%
syn-opt
	avg: -0.5%	min: -1.2%	max: -0.1%
regex
	avg: -0.7%	min: -1.2%	max: -0.3%
regression-31157
	avg: -0.7%	min: -1.2%	max: -0.3%
clap-rs-check
	avg: -0.6%	min: -1.1%	max: -0.2%
hyper-check
	avg: -0.8%	min: -1.1%	max: -0.5%
piston-image-opt
	avg: -0.4%	min: -1.1%	max: -0.0%
hyper-opt
	avg: -0.6%	min: -1.0%	max: 0.0%
inflate
	avg: -0.4%	min: -1.0%	max: -0.2%
html5ever
	avg: -0.5%	min: -1.0%	max: -0.2%
inflate-opt
	avg: -0.3%	min: -1.0%	max: 0.3%
deep-vector-check
	avg: -0.6%	min: -1.0%	max: -0.3%
style-servo-check
	avg: -0.7%	min: -1.0%	max: -0.5%
tokio-webpush-simple-opt
	avg: -0.3%	min: -0.9%	max: 0.0%
inflate-check
	avg: -0.3%	min: -0.9%	max: -0.1%
piston-image
	avg: -0.4%	min: -0.8%	max: -0.2%
deep-vector
	avg: -0.4%	min: -0.8%	max: -0.1%
clap-rs
	avg: -0.4%	min: -0.7%	max: -0.2%
deep-vector-opt
	avg: -0.2%	min: -0.7%	max: 0.2%
style-servo
	avg: -0.3%	min: -0.7%	max: 0.1%
crates.io
	avg: -0.4%	min: -0.6%	max: -0.2%
crates.io-opt
	avg: -0.3%	min: -0.6%	max: -0.1%
tokio-webpush-simple
	avg: -0.4%	min: -0.6%	max: -0.3%
crates.io-check
	avg: -0.4%	min: -0.6%	max: -0.3%
html5ever-check
	avg: -0.4%	min: -0.6%	max: -0.2%
serde
	avg: -0.1%	min: -0.6%	max: 0.2%
serde-check
	avg: -0.1%	min: -0.5%	max: 0.4%
serde-opt
	avg: -0.2%	min: -0.5%	max: -0.1%
style-servo-opt
	avg: -0.2%	min: -0.4%	max: -0.0%
clap-rs-opt
	avg: -0.1%	min: -0.3%	max: 0.0%
2018-05-04 02:12:52 +08:00
kennytm
cd6fa5f426
Rollup merge of #50401 - alexcrichton:remove-path-from-str, r=sfackler
Revert "Implement FromStr for PathBuf"

This reverts commit 05a9acc3b8.

The libs team was discussing https://github.com/rust-lang/rust/issues/44431 today and the changes originally added in https://github.com/rust-lang/rust/pull/48292 and the conclusion was that we'd like to revert this for now until `!` is stable. This'll provide us maximal flexibility to tweak the error type here in the future, and it looks like `!` is close-ish to stabilization so hopefully this won't be delayed for too long.
2018-05-04 02:12:51 +08:00
kennytm
46bc2c28b9
Rollup merge of #50393 - oli-obk:packed_const_panic, r=eddyb
Allow unaligned reads in constants

fixes #50356

introduced in https://github.com/rust-lang/rust/pull/49513
2018-05-04 02:12:50 +08:00
kennytm
fd4bf23783
Rollup merge of #50365 - nnethercote:nearest_common_ancestor-two-vecs, r=nikomatsakis
Use two vectors in nearest_common_ancestor.

When looking at any scope in scope chain A, we only need to look for
matches among scopes previously seen in scope chain B, and vice versa.
This halves the number of "seen before?" comparisons, speeding up some
runs of style-servo, clap-rs, and syn by 1--2%.

Thanks to @kirillkh for the suggestion.

r? @nikomatsakis
2018-05-04 02:12:48 +08:00
kennytm
06a47dc26e
Rollup merge of #50360 - kennytm:fix-50232-clarify-unstable-name-collision, r=nikomatsakis
Clarify wordings of the `unstable_name_collision` lint.

Stabilizing an inherent method may cause change in behavior instead of inference error. Updated to use the wording from [varkor's comment].

Closes #50232.

[varkor's comment]: https://github.com/rust-lang/rust/issues/50232#issuecomment-384678097
2018-05-04 02:12:47 +08:00
kennytm
73042c54f5
Rollup merge of #50349 - GuillaumeGomez:rename-type-declaration-label, r=estebank
Rename "show type declaration" to "show declaration"

Fixes #50347.

r? @QuietMisdreavus
2018-05-04 02:12:46 +08:00
Harm Berntsen
b71f6364d2
Add armv5te-unknown-linux-musl target 2018-05-03 16:53:04 +02:00
kennytm
83c45051f8
Fix issue #50415. 2018-05-03 22:36:44 +08:00
Aleksey Kladov
70c52e5e19 Update Cargo 2018-05-03 16:49:47 +03:00
Christopher Vittal
2797fefb91 Add mailmap entry for Chris Vittal
I use both Chris and Christopher in git configs and other places.
2018-05-03 09:38:23 -04:00
Shotaro Yamada
14f32f64c8 rustdoc: Resolve nested impl Traits 2018-05-03 22:34:10 +09:00
Nicholas Nethercote
7cf142f78b Avoid many cmt allocations.
`cmt` is a ref-counted wrapper around `cmt_` The use of refcounting
keeps `cmt` handling simple, but a lot of `cmt` instances are very
short-lived, and heap-allocating the short-lived ones takes up time.

This patch changes things in the following ways.

- Most of the functions that produced `cmt` instances now produce `cmt_`
  instances. The `Rc::new` calls that occurred within those functions
  now occur at their call sites (but only when necessary, which isn't
  that often).

- Many of the functions that took `cmt` arguments now take `&cmt_`
  arguments. This includes all the methods in the `Delegate` trait.

As a result, the vast majority of the heap allocations are avoided. In
an extreme case, the number of calls to malloc in tuple-stress drops
from 9.9M to 7.9M, a drop of 20%. And the compile times for many runs of
coercions, deep-vector, and tuple-stress drop by 1--2%.
2018-05-03 22:14:35 +10:00
Felix S. Klock II
28d18fabe3 Unit test for the new implicit borrow and deref within the
guard expressions of matches (activated only when using
new NLL mode).

Review feedback: removed 27282 from filename. (The test still
references it in a relevant comment in the file itself so that seemed
like a reasonable compromise.)
2018-05-03 14:03:16 +02:00
Felix S. Klock II
a72790d879 When using NLL, implicitly borrow match bindings for any guard,
deref'ing such borrows within that guard.

Review feedback: Add comment noting a point where we may or may not
need to add a cast when we finish the work on rust-lang/rust#27282.

Review feedback: Pass a newtype'd `ArmHasGuard` rather than a raw boolean.

Review feedback: toggle "ref binding in guards" semantics via specific
method. (This should ease a follow-up PR that just unconditionally
adopts the new semantics.)
2018-05-03 14:03:16 +02:00
Felix S. Klock II
b00db7c75b Instrument statement_effect_on_borrows for the lhs = &place case. 2018-05-03 14:03:16 +02:00