Commit Graph

84100 Commits

Author SHA1 Message Date
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
Jorge Aparicio
234e7c4d2e docs: this llvm feature only supports the ELF object format 2018-09-26 15:25:57 +02:00
Jorge Aparicio
5e686b2104 unstable-book: recommend an INFO section
that makes the output .stack_sizes section non-allocatable when linking with
either GNU LD or LLD
2018-09-26 15:21:26 +02:00
Jorge Aparicio
7d2bb283ce use rustc -Vv in the run-make test 2018-09-26 15:21:26 +02:00
Jorge Aparicio
5362752a1e run test only if LLVM version is >= 6.0.0 2018-09-26 15:21:26 +02:00
Jorge Aparicio
f5bc678255 add run-make test 2018-09-26 15:21:26 +02:00
Jorge Aparicio
39afcd0673 document this feature in the unstable book 2018-09-26 15:21:26 +02:00
Jorge Aparicio
3c0907ce51 add -Z emit-stack-sizes 2018-09-26 15:21:26 +02:00
bors
e783d2be40 Auto merge of #54199 - nikomatsakis:predicate_may_hold-failure, r=eddyb
overlook overflows in rustdoc trait solving

Context:

The new rustdoc "auto trait" feature walks across impls and tries to run trait solving on them with a lot of unconstrained variables. This is prone to overflows. These overflows used to cause an ICE because of a caching bug (fixed in this PR). But even once that is fixed, it means that rustdoc causes an overflow rather than generating docs.

This PR therefore adds a new helper that propagates the overflow error out. This requires rustdoc to then decide what to do when it encounters such an overflow: technically, an overflow represents neither "yes" nor "no", but rather a failure to make a decision. I've decided to opt on the side of treating this as "yes, implemented", since rustdoc already takes an optimistic view. This may prove to include too many items, but I *suspect* not.

We could probably reduce the rate of overflows by unifying more of the parameters from the impl -- right now we only seem to consider the self type. Moreover, in the future, as we transition to Chalk, overflow errors are expected to just "go away" (in some cases, though, queries might return an ambiguous result).

Fixes #52873

cc @QuietMisdreavus -- this is the stuff we were talking about earlier
cc @GuillaumeGomez -- this supersedes #53687
2018-09-26 12:39:20 +00:00
Felix S. Klock II
8d86800500 Add #[allow(unused_mut)] for various cases that arise only in compare-mode=nll. 2018-09-26 13:10:54 +02:00
Felix S. Klock II
c9d9cc6e44 Add #![allow(..)] as necessary to get re-migrated run-pass tests compiling with clean stderr again.
Most were added mechanically.
2018-09-26 13:10:54 +02:00
Felix S. Klock II
2080474c75 Migrate src/test/ui/run-pass/* back to src/test/run-pass/.
Fix #54047
2018-09-26 13:10:54 +02: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
Levente Kurusa
ecd51ed90b
fixup! codegen_llvm: check inline assembly constraints with LLVM 2018-09-26 10:19:09 +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
Levente Kurusa
687fdf5663
fixup! codegen_llvm: check inline assembly constraints with LLVM 2018-09-26 08:44:19 +02:00
Levente Kurusa
70bf90384c
fixup! codegen_llvm: check inline assembly constraints with LLVM 2018-09-26 06:43:19 +02: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
Vadim Petrochenkov
2b3e16bfaa Accept trailing comma in cfg_attr 2018-09-26 03:07:59 +03: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