Commit Graph

84025 Commits

Author SHA1 Message Date
Niko Matsakis
dc9317ff8c use IfEq to defer equality comparison around where clauses` 2018-09-26 09:38:26 -04:00
Niko Matsakis
7f8c42d7f0 refactor away AnyRegions and AllRegions
It's a bit cleaner to just have `AnyBound` and `AllBound`, after all.
2018-09-26 09:38:26 -04:00
Niko Matsakis
18b86e9406 introduce VerifyBound::IfEq (presently unused) 2018-09-26 09:38:26 -04:00
Niko Matsakis
58fd6fad24 change to use impl Trait a bit 2018-09-26 09:38:26 -04:00
Niko Matsakis
85d12e2f0b remove handling of verify from taintset
This lets us remove `for_each_region` and makes things simpler.
2018-09-26 09:38:26 -04:00
Niko Matsakis
b5469c5fd7 make normalize work on any type-foldable 2018-09-26 09:38:26 -04:00
Niko Matsakis
688aaf3bbb lexical_region_resolve: rustfmt 2018-09-26 09:38:26 -04:00
Niko Matsakis
582a369bc3 encapsulate infcx too into the delegate 2018-09-26 09:38:26 -04:00
Niko Matsakis
c6f4513804 extract out NLL-specific code from relate-tys into a delegate
No functional change.
2018-09-26 09:38:26 -04:00
Niko Matsakis
a4955d1b2c refactor NLL relate_tys to use Region internally, not RegionVid
No functional change.
2018-09-26 09:38:26 -04:00
Niko Matsakis
689b791422 use approx. bounds to decide whether to add outlives obligations
Before, if we had a projection like `<T as Foo<'0>>::Bar: 'x` and a
where clause like `<T as Foo<'a>>::Bar: 'a`, we considered those to
have nothing to do with one another. Therefore, we would use the
"overconstrained" path of adding `T: 'x` and `'0: 'x` requirements. We
now do a "fuzzy" match where we erase regions first and hence we see
the env bound `'a`.
2018-09-26 09:38:26 -04:00
Niko Matsakis
4b193cb92a propagate the compare_ty fn further up 2018-09-26 09:38:26 -04:00
Niko Matsakis
13d579bd62 introduce the idea of an "approximate match"
In fact, however, we currently always give back the same exact answers
as ever. But we don't rely on them being exact anymore.
2018-09-26 09:38:26 -04:00
Niko Matsakis
db0e62692e introduce a "comparison fn" instead of always use == 2018-09-26 09:38:26 -04:00
Niko Matsakis
9b63dcc773 split out getting the declared bounds from the env versus trait
Right now, we just concatenate them
2018-09-26 09:38:26 -04:00
Niko Matsakis
b0e1fec332 break out the code that computes VerifyBounds
Later, we'll defer this work until a separate phase.
2018-09-26 09:38:26 -04:00
Niko Matsakis
b2e0215a1f apply process_registered_region_obligations at the end of regionck
We used to apply it repeatedly as we went, relying on the current
value of the `region_bound_pairs_accum` vector. But now we save those
values into a map, so we can just process all the registered region
obligations at the end.
2018-09-26 09:38:26 -04:00
Niko Matsakis
9e305a8a23 type_check/mod.rs: rustfmt 2018-09-26 09:38:24 -04:00
Niko Matsakis
2f31698c26 use RegionBoundPairs type alias 2018-09-26 09:37:02 -04:00
Niko Matsakis
d5d2232838 auto_trait.rs: rustfmt 2018-09-26 09:30:54 -04:00
Niko Matsakis
672e071a42 change RegionObligation to store a SubregionOrigin 2018-09-26 09:30:54 -04:00
Niko Matsakis
1830c9e8f9 use a UnlessNll flag to consolidate error reporting paths 2018-09-26 09:30:54 -04:00
Niko Matsakis
84563dac88 build up a map of the region-bound pairs for each body-id
Presently unused.
2018-09-26 09:30:54 -04:00
Niko Matsakis
1fb4ea91f2 outlives/env: rustfmt 2018-09-26 09:30:54 -04:00
Niko Matsakis
80ed62eea7 regionck: rustfmt 2018-09-26 09:30:54 -04:00
bors
c3a1a0d340 Auto merge of #53824 - ljedrz:begone_onevector, r=michaelwoerister
Remove OneVector, increase related SmallVec capacities

