1
Fork 0
Commit graph

13641 commits

Author SHA1 Message Date
kennytm
98e801ac0b
Rollup merge of #50945 - stjepang:stabilize-from-ref, r=SimonSapin
Stabilize feature from_ref

Function `from_ref_mut` is now renamed to `from_mut`, as discussed in #45703.

Closes #45703.

r? @SimonSapin
2018-05-23 00:26:17 +08:00
kennytm
5b67b13d1e
Rollup merge of #50932 - nnethercote:seen-Predicates, r=eddyb
Optimize seen Predicate filtering.

This speeds up a few rustc-perf benchmark runs, most notably ones
involving 'coercions', the best by 2%.
2018-05-23 00:26:15 +08:00
kennytm
bc76e8b029
Rollup merge of #50931 - nnethercote:inline-try_get, r=michaelwoerister
Inline `try_get`.

This speeds up lots of rustc-perf benchmark runs. The maximum
improvement is 1%, but there are a lot in the 0.5--1.0% range.
2018-05-23 00:26:14 +08:00
Michael Woerister
3ed23a4bd0 Use SortedMap instead of BTreeMap for relocations in MIRI. 2018-05-22 16:54:07 +02:00
Michael Woerister
599b79ebf5 Make sure that queries have predictable symbol names. 2018-05-22 15:00:50 +02:00
bors
ff8fa5cc69 Auto merge of #50520 - Zoxc:alloc-misc, r=oli-obk
Misc changes related to Miri allocations

This builds on top of https://github.com/rust-lang/rust/pull/50249

r? @oli-obk
2018-05-22 10:35:59 +00:00
bors
1bbae5f386 Auto merge of #50876 - matthewjasper:rollback-trivial-bounds, r=nikomatsakis
Filter global bounds from ParamEnv again.

This PR adds back the filtering of global bounds from ParamEnv as a temporary solution for #50825.

<details>

Long term, the fix seems like it should be changing the priority in `candidate_should_be_dropped_in_favor_of` so that (global) where clauses aren't considered as highly.

a722296b6e/src/librustc/traits/select.rs (L2017-L2022)

</details>

r? @nikomatsakis
2018-05-22 06:54:34 +00:00
John Kåre Alsaker
ddc54188fb Introduce AllocType which indicates what AllocIds point to 2018-05-22 04:15:29 +02:00
John Kåre Alsaker
90167500cf Move the allocation interner out of InterpretInternerInner 2018-05-22 04:15:28 +02:00
John Kåre Alsaker
aace842a08 Get rid of literal_alloc_cache 2018-05-22 04:15:28 +02:00
bors
38fd7ea50a Auto merge of #50486 - Manishearth:approx-stab, r=nrc
Stabilize suggestion applicability field in json output

cc @killercup

r? @nrc
2018-05-22 01:53:55 +00:00
Manish Goregaokar
30bd586bec Stabilize suggestion applicability field in json output 2018-05-21 10:48:12 -07:00
bors
56e541ddf1 Auto merge of #50801 - eddyb:param-things, r=nikomatsakis
Quick refactoring around Substs & friends.

r? @nikomatsakis
2018-05-21 17:19:39 +00:00
Stjepan Glavina
26d62f55a4 Stabilize feature from_ref 2018-05-21 18:16:08 +02:00
bors
6e6a4b1957 Auto merge of #50265 - japaric:sz, r=alexcrichton
stabilize opt-level={s,z}

closes #35784
closes #47651

### Rationale

Since the lastest LLVM upgrade rustc / LLVM does more agressive loop unrolling. This results in increased binary size of embedded / no_std programs: a hundreds of bytes increase, or about a 7x increase, in the case of the smallest Cortex-M binary cf. #49260.

As we are shooting for embedded Rust on stable it would be great to also provide a way to optimize for size (which is pretty important for embedded applications that target resource constrained devices) on stable.

Also this has been baking in nightly for a long time.

