105 Commits

Author SHA1 Message Date
Eduard Burtescu
08bf9f69b9 typeck: leak auto trait obligations through impl Trait. 2016-08-12 06:46:31 +03:00
Eduard Burtescu
ef11d4e3c7 rustc: add TyAnon (impl Trait) to the typesystem. 2016-08-12 06:43:34 +03:00
Eduard Burtescu
c976e073fd rustc: don't reveal specializable polymorphic projections. 2016-08-12 06:43:34 +03:00
Eduard Burtescu
d1d16c94c5 rustc: rename ProjectionMode and its variant to be more memorable. 2016-08-12 06:43:34 +03:00
Jonathan Turner
cdedad530f Rollup merge of #35576 - circuitfox:E0072-update-error-format, r=jonathandturner
E0072 update error format

Part of  #35233

Fixes #35506

r? @jonathandturner

The bonus for this issue currently seems to be impossible to do reliably, as the compiler seems to lack span information for item names alone, like `Foo` in `struct Foo { ... }`. It would be possible to hack something together by computing span offsets, but that seems like a solution that would be begging for trouble.

A proper solution to this would, of course, be to add span information to the right place (seems to be `rustc::hir::Item::name` but I may be wrong).
2016-08-11 06:34:02 -07:00
Chris Stankus
c5f9febc48 E0072 update error format 2016-08-10 13:37:59 -05:00
Panashe M. Fundira
20ea8cba53
Update E0038 to the new error format 2016-08-09 13:59:00 -04:00
Jonathan Turner
94cb842887 Rollup merge of #35366 - medzin:E0282, r=jonathandturner
Updated error message E0282

Fixes #35312 as part of #35233.

r? @GuillaumeGomez
2016-08-07 09:59:41 -07:00
Adam Medziński
19e45799a5 Updated error message E0282 2016-08-06 21:35:02 +02:00
Jeffrey Seyfried
6372a6d7c2 Improve diagnostics for pattern bindings that illegally shadow items.
Improve unused import detection.
2016-08-01 19:09:58 +00:00
Ariel Ben-Yehuda
93a96835b0 use diagnostic-mutating style for note_type_err too
that is much cleaner than the `type_err!` style I used earlier.
2016-07-22 22:47:38 +03:00
Ariel Ben-Yehuda
f3ee99bd4d try to recover the non-matching types in projection errors
The type equation in projection takes place under a binder and a snapshot, which
we can't easily take types out of. Instead, when encountering a projection error,
try to re-do the projection and find the type error then.

This fails to produce a sane type error when the failure was a "leak_check" failure.
I can't think of a sane way to show *these*, so I just left them use the old crappy
representation, and added a test to make sure we don't break them.
2016-07-22 14:32:56 +03:00
Ariel Ben-Yehuda
fa4eda8935 switch projection errors to use the new type error messages
Unfortunately, projection errors do not come with a nice set of
mismatched types. This is because the type equality check occurs
within a higher-ranked context. Therefore, only the type error
is reported. This is ugly but was always the situation.

I will introduce better errors for the lower-ranked case in
another commit.

Fixes the last known occurence of #31173
2016-07-22 14:32:56 +03:00
bors
e85adffd64 Auto merge of #34443 - eddyb:sized-matters, r=arielb1
Disallow constants and statics from having unsized types.

This is a `[breaking-change]` which fixes #34390 by banning unsized `const` and `static`, e.g.:
```rust
const A: [i32] = *(&[0, 1, 2] as &[i32]);
static B: str = *"foo";
```

This was not intentionally allowed, and other than for `static` since some versions ago, it ICE'd.
If you've been taking advantage of this with `static`, you should be able to just use references instead.
2016-07-02 09:36:52 -07:00
bors
ea0dc92972 Auto merge of #34424 - jseyfried:breaking_batch, r=Manishearth
Batch up libsyntax breaking changes