Removes the `OneVector` type alias (equivalent to `SmallVec<[T; 1]>`); it is used in scenarios where the capacity of 1 is often exceeded, which might be nullifying the performance wins (due to spilling to the heap) expected when using `SmallVec` instead of `Vec`.

The numbers I used in this PR are very rough estimates - it would probably be a good idea to adjust some/all of them, which is what this proposal is all about.

It might be a good idea to additionally create some local type aliases for the `SmallVec`s in the `Folder` trait, as they are repeated in quite a few spots; I'd be happy to apply this sort of adjustments.
2018-09-26 10:04:42 +00:00
ljedrz
130a32fa72 Remove OneVector 2018-09-26 10:43:37 +02:00
bors
a2b27c19da Auto merge of #54497 - ralexstokes:stabilize_pattern_parentheses, r=nikomatsakis
Stabilize pattern_parentheses feature

Addresses #51087 .

Stabilizes the previously unstable feature `pattern_parentheses` which enables the use of `()` in match patterns.
2018-09-26 07:38:19 +00:00
bors
beff387601 Auto merge of #54548 - nrc:update, r=kennytm
Update rustfmt and RLS

r? @kennytm
2018-09-26 03:45:55 +00:00
bors
0b2eae72af Auto merge of #54164 - mikhail-m1:54131, r=pnkfelix
add "temporary value borrowed for too long" error

Issue #54131

r? @nikomatsakis
2018-09-26 01:16:22 +00:00
bors
92aff72a05 Auto merge of #54575 - pietroalbini:rollup, r=pietroalbini
Rollup of 12 pull requests

Successful merges:

 - #53518 (Add doc for impl From in char_convert)
 - #54058 (Introduce the partition_dedup/by/by_key methods for slices)
 - #54281 (Search box)
 - #54368 (Reduce code block sides padding)
 - #54498 (The project moved under the Mozilla umbrella)
 - #54518 (resolve: Do not block derive helper resolutions on single import resolutions)
 - #54522 (Fixed three small typos.)
 - #54529 (aarch64-pc-windows-msvc: Don't link libpanic_unwind to libtest.)
 - #54537 (Rename slice::exact_chunks() to slice::chunks_exact())
 - #54539 (Fix js error)
 - #54557 (incr.comp.: Don't automatically enable -Zshare-generics for incr. comp. builds.)
 - #54558 (Improvements to finding LLVM's FileCheck)

Failed merges:

r? @ghost
2018-09-25 22:52:16 +00:00
Nick Cameron
90701935b3 Update rustfmt and RLS 2018-09-26 09:46:06 +12:00
Pietro Albini
cc9dea43be
Rollup merge of #54558 - tromey:find-filecheck, r=nikomatsakis
Improvements to finding LLVM's FileCheck

This patch adds a few improvements to how the build system finds
LLVM's FileCheck program.

* On Fedora, the system LLVM installs FileCheck in the "llvm"
  subdirectory of the LLVM libdir.  This patch teaches the build
  system to look there.

* This adds a configure option to specify which llvm-config executable
  to use.  This is handy on systems that can parallel install multiple
  versions of LLVM; for example I can now:

    ./configure --llvm-config=/bin/llvm-config-5.0-64

  ... to build against LLVM 5, rather than whatever the default
  llvm-config might be.

* Finally, this adds a configure- and config.toml- option to set the
  path to FileCheck.  This is handy when building against an LLVM
  where FileCheck was not installed.  This happens on compatibility
  installs of LLVM on Fedora.
2018-09-25 22:34:51 +02:00
Pietro Albini
4ceeec09ef
Rollup merge of #54557 - michaelwoerister:dont-auto-share-generics-for-incr-comp, r=alexcrichton
incr.comp.: Don't automatically enable -Zshare-generics for incr. comp. builds.