r? @alexcrichton which team has to sign off this?
2018-05-21 12:33:19 +00:00
Eduard-Mihai Burtescu
73f62106ad rustc: move TypeParamDef's fields into GenericParamDefKind::Type. 2018-05-21 12:13:19 +03:00
Eduard-Mihai Burtescu
ba2c5c5288 rustc: use AccumulateVec in Substs::for_item. 2018-05-21 12:13:19 +03:00
Eduard-Mihai Burtescu
dce288ec82 rustc: don't expose Substs::fill_item as public. 2018-05-21 12:13:19 +03:00
Eduard-Mihai Burtescu
7e4d8718cb rustc: use intern_* instead of mk_* where possible. 2018-05-21 12:13:19 +03:00
Eduard-Mihai Burtescu
196b2e0d82 rustc: don't call Kind::from directly, use .into() instead. 2018-05-21 12:13:19 +03:00
Eduard-Mihai Burtescu
e3df729c25 rustc: make mk_substs_trait take &[Kind] instead of &[Ty]. 2018-05-21 12:13:17 +03:00
Eduard-Mihai Burtescu
d47dc98767 rustc: avoid using intern_*(it.collect()) when mk_*(it) works better. 2018-05-21 12:12:40 +03:00
Nicholas Nethercote
2ff632484c Optimize seen Predicate filtering.
This speeds up a few rustc-perf benchmark runs, most notably ones
involving 'coercions', the best by 2%.
2018-05-21 18:43:25 +10:00
Nicholas Nethercote
95120164b0 Inline try_get.
This speeds up lots of rustc-perf benchmark runs. The maximum
improvement is 1%, but there are a lot in the 0.5--1.0% range.
2018-05-21 18:35:47 +10:00
bors
1e508c4209 Auto merge of #50860 - nox:big-niches-for-big-doggos-🐕, r=eddyb
Find the largest niche when computing layouts

Otherwise we end up with `Option<Option<(&(), bool)>>` unnecessarily large.
2018-05-21 01:23:15 +00:00
bors
538fea5757 Auto merge of #50851 - eddyb:the-only-constant, r=nikomatsakis
rustc: introduce {ast,hir}::AnonConst to consolidate so-called "embedded constants".

Previously, constants in array lengths and enum variant discriminants were "merely an expression", and had no separate ID for, e.g. type-checking or const-eval, instead reusing the expression's.

That complicated code working with bodies, because such constants were the only special case where the "owner" of the body wasn't the HIR parent, but rather the same node as the body itself.
Also, if the body happened to be a closure, we had no way to allocate a `DefId` for both the constant *and* the closure, leading to *several* bugs (mostly ICEs where type errors were expected).

This PR rectifies the situation by adding another (`{ast,hir}::AnonConst`) node around every such constant. Also, const generics are expected to rely on the new `AnonConst` nodes, as well (cc @varkor).
* fixes #48838
* fixes #50600
* fixes #50688
* fixes #50689
* obsoletes #50623

