about summary refs log tree commit diff
path: root/src
AgeCommit message (Collapse)AuthorLines
2018-05-04Use rustfix' suggestion fixing APIPascal Hertleif-74/+6
Uses branch from <https://github.com/rust-lang-nursery/rustfix/pull/63> until we publish a new release.
2018-05-04First step towards rustfix compiletest modePascal Hertleif-2/+110
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-04Auto merge of #49870 - ↵bors-92/+505
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-04Auto merge of #50435 - cuviper:rm-lookup_host, r=sfacklerbors-72/+3
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-04Update mir-opt test to reflect change to MIR code-generation.Felix S. Klock II-53/+61
2018-05-04Auto merge of #50409 - KiChjang:issue-50343, r=nikomatsakisbors-3/+37
Skip checking for unused mutable locals that have no name Fixes #50343.
2018-05-04Auto merge of #50398 - llogiq:memchr-nano-opt, r=nagisabors-13/+2
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-04Auto merge of #50433 - nrc:update, r=alexcrichtonbors-8/+9
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-04Update RLS and Rustfmt (and Cargo)Nick Cameron-8/+9
2018-05-04Auto merge of #50397 - sgrif:sg-smaller-universe-refactorings, r=nikomatsakisbors-156/+168
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-03Remove the deprecated std::net::{lookup_host,LookupHost}Josh Stone-72/+3
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-03Auto merge of #50413 - kennytm:rollup, r=kennytmbors-60/+161
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-04Rollup merge of #50320 - GuillaumeGomez:fix-search-path-generation, ↵kennytm-5/+7
r=QuietMisdreavus Fix invalid path generation in rustdoc search Fixes #50311.
2018-05-03Fix invalid path generation in rustdoc searchGuillaume Gomez-5/+7
2018-05-04Rollup merge of #50416 - rleungx:non-lifetime, r=estebankkennytm-2/+28
check if the token is a lifetime before parsing Fixes #50381.
2018-05-04Rollup merge of #50406 - ExpHP:concat-nonzero-idents, r=dtolnaykennytm-4/+32
Forbid constructing empty identifiers from concat_idents The empty identifier is a [reserved identifier](https://github.com/rust-lang/rust/blob/8a37c75a3a661385cc607d934c70e86a9eaf5fd7/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-04Rollup merge of #50421 - ↵kennytm-13/+34
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-04Rollup merge of #50417 - matklad:pr-50379, r=alexcrichtonkennytm-0/+0
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-04Rollup merge of #50407 - nnethercote:inline-BytePos, r=michaelwoeristerkennytm-0/+10
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-04Rollup merge of #50401 - alexcrichton:remove-path-from-str, r=sfacklerkennytm-27/+0
Revert "Implement FromStr for PathBuf" This reverts commit 05a9acc3b844ff284a3e3d85dde2d9798abfb215. 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-04Rollup merge of #50393 - oli-obk:packed_const_panic, r=eddybkennytm-4/+30
Allow unaligned reads in constants fixes #50356 introduced in https://github.com/rust-lang/rust/pull/49513
2018-05-04Rollup merge of #50365 - nnethercote:nearest_common_ancestor-two-vecs, ↵kennytm-5/+6
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-04Rollup merge of #50360 - kennytm:fix-50232-clarify-unstable-name-collision, ↵kennytm-3/+3
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-04Rollup merge of #50349 - GuillaumeGomez:rename-type-declaration-label, ↵kennytm-1/+1
r=estebank Rename "show type declaration" to "show declaration" Fixes #50347. r? @QuietMisdreavus
2018-05-03Fix issue #50415.kennytm-2/+29
2018-05-03Update CargoAleksey Kladov-0/+0
2018-05-03Unit test for the new implicit borrow and deref within theFelix S. Klock II-0/+61
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-03When using NLL, implicitly borrow match bindings for any guard,Felix S. Klock II-38/+373
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-03Instrument `statement_effect_on_borrows` for the `lhs = &place` case.Felix S. Klock II-0/+6
2018-05-03Improve instrumentation for the bug reported during `fn ↵Felix S. Klock II-1/+2
report_borrowed_value_does_not_live_long_enough`.
2018-05-03Include the test name when reporting that an expected line was not found in ↵Felix S. Klock II-0/+2
a mir-opt test.
2018-05-03Auto merge of #50030 - flip1995:rfc2103, r=petrochenkovbors-302/+391
Implement tool_attributes feature (RFC 2103) cc #44690 This is currently just a rebased and compiling (hopefully) version of #47773. Let's see if travis likes this. I will add the implementation for `tool_lints` this week.
2018-05-03check if the token is a lifetime before parsingrleungx-2/+28
2018-05-03update concat_idents doc stubsMichael Lamparski-4/+4
2018-05-03Rollup merge of #50302 - GuillaumeGomez:add-query-search-order-check, ↵kennytm-7/+15
r=QuietMisdreavus Add query search order check Fixes #50180. r? @QuietMisdreavus
2018-05-03Auto merge of #50391 - nnethercote:escape_unicode, r=eddybbors-11/+5
Use escape_default() for strings in LitKind::token(). This avoids converting every char to \u{...} form, which bloats the resulting strings unnecessarily. It also provides consistency with the existing escape_default() calls in LitKind::token() used for raw string literals, char literals, and raw byte char literals. There are two benefits from this change. - Compilation is faster. Most of the rustc-perf benchmarks see a non-trivial speedup, particularly for incremental rebuilds, with the best speedup over 13%, and multiple others over 10%. - Generated rlibs are smaller. An extreme example is libfutures.rlib, which shrinks from 2073306 bytes to 1765927 bytes, a 15% reduction. r? @jseyfried <details><summary>Here are full numbers for all the rustc-perf runs where the improvement was > 1%.</summary> ``` regex-check avg: -11.1% min: -13.4% max: -5.5% futures-check avg: -7.6% min: -11.4% max: -3.5% futures-opt avg: -6.3% min: -10.3% max: -2.3% futures avg: -6.6% min: -10.3% max: -2.8% regex-opt avg: -4.7% min: -10.2% max: -0.4% regex avg: -5.3% min: -10.2% max: -1.2% hyper-check avg: -4.8% min: -6.6% max: -2.7% encoding-check avg: -4.1% min: -5.5% max: -2.5% issue-46449-check avg: -4.7% min: -5.2% max: -4.1% clap-rs-check avg: -2.9% min: -5.2% max: -1.1% hyper avg: -3.0% min: -5.1% max: -0.8% parser-check avg: -4.2% min: -4.9% max: -3.2% hyper-opt avg: -2.6% min: -4.9% max: -0.3% encoding-opt avg: -2.3% min: -4.6% max: -0.5% encoding avg: -2.5% min: -4.4% max: -0.6% issue-46449 avg: -2.3% min: -4.4% max: -1.8% issue-46449-opt avg: -1.7% min: -4.3% max: -0.9% clap-rs-opt avg: -1.6% min: -4.2% max: -0.2% serde-check avg: -1.4% min: -4.1% max: -0.2% clap-rs avg: -1.6% min: -3.9% max: -0.7% unify-linearly-check avg: -3.2% min: -3.7% max: -2.7% serde avg: -1.1% min: -3.5% max: -0.1% regression-31157-check avg: -2.6% min: -3.4% max: -1.6% helloworld-check avg: -2.5% min: -3.4% max: -0.6% serde-opt avg: -1.3% min: -3.3% max: -0.5% tokio-webpush-simple-check avg: -2.4% min: -3.2% max: -1.8% piston-image-check avg: -1.7% min: -3.2% max: -0.9% deeply-nested-opt avg: -1.5% min: -3.0% max: -0.6% deeply-nested-check avg: -1.9% min: -2.9% max: -0.4% deeply-nested avg: -1.9% min: -2.9% max: -1.2% syn-check avg: -1.8% min: -2.8% max: -0.6% coercions avg: -0.5% min: -2.8% max: 0.4% syn-opt avg: -0.9% min: -2.4% max: -0.1% syn avg: -1.1% min: -2.2% max: -0.3% parser-opt avg: -1.9% min: -2.1% max: -1.6% parser avg: -1.9% min: -2.1% max: -1.6% style-servo-check avg: -1.3% min: -2.0% max: -0.8% regression-31157-opt avg: -0.8% min: -2.0% max: 0.0% piston-image avg: -0.7% min: -1.8% max: -0.2% piston-image-opt avg: -0.6% min: -1.8% max: -0.0% regression-31157 avg: -1.0% min: -1.7% max: -0.3% html5ever-opt avg: -0.6% min: -1.5% max: -0.1% unify-linearly-opt avg: -1.3% min: -1.5% max: -1.1% unify-linearly avg: -1.3% min: -1.4% max: -1.2% tokio-webpush-simple-opt avg: -0.4% min: -1.2% max: -0.0% helloworld-opt avg: -1.0% min: -1.1% max: -0.6% helloworld avg: -1.0% min: -1.1% max: -0.7% inflate-opt avg: -0.3% min: -1.1% max: 0.1% html5ever-check avg: -0.6% min: -1.0% max: -0.3% inflate-check avg: -0.3% min: -1.0% max: -0.1% ``` </details>
2018-05-03Auto merge of #50378 - varkor:repr-align-max-29, r=eddybbors-9/+23
Reduce maximum repr(align(N)) to 2^29 The current maximum `repr(align(N))` alignment is larger than the maximum alignment accepted by LLVM, which can cause issues for huge values of `N`, as seen in #49492. Fixes #49492. r? @rkruppe
2018-05-02Skip checking for unused mutable locals that have no nameKeith Yeung-3/+37
2018-05-03add missing output for ui testMichael Lamparski-0/+8
2018-05-03Always inline simple BytePos and CharPos methods.Nicholas Nethercote-0/+10
Because they are (a) trivial, and (b) super hot. This change speeds up most rustc-benchmarks, the best by 5%.
2018-05-02forbid empty identifiers from concat_identsMichael Lamparski-0/+20
2018-05-03Auto merge of #50369 - pftbest:unicode, r=SimonSapinbors-8/+8
Fix a warning in libcore on 16bit targets. This code is assuming that usize >= 32bits, but it is not the case on 16bit targets. It is producing a warning that can fail the compilation on MSP430 if deny(warnings) is enabled. It is very unlikely that someone would actually use this code on a microcontroller, but since unicode was merged into libcore we have to compile it on 16bit targets. I've tried to make sure that the code stays the same on x86, here is an assembly comparison: https://godbolt.org/g/wFw7dZ r? @SimonSapin
2018-05-03Remove parse::escape_default().Nicholas Nethercote-7/+3
str::escape_default() can be used instead.
2018-05-03Use escape_default() for strings in LitKind::token().Nicholas Nethercote-4/+2
This avoids converting every char to \u{...} form, which bloats the resulting strings unnecessarily. It also provides consistency with the existing escape_default() calls in LitKind::token() used for raw string literals, char literals, and raw byte char literals. There are two benefits from this change. - Compilation is faster. Most of the rustc-perf benchmarks see a non-trivial speedup, particularly for incremental rebuilds, with the best speedup over 13%, and multiple others over 10%. - Generated rlibs are smaller. An extreme example is libfutures.rlib, which shrinks from 2073306 bytes to 1765927 bytes, a 15% reduction.
2018-05-02Revert "Implement FromStr for PathBuf"Alex Crichton-27/+0
This reverts commit 05a9acc3b844ff284a3e3d85dde2d9798abfb215.
2018-05-02nano-optimization for memchr::repeat_byteAndre Bogus-13/+2
2018-05-02Add a comment explaining unification w/ universesSean Griffin-0/+5
2018-05-02Auto merge of #50355 - petrochenkov:50187, r=oli-obkbors-36/+122
Fix an unresolved import issue with enabled `use_extern_macros` This is a kinda ugly special-purpose solution that will break if we suddenly add a fourth namespace, but I hope to come up with something more general if I get to import resolution refactoring this summer. Fixes https://github.com/rust-lang/rust/issues/50187 thus removing a blocker for stabilization of `use_extern_macros`
2018-05-02Fix rebase issuesSean Griffin-1/+1
2018-05-02Auto merge of #50354 - varkor:initial-field-alignment-c-int, r=eddybbors-2/+108
Correct initial field alignment for repr(C)/repr(int) Fixes #50098 following https://github.com/rust-lang/rust/issues/50098#issuecomment-385497333. (I wasn't sure which kind of test was best suited here — I picked run-pass simply because that was convenient, but if codegen is more appropriate, let me know and I'll change it.) r? @eddyb