So far the compiler would automatically enable sharing of monomorphizations for incremental builds. That was OK because without (Thin)LTO this could have very little impact on the runtime performance of the generated code. However, since https://github.com/rust-lang/rust/pull/53673, ThinLTO and incr. comp. can be combined, so the trade-off is not as clear anymore.

This PR removes the automatic tie between the two options. Whether monomorphizations are shared between crates or not now _only_ depends on the optimization level.

r? @alexcrichton
2018-09-25 22:34:50 +02:00
Pietro Albini
bd217b62f6
Rollup merge of #54539 - GuillaumeGomez:fix-js-error, r=QuietMisdreavus
Fix js error

r? @QuietMisdreavus
2018-09-25 22:34:48 +02:00
Pietro Albini
6a0f45b3f4
Rollup merge of #54537 - sdroege:chunks-exact, r=alexcrichton
Rename slice::exact_chunks() to slice::chunks_exact()

See https://github.com/rust-lang/rust/issues/47115#issuecomment-403090815
and https://github.com/rust-lang/rust/issues/47115#issuecomment-424053547
2018-09-25 22:34:47 +02:00
Pietro Albini
49e0049e9f
Rollup merge of #54529 - michaelwoerister:dont-unwind-test, r=alexcrichton
aarch64-pc-windows-msvc: Don't link libpanic_unwind to libtest.

This implements the suggestion from https://github.com/rust-lang/rust/issues/54190#issuecomment-422904437 in order to unbreak bootstrapping for the `aarch64-pc-windows-msvc` target. With this applied and using MSVC 15.8.3 for linking the bootstrap actually works and I can cross-compile a hello-world program.

r? @alexcrichton
2018-09-25 22:34:46 +02:00
Pietro Albini
9ea345d9d0
Rollup merge of #54522 - gardrek:patch-1, r=TimNN
Fixed three small typos.
2018-09-25 22:34:44 +02:00
Pietro Albini
cf3c385fef
Rollup merge of #54518 - petrochenkov:regr130, r=alexcrichton
resolve: Do not block derive helper resolutions on single import resolutions

Derive helpers currently conflict with anything else, so if some resolution from a single import appears later, it will result in error anyway.

Fixes https://github.com/rust-lang/rust/issues/54471 (stable-to-beta regression)

r? @ghost
2018-09-25 22:34:43 +02:00
Pietro Albini
4720126c16
Rollup merge of #54498 - sylvestre:patch-1, r=frewsxcv
The project moved under the Mozilla umbrella
2018-09-25 22:34:42 +02:00
Pietro Albini
d2f9e666bf
Rollup merge of #54368 - GuillaumeGomez:reduce-side-padding, r=QuietMisdreavus
Reduce code block sides padding

Fixes #42013.

<img width="1440" alt="screen shot 2018-09-19 at 22 58 32" src="https://user-images.githubusercontent.com/3050060/45781266-c6525680-bc5f-11e8-8eb0-98fc4c22a96e.png">

r? @QuietMisdreavus
2018-09-25 22:34:41 +02:00
Pietro Albini
888a0348fb
Rollup merge of #54281 - GuillaumeGomez:search-box, r=QuietMisdreavus
Search box

Follow up of #54244.

r? @QuietMisdreavus

<img width="1440" alt="screen shot 2018-09-16 at 21 23 05" src="https://user-images.githubusercontent.com/3050060/45600056-cbf93380-b9f6-11e8-904a-d76ddbc5ed69.png">
2018-09-25 22:34:39 +02:00
Pietro Albini
b940e1d961
Rollup merge of #54058 - Kerollmops:slice-dedup, r=shepmaster
Introduce the partition_dedup/by/by_key methods for slices

This PR propose to add three methods to the slice type, the `partition_dedup`, `partition_dedup_by` and `partition_dedup_by_key`. The two other methods are based on `slice::partition_dedup_by`.

These methods take a mutable slice, deduplicates it and moves all duplicates to the end of it, returning two mutable slices, the first containing the deduplicated elements and the second all the duplicates unordered.