Batch of the following syntax-[breaking-change] changes:
 - #34213: Add a variant `Macro` to `TraitItemKind`
 - #34368: Merge the variant `QPath` of `PatKind` into the variant `PatKind::Path`
 - #34385: Move `syntax::ast::TokenTree` into a new module `syntax::tokenstream`
 - #33943:
  - Remove the type parameter from `visit::Visitor`
  - Remove `attr::WithAttrs` -- use `attr::HasAttrs` instead.
  - Change `fold_tt`/`fold_tts` to take token trees by value and avoid wrapping token trees in `Rc`.
  - Remove the field `ctxt` of `ast::Mac_`
  - Remove inherent method `attrs()` of types -- use the method `attrs` of `HasAttrs` instead.
 - #34316:
  - Remove `ast::Decl`/`ast::DeclKind` and add variants `Local` and `Item` to `StmtKind`.
  - Move the node id for statements from the `StmtKind` variants to a field of `Stmt` (making `Stmt` a struct instead of an alias for `Spanned<StmtKind>`)
  - Rename `ast::ExprKind::Again` to `Continue`.
 - #34339: Generalize and abstract `ThinAttributes` to `ThinVec<Attribute>`
  - Use `.into()` in convert between `Vec<Attribute>` and `ThinVec<Attribute>`
  - Use autoderef instead of `.as_attr_slice()`
 - #34436: Remove the optional expression from `ast::Block` and instead use a `StmtKind::Expr` at the end of the statement list.
 - #34403: Move errors into a separate crate (unlikely to cause breakage)
2016-06-27 16:42:03 -07:00
Eduard Burtescu
fe7207f6af Disallow constants and statics from having unsized types. 2016-06-26 18:28:17 +03:00
Jonathan Turner
6ae3502134 Move errors from libsyntax to its own crate 2016-06-23 08:07:35 -04:00
Eduard Burtescu
096ae80b33 Don't translate vtable methods with Self: Sized bounds. 2016-06-23 03:30:01 +03:00
Niko Matsakis
480d18ca31 kill some unused imports 2016-05-31 21:05:43 -04:00
Niko Matsakis
ad97f296d3 add FIXME to fulfill 2016-05-31 19:59:33 -04:00
Niko Matsakis
38995c9029 consult cache in projection 2016-05-31 19:59:33 -04:00
Niko Matsakis
6751d68f25 cleanup imports for cache 2016-05-31 19:59:03 -04:00
Niko Matsakis
5368432538 thread vtable-closure obligations to result
the vtable.nested obligations were being dropped on the floor.
2016-05-31 19:58:44 -04:00
Niko Matsakis
24d4f10ab2 change to use higher_ranked_match
also, consolidate the return type into from a tuple into a struct
`Progress`
2016-05-31 19:58:44 -04:00
Niko Matsakis
21eb36608e create but do not use a projection cache 2016-05-31 19:44:43 -04:00
Niko Matsakis
d3afbd6c4d more debug dumping in traits 2016-05-31 19:43:38 -04:00
Niko Matsakis
11984340bf make HR algorithms account for region subtyping
Currently, we consider region subtyping a failure
if a skolemized lifetime is relatable to any
other lifetime in any way at all. But a more precise
formulation is to say that a skolemized lifetime:

- must not have any *incoming* edges in the region graph
- only has *outgoing* edges to nodes that are `'static`

To enforce the latter requirement, we add edges from `'static -> 'x` for
each lifetime '`x' reachable from a skolemized region.

We now have to add a new `pop_skolemized` routine to do cleanup.
Whereas before if there were *any* edges relating to a skolemized
region, we would return `Err` and hence rollback the transaction, we now
tolerate some edges and return `Ok`. Therefore, the `pop_skolemized`
routine runs and cleans up those edges.
2016-05-31 19:41:25 -04:00
Manish Goregaokar
edd7d422b7 Rollup merge of #33852 - arielb1:autoderef-iterator, r=eddyb
refactor autoderef to avoid prematurely registering obligations

Refactor `FnCtxt::autoderef` to use an external iterator and to not
register any obligation from the main autoderef loop, but rather to
register them after (and if) the loop successfully completes.

Fixes #24819
Fixes #25801
Fixes #27631
Fixes #31258
Fixes #31964
Fixes #32320
Fixes #33515
Fixes #33755

r? @eddyb
2016-05-28 19:52:16 +05:30
Ariel Ben-Yehuda
040fc94b4e catch attempts to leak obligations out of snapshots 2016-05-25 21:12:35 +03:00
Ariel Ben-Yehuda
c209d44c34 refactor autoderef to avoid registering obligations
Refactor `FnCtxt::autoderef` to use an external iterator and to not
register any obligation from the main autoderef loop, but rather to
register them after (and if) the loop successfully completes.

Fixes #24819
Fixes #25801
Fixes #27631
Fixes #31258
Fixes #31964
Fixes #32320
Fixes #33515
Fixes #33755
2016-05-25 00:03:33 +03:00
Masood Malekghassemi
808e4315e8 Propagate obligations through projection 2016-05-22 23:35:38 -07:00
bors
d0ca0ca063 Auto merge of #33694 - arielb1:fuzzy-on-unimplemented, r=nikomatsakis
implement fuzzy matching in on_unimplemented

