806 Commits

Author SHA1 Message Date
Ralf Jung
aafcf2c942 Emit Retag statements, kill Validate statements
Also "rename" -Zmir-emit-validate to -Zmir-emit-retag, which is just a boolean (yes or no).
2018-10-29 09:05:18 +01:00
Niko Matsakis
a1be20c9ce error_reporting/mod.rs: rustfmt 2018-10-27 09:06:03 -04:00
Niko Matsakis
784746f57e convert placeholder region vids in NLL mode as we see them 2018-10-27 08:41:12 -04:00
Niko Matsakis
018c515f07 move PlaceholderIndices into MirTypeckRegionConstraints struct 2018-10-27 08:41:12 -04:00
David Wood
6208bd8e03
Refactor and add PlaceContext::AscribeUserTy.
This commit refactors `PlaceContext` to split it into four different
smaller enums based on if the context represents a mutating use,
non-mutating use, maybe-mutating use or a non-use (this is based on the
recommendation from @oli-obk on Zulip[1]).

This commit then introduces a `PlaceContext::AscribeUserTy` variant.
`StatementKind::AscribeUserTy` is now correctly mapped to
`PlaceContext::AscribeUserTy` instead of `PlaceContext::Validate`.
`PlaceContext::AscribeUserTy` can also now be correctly categorized as a
non-use which fixes an issue with constant promotion in statics after a
cast introduces a `AscribeUserTy` statement.

[1]: https://rust-lang.zulipchat.com/#narrow/stream/122657-wg-nll/subject/.2355288.20cast.20fails.20to.20promote.20to.20'static/near/136536949
2018-10-27 12:11:37 +02:00
Felix S. Klock II
639a3ffadc add user_ty.projs support to AscribeUserType. 2018-10-26 23:47:53 +02:00
Felix S. Klock II
740e8a3f37 Add the actual chain of projections to UserTypeProjection.
Update the existing NLL `patterns.rs` test accordingly.

includes changes addressing review feedback:

 * Added example to docs for `UserTypeProjections` illustrating how we
   build up multiple projections when descending into a pattern with
   type ascriptions.

 * Adapted niko's suggested docs for `UserTypeProjection`.

 * Factored out `projection_ty` from more general `projection_ty_core`
   (as a drive-by, made its callback an `FnMut`, as I discovered later
   that I need that).

 * Add note to docs that `PlaceTy.field_ty(..)` does not normalize its result.

 * Normalize as we project out `field_ty`.
2018-10-26 23:47:52 +02:00
Felix S. Klock II
b569caf267 Checkpoint: Added abstraction over collection of projections into user type.
I did not think I would need this in the MIR, but in general local
decls are going to need to support this. (That, or we need to be able
define a least-upper-bound for a collection of types encountered via
the pattern compilation.)
2018-10-26 23:46:21 +02:00
Felix S. Klock II
28ce99df86 Added mir::UserTypeProjection, a stub for a structure that projects *into* a given UserTypeAnnotation.
(That is, it will pull out some component type held or referenced by
the type annotation.)

Note: this still needs to actually do projection itself. That comes in
a later commit
2018-10-26 23:44:52 +02:00
kennytm
9c55a4a813
Rollup merge of #55346 - nnethercote:shrink-StatementKind, r=nagisa
Shrink `Statement`.

This commit reduces the size of `Statement` from 80 bytes to 56 bytes on
64-bit platforms, by boxing the `AscribeUserType` variant of
`StatementKind`.

This change reduces instruction counts on most benchmarks by 1--3%.
2018-10-26 23:06:44 +08:00
Nicholas Nethercote
38d9277a77 Shrink Statement.
This commit reduces the size of `Statement` from 80 bytes to 56 bytes on
64-bit platforms, by boxing the `AscribeUserType` variant of
`StatementKind`.

This change reduces instruction counts on most benchmarks by 1--3%.
2018-10-26 08:25:47 +11:00
Niko Matsakis
62f0fc5112 port the relate-types code from NLL type-check into a type-op
Add regression tests for #55219 and #55241

Also another test where a duplicate-like error appears to have been
suppressed; I'm not 100% sure why this output changes, though I could
imagine that some duplicate suppression is enabled by this PR.
2018-10-24 15:12:50 -04:00
Niko Matsakis
7c8887ccbf introduce (but do not use) ascribe_user_type goal
Lots of annoying boilerplate.
2018-10-24 15:12:40 -04:00
Niko Matsakis
4394c83cb7 type_check/mod.rs: rustfmt 2018-10-23 10:57:06 -04:00
Niko Matsakis
1371cd27d0 check the self type is well-formed
This fixes `issue-28848.rs` -- it also handles another case that the
AST region checker gets wrong (`wf-self-type.rs`).  I don't actually
think that this is the *right way* to be enforcing this constraint --
I think we should probably do it more generally, perhaps by editing
`predicates_of` for the impl itself. The chalk-style implied bounds
setup ought to fix this.
2018-10-23 10:32:46 -04:00
Niko Matsakis
64b5599352 stop reporting "unsatisfied lifetime bounds" errors after the first
In particular, after the first for a given region variable. This
suppresses a lot of duplicate errors.
2018-10-22 11:41:46 -04:00
Niko Matsakis
3a17880539 start enforcing closure types 2018-10-22 10:04:47 -04:00
Matthew Jasper
2a3969a3f7 Use new region infer errors for explaining borrows
This gives at least some explanation for why a borrow is expected to
last for a certain free region. Also:

* Reports E0373: "closure may outlive the current function" with NLL.
* Special cases the case of returning a reference to (or value
  referencing) a local variable or temporary (E0515).
* Special case assigning a reference to a local variable in a closure
  to a captured variable.