```rust
let mut slice = [1, 2, 2, 3, 3, 2];

let (dedup, duplicates) = slice.partition_dedup();

assert_eq!(dedup, [1, 2, 3, 2]);
assert_eq!(duplicates, [3, 2]);
```

The benefits of adding these methods is that it is now possible to:
  - deduplicate a slice without having to allocate and possibly clone elements on the heap, really useful for embedded stuff that can't allocate for example.
  - not loose duplicate elements, because, when using `Vec::dedup`, duplicates elements are dropped. These methods add more flexibillity to the user.

Note that this is near a copy/paste of the `Vec::dedup_by` function, once this method is stable the goal is to replace the algorithm in `Vec` by the following.

```rust
pub fn Vec::dedup_by<F>(&mut self, same_bucket: F)
    where F: FnMut(&mut T, &mut T) -> bool
{
    let (dedup, _) = self.as_mut_slice().partition_dedup_by(same_bucket);
    let len = dedup.len();
    self.truncate(len);
}
```
2018-09-25 22:34:38 +02:00
Pietro Albini
707c9795ac
Rollup merge of #53518 - phungleson:fix-impl-from-for-convert, r=frewsxcv
Add doc for impl From in char_convert

As part of issue #51430 (cc @skade).

The impl is very simple, let me know if we need to go into any details.
2018-09-25 22:34:37 +02:00
bors
4141a4079e Auto merge of #53542 - alexreg:impl-trait-in-bindings, r=cramertj
`impl trait` in bindings (feature: impl-trait-existential-types)

This PR enables `impl Trait` syntax (opaque types) to be used in bindings, e.g.

* `let foo: impl Clone = 1;`
* `static foo: impl Clone = 2;`
* `const foo: impl Clone = 3;`

This is part of [RFC 2071](https://github.com/rust-lang/rfcs/blob/master/text/2071-impl-trait-existential-types.md) ([tracking issue](https://github.com/rust-lang/rust/issues/34511)), but exists behind the separate feature gate `impl_trait_in_bindings`.

CC @cramertj @oli-obk @eddyb @Centril @varkor
2018-09-25 20:02:14 +00:00
Vadim Petrochenkov
ee05f6eef4 resolve: Do not block derive helper resolutions on single import resolutions
Derive helpers conflict currently conflict with anything else, so if some resolution from a single import appears later, it will result in error anyway
2018-09-25 22:20:21 +03:00
Mikhail Modin
2af199d58e Update E0714 to E0716 in tests output 2018-09-25 16:24:20 +01:00
bors
31789a658b Auto merge of #54411 - cramertj:await-keyword-error, r=nikomatsakis
Make "await" a pseudo-edition keyword

This change makes "await" ident an error in 2018 edition without async_await
feature and adds "await" to the 2018 edition keyword lint group that
suggest migration on the 2015 edition.

cc https://github.com/rust-lang/rust/issues/53834

r? @nikomatsakis
2018-09-25 15:20:10 +00:00
Tom Tromey
f4b4939f3e Improvements to finding LLVM's FileCheck
This patch adds a few improvements to how the build system finds
LLVM's FileCheck program.

* On Fedora, the system LLVM installs FileCheck in the "llvm"
  subdirectory of the LLVM libdir.  This patch teaches the build
  system to look there.

* This adds a configure option to specify which llvm-config executable
  to use.  This is handy on systems that can parallel install multiple
  versions of LLVM; for example I can now:

    ./configure --llvm-config=/bin/llvm-config-5.0-64

  ... to build against LLVM 5, rather than whatever the default
  llvm-config might be.

* Finally, this adds a configure- and config.toml- option to set the
  path to FileCheck.  This is handy when building against an LLVM
  where FileCheck was not installed.  This happens on compatibility
  installs of LLVM on Fedora.
2018-09-25 09:13:02 -06:00
Michael Woerister
8fc7b5d12b incr.comp.: Don't automatically enable -Zshare-generics for incr.comp. builds. 2018-09-25 17:06:18 +02:00