Fixes #31062

r? @nikomatsakis
2016-05-19 01:50:53 -07:00
Ariel Ben-Yehuda
b344c7171e implement fuzzy matching in on_unimplemented 2016-05-18 19:13:09 +03:00
Manish Goregaokar
07194a0350 Rollup merge of #33695 - nikomatsakis:spezializes-cache, r=aturon
introduce a specializes cache

This query is frequently used during trait selection and caching the
result can be a reasonable performance win.

The one case I examined thus far was the mrusty package (v0.5.1), where I saw an improvement in "typeck item bodies" from ~8.3s to ~1.9s.

r? @aturon
2016-05-18 14:07:46 +05:30
bors
75e23e1b03 Auto merge of #33137 - nikomatsakis:issue-32330-lbr-in-return-type-warning-2, r=aturon
Warnings for issue #32330

This is an extension of the previous PR that issues warnings in more situations than before. It does not handle *all* cases of #32330 but I believe it issues warnings for all cases I've seen in practice.

Before merging I'd like to address:

- open a good issue explaining the problem and how to fix it (I have a [draft writeup][])
- work on the error message, which I think is not as clear as it could/should be (suggestions welcome)

r? @aturon

[draft writeup]: https://gist.github.com/nikomatsakis/631ec8b4af9a18b5d062d9d9b7d3d967
2016-05-17 18:10:53 -07:00
Niko Matsakis
639890d92d fix stale method names 2016-05-17 20:25:18 -04:00
Niko Matsakis
df5c62bed2 refactor: use select inside of a probe
We ought not to be affecting inference state when assembling candidates,
so invoke select inside of a probe.
2016-05-17 16:27:23 -04:00
Niko Matsakis
29dad1a280 introduce a specializes cache
This query is frequently used during trait selection and caching the
result can be a reasonable performance win.
2016-05-17 15:52:03 -04:00
bors
786b26d7b4 Auto merge of #33491 - arielb1:obligation-jungle, r=nikomatsakis
Replace the obligation forest with a graph

In the presence of caching, arbitrary nodes in the obligation forest can be merged, which makes it a general graph. Handle it as such, using cycle-detection algorithms in the processing.

I should do performance measurements sometime.

This was pretty much written as a proof-of-concept. Please help me write this in a less-ugly way. I should also add comments explaining what is going on.

r? @nikomatsakis
2016-05-16 18:39:59 -07:00
Ariel Ben-Yehuda
65ad935737 change on_unimplented logic 2016-05-16 23:16:52 +03:00
Manish Goregaokar
61d87f0825 Rollup merge of #33576 - soltanmm:vtable, r=nikomatsakis
Plumb inference obligations through selection, take 2

Using a `SnapshotVec` and dumping inferred obligations into `Vtable` variants.

r? @nikomatsakis
2016-05-14 11:57:49 +02:00
Manish Goregaokar
8bc265bdd1 Rollup merge of #33555 - soltanmm:ambiguous-nixon, r=nikomatsakis
Remove unification despite ambiguity in projection

Turns out that closures aren't explicitly considered in `project.rs`, so the ambiguity handling w.r.t. closures can just be removed as the change done in `select.rs` covers it.

r? @nikomatsakis
2016-05-14 11:57:48 +02:00
Ariel Ben-Yehuda
5458d8b419 rewrite fuzzy on_unimplemented matching to avoid ICEs 2016-05-13 23:01:57 -07:00
Ariel Ben-Yehuda
f0f5ef51bf address review comments 2016-05-13 21:23:02 -07:00
Ariel Ben-Yehuda
5c39a2ae44 add cycle-reporting logic
Fixes #33344
2016-05-13 21:23:02 -07:00
Ariel Ben-Yehuda
957500b793 rewrite obligation forest. cycles still handled incorrectly. 2016-05-13 21:23:02 -07:00
Masood Malekghassemi
f52b655621 Plumb inference obligations through selection 2016-05-11 17:29:23 -07:00
Masood Malekghassemi
ec7c483d67 Don't mutate the inference context when assembling 2016-05-11 14:56:52 -07:00
Masood Malekghassemi
8628ccec8f Add inferred obligation storage to all Vtable variants and SelectionContext 2016-05-11 14:40:24 -07:00
Masood Malekghassemi
4e5a2e01cf Remove unification despite ambiguity in projection 2016-05-11 11:47:09 -07:00