2018-10-21 12:35:00 +01:00
Matthew Jasper
275432c115 Give an error number for "borrowed data escapes outside of closure" 2018-10-20 23:11:30 +01:00
Matthew Jasper
049bee09e9 Use more accurate ConstraintCategorys
Adds UseAsConst and UseAsStatic to replace Return in consts/statics.
Don't report the arguments to an overloaded operator as CallArguments.
Also don't report "escaping data" in these items.
2018-10-20 23:11:30 +01:00
Matthew Jasper
a2c24873b1 Prefer type annotations and returns in free region errors 2018-10-20 23:11:30 +01:00
bors
ca2639e82e Auto merge of #55014 - ljedrz:lazyboye_unwraps, r=matthewjasper
Prefer unwrap_or_else to unwrap_or in case of function calls/allocations

The contents of `unwrap_or` are evaluated eagerly, so it's not a good pick in case of function calls and allocations. This PR also changes a few `unwrap_or`s with `unwrap_or_default`.

An added bonus is that in some cases this change also reveals if the object it's called on is an `Option` or a `Result` (based on whether the closure takes an argument).
2018-10-20 11:22:48 +00:00
bors
94273f4d8e Auto merge of #55114 - oli-obk:fx#map, r=nikomatsakis
Deprecate the `FxHashMap()` and `FxHashSet()` constructor function hack
2018-10-20 08:45:55 +00:00
bors
42dde960f9 Auto merge of #55162 - nikomatsakis:issue-54902-underscore-bound, r=tmandry
handle underscore bounds in unexpected places

Per the discussion on #54902, I made it a hard error to use lifetime bounds in various places where they used to be permitted:

- `where Foo: Bar<'_>` for example

I also moved error reporting to HIR lowering and added `Error` variants to let us suppress downstream errors that result.

I (imo) improved the error message wording to be clearer, as well.

In the process, I fixed the ICE in #52098.

Fixes #54902
Fixes #52098
2018-10-19 22:54:14 +00:00
Niko Matsakis
9a7bb0ef24 normalize the self-type that we extract from impl 2018-10-19 09:34:28 -04:00
Niko Matsakis
820c2657f2 add useful debug log 2018-10-19 09:34:28 -04:00
Niko Matsakis
061c9a2bed region_infer/mod.rs: rustfmt 2018-10-19 09:34:28 -04:00
Niko Matsakis
e20fa70bb3 suppress duplicate -- or near duplicate -- type test errors 2018-10-19 09:34:28 -04:00
Niko Matsakis
bfb1d959c3 normalize and prove predicates
Also include a test that was not working previously.
2018-10-19 09:34:27 -04:00
Niko Matsakis
121f3c8d19 normalize after substitution 2018-10-19 09:32:32 -04:00
Niko Matsakis
f99300fcbd pull relate_type_and_user_type code into type_check module
It's really layered atop the core "relate-types" code
2018-10-19 09:32:30 -04:00
Oliver Scherer
3c9258e604 Prefer Default::default over FxHash*::default in struct constructors 2018-10-19 14:34:44 +02:00
Oliver Scherer
ee81739dc1 Deprecate the FxHashMap() and FxHashSet() constructor function hack 2018-10-19 14:34:44 +02:00
Niko Matsakis
e7ab33e7a6 type_check/mod.rs: rustfmt 2018-10-19 08:31:35 -04:00
Niko Matsakis
a0a3b4c058 replace UserTypeAnnotation::AdtDef with TypeOf 2018-10-19 08:31:35 -04:00
Niko Matsakis
ebdfda64f8 convert FnDef to TypeOf, which is more general 2018-10-19 08:31:35 -04:00
ljedrz
d28aed6dc4 Prefer unwrap_or_else to unwrap_or in case of function calls/allocations 2018-10-19 09:45:45 +02:00
Matthew Jasper
ef1a40d5fe Propagate bounds from generators 2018-10-18 22:47:49 +01:00
Niko Matsakis
1f4d100472 move E0637 to lowering and improve output, add more tests 2018-10-17 17:15:24 -04:00
ljedrz
ffecbc5e10 nll: improve common patterns 2018-10-17 22:57:38 +02:00
ljedrz
2bda0c196f nll: improve format operations 2018-10-17 22:57:38 +02:00
ljedrz
e62ce98009 nll: improve allocations 2018-10-17 22:57:37 +02:00
Levente Kurusa
4d7f08b170
rustc: improve E0669 span
E0669 refers to a constraint that cannot be coerced into a single LLVM
value, unfortunately right now this uses the Span for the entire inline
assembly statement, which is less than ideal.

This commit preserves the Span from HIR, which lets us emit the error
using the Span for the operand itself in MIR.

Signed-off-by: Levente Kurusa <lkurusa@acm.org>
2018-10-17 07:40:44 +02:00
Niko Matsakis
ba20806e46 avoid type variables in the self-type 2018-10-15 16:25:08 -04:00
Niko Matsakis
547182ea94 handle user-self-type for def-ids 2018-10-15 16:25:08 -04:00
Niko Matsakis
0e1d3624e9 pull the common code across user-ty variants up top 2018-10-15 16:25:08 -04:00
Niko Matsakis
1443ac0aa7 introduce a more expressive UserSubsts 2018-10-15 16:25:08 -04:00
Niko Matsakis
2a7fc227a6 introduce FnDef and AdtDef to UserTypeAnnotation 2018-10-15 16:24:46 -04:00
Niko Matsakis
aed6e4a083 introduce a UserTypeAnnotation enum 2018-10-15 16:24:46 -04:00
Niko Matsakis
e7ed997d87 extract type_relate into the inference context as nll_relate
The name is not great. Nor is the existence of this code great.  It
should be merged with the main "type relating code" at some point.
2018-10-15 16:24:46 -04:00