r? @nikomatsakis
2018-05-20 22:37:06 +00:00
Zack M. Davis
98a04291e4 suggestion applicabilities for libsyntax and librustc, run-rustfix tests
Consider this a down payment on #50723. To recap, an `Applicability`
enum was recently (#50204) added, to convey to Rustfix and other tools
whether we think it's OK for them to blindly apply the suggestion, or
whether to prompt a human for guidance (because the suggestion might
contain placeholders that we can't infer, or because we think it has a
sufficiently high probability of being wrong even though it's—
presumably—right often enough to be worth emitting in the first place).

When a suggestion is marked as `MaybeIncorrect`, we try to use comments
to indicate precisely why (although there are a few places where we just
say `// speculative` because the present author's subjective judgement
balked at the idea that the suggestion has no false positives).

The `run-rustfix` directive is opporunistically set on some relevant UI
tests (and a couple tests that were in the `test/ui/suggestions`
directory, even if the suggestions didn't originate in librustc or
libsyntax). This is less trivial than it sounds, because a surprising
number of test files aren't equipped to be tested as fixed even when
they contain successfully fixable errors, because, e.g., there are more,
not-directly-related errors after fixing. Some test files need an
attribute or underscore to avoid unused warnings tripping up the "fixed
code is still producing diagnostics" check despite the fixes being
correct; this is an interesting contrast-to/inconsistency-with the
behavior of UI tests (which secretly pass `-A unused`), a behavior which
we probably ought to resolve one way or the other (filed issue #50926).

A few suggestion labels are reworded (e.g., to avoid phrasing it as a
question, which which is discouraged by the style guidelines listed in
`.span_suggestion`'s doc-comment).
2018-05-20 14:13:25 -07:00
F001
c3322556f5 Fix according to comments 2018-05-20 10:16:33 +08:00
F001
4bb39966a6 re-implement 2018-05-20 10:16:33 +08:00
bors
3ea2491589 Auto merge of #50893 - kennytm:rollup, r=kennytm
Rollup of 8 pull requests

Successful merges:

 - #50531 (Cleanup uses of TypeIdHasher and replace them with StableHasher)
 - #50819 (Fix potential divide by zero)
 - #50827 (Update LLVM to 56c931901cfb85cd6f7ed44c7d7520a8de1edf97)
 - #50829 (CheckLoopVisitor: also visit break expressions)
 - #50854 (in which the unused shorthand field pattern debacle/saga continues)
 - #50858 (Reorder description for snippets in rustdoc documentation)
 - #50883 (Fix warning when building stage0 libcore)
 - #50889 (Update clippy)

Failed merges:
2018-05-19 22:33:57 +00:00
kennytm
907288c73f
Rollup merge of #50854 - zackmdavis:and_the_case_of_the_unused_field_pattern_3_straight_to_video, r=estebank
in which the unused shorthand field pattern debacle/saga continues

In e4b1a79 (#47922), we corrected erroneous suggestions for unused
shorthand field pattern bindings, suggesting `field: _` where the
previous suggestion of `_field` wouldn't even have compiled
(#47390). Soon, it was revealed that this was insufficient (#50303), and
the fix was extended to references, slices, &c. (#50327) But even this
proved inadequate, as the erroneous suggestions were still being issued
for patterns in local (`let`) bindings (#50804). Here, we yank the
shorthand-detection and variable/node registration code into a new
common function that can be called while visiting both match arms and
`let` bindings.

Resolves #50804.

r? @estebank
2018-05-20 04:16:06 +08:00
Eduard-Mihai Burtescu
26aad25487 rustc: introduce {ast,hir}::AnonConst to consolidate so-called "embedded constants". 2018-05-19 20:34:42 +03:00
bors
5c3960c2d6 Auto merge of #50690 - oli-obk:mir_stuff, r=eddyb
Ensure that statics are always ByRef

Statics aren't values to be used, they are names for memory locations.

r? @eddyb

cc @Zoxc

fixes #50706
2018-05-19 17:30:18 +00:00
Eduard-Mihai Burtescu
072b0f617f rustc: removed unused DefPathData::Initializer DefId's for associated constants. 2018-05-19 18:47:06 +03:00
kennytm
9e914cc223
Rollup merge of #50531 - iancormac84:merge-typeidhasher-cleanup, r=michaelwoerister
Cleanup uses of TypeIdHasher and replace them with StableHasher

Fixes #50424

r? @michaelwoerister
2018-05-19 23:40:58 +08:00
bors
1b240dad06 Auto merge of #50763 - KyleStach1678:unused-loop-label, r=petrochenkov
Add lint checks for unused loop labels

Previously no warning was generated when a loop label was written out but never used (i.e. in a `break` or `continue` statement):
```rust
fn main() {
    'unused_label: loop {}
}
```
would compile without complaint.

This fix introduces `-W unused_loop_label`, which generates the following warning message for the above snippet:
```
warning: unused loop label
 --> main.rs:2:5
  |
2 |     'unused_label: loop {}
  |     ^^^^^^^^^^^^^
  |
  = note: #[warn(unused_loop_label)] on by default
```

Fixes: #50751.
2018-05-19 14:52:30 +00:00
Oliver Schneider
7c25aa79c5 Use Size instead of u64 in mir interpretation 2018-05-19 16:38:49 +02:00
Oliver Schneider
6630678428 Go through an allocation when accessing fields of constants 2018-05-19 14:24:24 +02:00
bors
ef8ee64774 Auto merge of #50760 - petrochenkov:legimp, r=nikomatsakis
Turn deprecation lint `legacy_imports` into a hard error

Closes https://github.com/rust-lang/rust/issues/38260

The lint was introduced in Dec 2016, then made deny-by-default in Jun 2017 when crater run found 0 regressions caused by it.

This lint requires some not entirely trivial amount of import resolution logic that (surprisingly or not) interacts with `feature(use_extern_macros)` (https://github.com/rust-lang/rust/issues/35896), so it would be desirable to remove it before stabilizing `use_extern_macros`.
In particular, this PR fixes the failing example in https://github.com/rust-lang/rust/issues/50725 (but not the whole issue, `use std::panic::{self}` still can cause other undesirable errors when `use_extern_macros` is enabled).
2018-05-19 12:16:50 +00:00
bors
c95e1cccc9 Auto merge of #50874 - nikomatsakis:nll-reset-unification, r=estebank
use `reset_unifications` instead of creating new unification table

This eliminates a hot spot in NLL performance.
2018-05-19 10:04:42 +00:00
bors
bdace29de0 Auto merge of #50744 - nikic:mutable-noalias, r=alexcrichton
Emit noalias on &mut parameters by default

This used to be disabled due to LLVM bugs in the handling of
noalias information in conjunction with unwinding. However,
according to #31681 all known LLVM bugs have been fixed by
LLVM 6.0, so it's probably time to reenable this optimization.

-Z no-mutable-noalias is left as an escape-hatch to debug problems
suspected to stem from this change.
2018-05-19 07:42:03 +00:00
Kyle Stachowicz
6da64a7666 Default unused_labels to allow, move to "unused" 2018-05-18 16:57:16 -07:00
Kyle Stachowicz
88f4063c83 Reimplement unused_labels lint as a compiler builtin in the resolver 2018-05-18 16:57:15 -07:00
Matthew Jasper
aa5635338c Filter global bounds from ParamEnv again. 2018-05-18 23:40:44 +01:00
bors
37a409177c Auto merge of #50319 - nagisa:align_to, r=alexcrichton
Implement [T]::align_to

Note that this PR deviates from what is accepted by RFC slightly by making `align_offset` to return an offset in elements, rather than bytes. This is necessary to sanely support `[T]::align_to` and also simply makes more sense™. The caveat is that trying to align a pointer of ZST is now an equivalent to `is_aligned` check, rather than anything else (as no number of ZST elements will align a misaligned ZST pointer).

It also implements the `align_to` slightly differently than proposed in the RFC to properly handle cases where size of T and U aren’t co-prime.

Furthermore, a promise is made that the slice containing `U`s will be as large as possible (contrary to the RFC) – otherwise the function is quite useless.

The implementation uses quite a few underhanded tricks and takes advantage of the fact that alignment is a power-of-two quite heavily to optimise the machine code down to something that results in as few known-expensive instructions as possible. Currently calling `ptr.align_offset` with an unknown-at-compile-time `align` results in code that has just a single "expensive" modulo operation; the rest is "cheap" arithmetic and bitwise ops.

cc https://github.com/rust-lang/rust/issues/44488 @oli-obk

As mentioned in the commit message for align_offset, many thanks go to Chris McDonald.
2018-05-18 21:49:38 +00:00
Niko Matsakis
7ed0fd7699 use reset_unifications instead of creating new unification table 2018-05-18 15:58:23 -04:00
bors
a722296b6e Auto merge of #50653 - oli-obk:bad_const, r=cramertj
Make the `const_err` lint `deny`-by-default

At best these things are runtime panics (debug mode) or overflows (release mode). More likely they are public constants that are unused in the crate declaring them.

This is not a breaking change, as dependencies won't break and root crates can `#![warn(const_err)]`, though I don't know why anyone would do that.
2018-05-18 17:17:35 +00:00
Anthony Ramine
b7db68f516 Find the largest niche when computing layouts
Otherwise we end up with `Option<Option<(&(), bool)>>` unnecessarily large.
2018-05-18 14:32:05 +02:00
bors
df40e61382 Auto merge of #50307 - petrochenkov:keyhyg2, r=nikomatsakis
Implement edition hygiene for keywords

Determine "keywordness" of an identifier in its hygienic context.
cc https://github.com/rust-lang/rust/pull/49611

I've resurrected `proc` as an Edition-2015-only keyword for testing purposes, but it should probably be buried again. EDIT: `proc` is removed again.
2018-05-18 10:57:05 +00:00
bors
fd18d2537d Auto merge of #50758 - varkor:stabilise-inclusive_range_methods, r=SimonSapin
Stabilise inclusive_range_methods

r? @SimonSapin

Closes #49022.
2018-05-18 08:10:23 +00:00