Commit Graph

455 Commits

Author SHA1 Message Date
Mark Rousskov
57aceeecc0
Rollup merge of #51636 - oli-obk:const_diagnostics, r=eddyb
Refactor error reporting of constants

cc @eddyb

This PR should not change any behaviour. It solely simplifies the internal handling of the errors
2018-06-28 16:07:10 -06:00
varkor
4071adfcb5 Always check type_dependent_defs 2018-06-28 22:52:44 +01:00
Oliver Schneider
4bb9648b27 Merge ConstVal and ConstValue 2018-06-28 11:04:25 +02:00
Oliver Schneider
05994779ea Move everything over from middle::const_val to mir::interpret 2018-06-28 11:02:31 +02:00
Vadim Petrochenkov
d7072b5bb4 Fix rebase 2018-06-28 11:04:51 +03:00
Vadim Petrochenkov
f0622dfe5d Use Idents for associated item definitions in HIR
Remove emulation of hygiene with gensyms
2018-06-28 11:04:50 +03:00
Vadim Petrochenkov
c6ca1e4abd Use Idents in a number of structures in HIR
Namely: labels, type parameters, bindings in patterns, parameter names in functions without body.
All of these do not need hygiene after lowering to HIR, only span locations.
2018-06-28 11:04:50 +03:00
Matthew Jasper
0193d1f736 Group move errors before reporting, add suggestions 2018-06-27 22:46:58 +01:00
Zack M. Davis
057715557b migrate codebase to ..= inclusive range patterns
These were stabilized in March 2018's #47813, and are the Preferred Way
to Do It going forward (q.v. #51043).
2018-06-26 07:53:30 -07:00
bors
764232cb2a Auto merge of #51805 - pietroalbini:rollup, r=pietroalbini
Rollup of 11 pull requests

Successful merges:

 - #51104 (add `dyn ` to display of dynamic (trait) types)
 - #51153 (Link panic and compile_error docs)
 - #51642 (Fix unknown windows build)
 - #51730 (New safe associated functions for PinMut)
 - #51731 (Fix ICEs when using continue as an array length inside closures (inside loop conditions))
 - #51747 (Add error for using null characters in #[export_name])
 - #51769 (Update broken rustc-guide links)
 - #51786 (Remove unnecessary stat64 pointer casts)
 - #51788 (Fix typo)
 - #51789 (Don't ICE when performing `lower_pattern_unadjusted` on a `TyError`)
 - #51791 (Minify css)

Failed merges:

r? @ghost
2018-06-26 11:20:18 +00:00
bors
309fd8a6fb Auto merge of #49469 - Nokel81:allow-irrefutable-let-patterns, r=nikomatsakis
Implementation of RFC 2086 - Allow Irrefutable Let patterns

This is the set of changes for RFC2086. Tracking issue #44495. Rendered [here](https://github.com/rust-lang/rfcs/pull/2086)
2018-06-26 09:20:33 +00:00
Esteban Küber
7aab3bf863 Don't ICE when performing lower_pattern_unadjusted on a TyError 2018-06-25 13:49:34 -07:00
bors
8acec1f9d0 Auto merge of #51750 - zackmdavis:superstructure, r=oli-obk
three diagnostics upgrades

 * reword `...` expression syntax error to not imply that you should use it in patterns either (#51043) and make it a structured suggestion
 * shorten the top-line message for the trivial-casts lint by tucking the advisory sentence into a help note
 * structured suggestion for pattern-named-the-same-as-variant warning

r? @oli-obk
2018-06-25 13:43:22 +00:00
bors
ecfe37056f Auto merge of #51733 - varkor:ice-match-slice, r=oli-obk
Fix an ICE when matching over const slices

Fixes #51655. I'm not super familiar with this code, so tell me if this is the wrong approach 😅

r? @oli-obk
2018-06-25 11:36:13 +00:00
Zack M. Davis
4650361fb6 use structured suggestion for pattern-named-the-same-as-variant warning 2018-06-23 22:57:37 -07:00
bors
4fe88c05cd Auto merge of #51727 - varkor:expragain-to-exprcontinue, r=petrochenkov
Rename hir::ExprAgain to hir::ExprContinue

The current name is confusing and historical.

I also used this PR to clean up the annoying indentation in `check/mod.rs`. If that's viewed as too tangential a change, I'll split it up, but it seemed reasonable to slip it in to reduce @bors's work. It's easy to compare for the two commits individually.

r? @petrochenkov
2018-06-23 14:33:10 +00:00
varkor
e14e48bfaa Fix an ICE when matching over const slices 2018-06-23 14:41:01 +01:00
varkor
7ba2952af6 Rename ExprAgain to ExprContinue 2018-06-23 10:51:01 +01:00
bors
2ea922a96d Auto merge of #51696 - estebank:fuzzy-ice-ice, r=oli-obk
Accept `TyError` in patterns to avoid ICE on bad input

Fix #50585.
2018-06-23 06:56:12 +00:00
Esteban Küber
fe5710a25e Accept TyError in patterns to avoid ICE on bad input 2018-06-21 18:18:39 -07:00
varkor
76c0d68745 Rename "parameter" to "arg" 2018-06-20 12:19:04 +01:00
Niko Matsakis
92d4ae2be2 rename irrefutable_let_pattern to irrefutable_let_patterns 2018-06-08 11:37:35 -04:00
Oliver Schneider
5c0d1355f2 Refactor the const eval diagnostic API 2018-06-05 20:49:46 +02:00
Sebastian Malton
4fe40635ef Implementation of RFC 2086 - Allow Irrefutable Let patterns 2018-06-05 10:19:21 -04:00
Felix S. Klock II
47bb3fd505 Debug flag to bypass restriction of mutation in match guards.
Now, if you pass `-Z disable-ast-check-for-mutation-in-guard`, then we
will just allow you to mutably-borrow and assign in guards of `match`
arms.

This is wildly unsound with AST-borrowck. It is also unsound with
MIR-borrowck without further adjustments, which come in later in the
commit series on this Pull Request.

See also rust-lang/rust#24535 and rust-lang/rfcs#1006.
2018-05-29 23:01:36 +02:00
Zack M. Davis
1329605a3d operate on HirId in hir::Pat::each_binding, and consequences of that
Changing the `each_binding` utility method to take the `HirId` of a
binding pattern rather than its `NodeId` seems like a modest first step
in support of the `HirId`ification initiative #50928. (The inspiration
for choosing this in particular came from the present author's previous
work on diagnostics issued during liveness analysis, which is the most
greatly affected module in this change.)
2018-05-28 09:20:14 -07:00
Vadim Petrochenkov
189c0a1297 Use Idents for fields in HIR 2018-05-26 14:41:58 +03:00
Oliver Schneider
85de4efdd8 Rename amt variables to shift 2018-05-24 20:49:38 +02:00
Oliver Schneider
80a1488601 Prefer to_value_with_len over manual expanison of it 2018-05-24 20:49:38 +02:00
Oliver Schneider
bdd23bf215 tcx.lift_to_global > tcx.global_tcx().lift 2018-05-24 20:49:38 +02:00
Oliver Schneider
569ae80a0a Wrongly named a closure clamp when it was doing truncation 2018-05-24 20:49:38 +02:00
Oliver Schneider
cfd5fb5102 Reuse to_bits instead of badly reinventing it 2018-05-24 20:49:38 +02:00
Oliver Schneider
50628b7373 Only defined bits are relevant 2018-05-24 20:49:38 +02:00
Oliver Schneider
c6d25dc224 Don't ICE on horrible transmutes in pattern constants 2018-05-24 20:49:38 +02:00
Oliver Schneider
1a2964a541 Simplify a ScalarPair creation 2018-05-24 20:49:38 +02:00
Oliver Schneider
cc60a22b10 Get rid of scalar_size 2018-05-24 20:49:37 +02:00
Oliver Schneider
ea8f544964 Rebase fallout 2018-05-24 20:49:37 +02:00
Oliver Schneider
64a75ecc80 change Value::Bytes to Value::Bits 2018-05-24 20:49:37 +02:00
Oliver Schneider
3bbf2fd715 Remove Pointer::zero in favor of Pointer::from 2018-05-24 20:48:54 +02:00
Oliver Schneider
d7324631ae Rename MemoryPointer to Pointer 2018-05-24 20:48:54 +02:00
Oliver Schneider
03a92b61ec Eliminate the Pointer wrapper type 2018-05-24 20:48:13 +02:00
Oliver Schneider
ef2177cffc Rename ByVal(Pair) to Scalar(Pair) 2018-05-24 20:47:35 +02:00
Oliver Schneider
1606e137e7 Rename PrimVal to Scalar 2018-05-24 20:47:35 +02:00
Oliver Schneider
9cc5d927c9 Add constant for Size::from_bytes(0) 2018-05-24 20:46:07 +02: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
aace842a08 Get rid of literal_alloc_cache 2018-05-22 04:15:28 +02:00
Eduard-Mihai Burtescu
e3df729c25 rustc: make mk_substs_trait take &[Kind] instead of &[Ty]. 2018-05-21 12:13:17 +03: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
Eduard-Mihai Burtescu
26aad25487 rustc: introduce {ast,hir}::AnonConst to consolidate so-called "embedded constants". 2018-05-19 20:34:42 +03:00
Oliver Schneider
7c25aa79c5 Use Size instead of u64 in mir interpretation 2018-05-19 16:38:49 +02:00
Irina Popa
b63d7e2b1c Rename trans to codegen everywhere. 2018-05-17 15:08:30 +03:00
est31
11f5893610 label-break-value: Parsing and AST/HIR changes 2018-05-16 13:56:24 +02:00
est31
235e7c1b43 Remove LoopIdResult
It's redundant as Result already implements Encodable
as well as Decodable.
2018-05-15 15:47:32 +02:00
est31
3ef481a520 Remove hir::ScopeTarget
When we want to implement label-break-value,
we can't really decide whether to emit ScopeTarget::Loop or
ScopeTarget::Block in the code that is supposed to create it.
So we get rid of it and reconstruct the information when
needed.
2018-05-15 15:47:31 +02:00
John Kåre Alsaker
fdd9787777 Introduce ConstValue and use it instead of miri's Value for constant values 2018-05-11 13:01:44 +02:00
John Kåre Alsaker
c9d9c249ec Insert fields from TypeAndMut into TyRef to allow layout optimization 2018-05-08 16:21:58 +02:00
John Kåre Alsaker
710b4ad2a5 Store the GeneratorInterior in the new GeneratorSubsts 2018-05-08 16:21:58 +02:00
John Kåre Alsaker
0edc8f4270 Store generator movability outside GeneratorInterior 2018-05-08 16:21:58 +02:00
bors
e471c206cf Auto merge of #50418 - nnethercote:cmt, r=eddyb
Avoid many `cmt` allocations.

`cmt` is a ref-counted wrapper around `cmt_` The use of refcounting
keeps `cmt` handling simple, but a lot of `cmt` instances are very
short-lived, and heap-allocating the short-lived ones takes up time.

This patch changes things in the following ways.

- Most of the functions that produced `cmt` instances now produce `cmt_`
  instances. The `Rc::new` calls that occurred within those functions
  now occur at their call sites (but only when necessary, which isn't
  that often).

- Many of the functions that took `cmt` arguments now take `&cmt_`
  arguments. This includes all the methods in the `Delegate` trait.

As a result, the vast majority of the heap allocations are avoided. In
an extreme case, the number of calls to malloc in tuple-stress drops
from 9.9M to 7.9M, a drop of 20%. And the compile times for many runs of
coercions, deep-vector, and tuple-stress drop by 1--2%.
2018-05-05 08:52:28 +00:00
Nicholas Nethercote
7cf142f78b Avoid many cmt allocations.
`cmt` is a ref-counted wrapper around `cmt_` The use of refcounting
keeps `cmt` handling simple, but a lot of `cmt` instances are very
short-lived, and heap-allocating the short-lived ones takes up time.

This patch changes things in the following ways.

- Most of the functions that produced `cmt` instances now produce `cmt_`
  instances. The `Rc::new` calls that occurred within those functions
  now occur at their call sites (but only when necessary, which isn't
  that often).

- Many of the functions that took `cmt` arguments now take `&cmt_`
  arguments. This includes all the methods in the `Delegate` trait.

As a result, the vast majority of the heap allocations are avoided. In
an extreme case, the number of calls to malloc in tuple-stress drops
from 9.9M to 7.9M, a drop of 20%. And the compile times for many runs of
coercions, deep-vector, and tuple-stress drop by 1--2%.
2018-05-03 22:14:35 +10:00
Oliver Schneider
bf2a6c3ff9 Allow unaligned reads in constants 2018-05-02 15:48:26 +02:00
Oliver Schneider
cf103e56bd
Reintroduce the float parsing error 2018-04-30 18:18:33 +02:00
Oliver Schneider
40b118cf47
Remove ConstFloat 2018-04-30 18:18:33 +02:00
Oliver Schneider
7d982fdcf4
Implement PartialCmp for ConstFloat 2018-04-30 18:18:32 +02:00
Irina Popa
bdcd08278a rustc_target: move in type definitions from ty::layout. 2018-04-26 16:50:20 +03:00
bors
3eca70a0c5 Auto merge of #50072 - oli-obk:discriminants, r=eddyb
Allow variant discriminant initializers to refer to other initializer…

…s of the same enum

r? @eddyb

fixes the 2.4 failure of https://github.com/rust-lang/rust/issues/49765

cc @durka @retep998
2018-04-26 08:51:39 +00:00
Oliver Schneider
195c9f47e9
Allow variant discriminant initializers to refer to other initializers of the same enum 2018-04-26 08:54:14 +02:00
Oliver Schneider
3084c066e4
Fix the miri tool 2018-04-23 11:38:13 +02:00
Oliver Schneider
b22c9c01fb
Sign extend constants in range patterns 2018-04-19 09:01:27 +02:00
Vadim Petrochenkov
4f69b7fb85 Avoid comparing fields by name when possible
Resolve them into field indices once and then use those resolutions

+ Fix rebase
2018-04-12 23:06:03 +03:00
Vadim Petrochenkov
44acea4d88 AST/HIR: Merge field access expressions for named and numeric fields 2018-04-12 23:02:09 +03:00
Vadim Petrochenkov
e2afefd80b Get rid of SpannedIdent 2018-04-06 11:48:19 +03:00
bors
b12af86a77 Auto merge of #49348 - bobtwinkles:extend_2pb, r=nikomatsakis
Extend two-phase borrows to apply to method receiver autorefs

Fixes #48598 by permitting two-phase borrows on the autorefs created when functions and methods.
2018-04-03 09:11:35 +00:00
bobtwinkles
d64bd2afc3 Push AllowTwoPhase down to the HAIR level
For consistency, use AllowTwoPhase everywhere between the frontend and MIR.
2018-03-28 04:08:03 -04:00
Oliver Schneider
422efd793b
Use the actual discriminant instead of always choosing the dataful variant 2018-03-27 17:19:41 +02:00
Oliver Schneider
6b3202a2bf
Trim discriminants to their final type size 2018-03-27 09:18:08 +02:00
David Wood
692a931887
UserAssertTy can handle inference variables.
This commit modifies the UserAssertTy statement to take a canonicalized
type rather than a regular type so that we can handle the case where the
user provided type contains a inference variable.
2018-03-22 21:11:02 +00:00
David Wood
17b285d203
Added UserAssertTy statement. 2018-03-22 21:10:59 +00:00
Andrew Cann
a9fc3901b0 stabilise feature(never_type)
Replace feature(never_type) with feature(exhaustive_patterns).
feature(exhaustive_patterns) only covers the pattern-exhaustives checks
that used to be covered by feature(never_type)
2018-03-14 12:44:51 +08:00
Andrew Cann
9b15ddb29e remove defaulting to unit
Types will no longer default to `()`, instead always defaulting to `!`.
This disables the associated warning and removes the flag from TyTuple
2018-03-14 12:44:51 +08:00
Oliver Schneider
aedd4c61ea
Regenerate tests 2018-03-08 08:35:38 +01:00
Oliver Schneider
6cfda078bf
Use clearer name for integer bit width helper function 2018-03-08 08:35:38 +01:00
Oliver Schneider
eb18d39a04
Reuse Integer::from_attr 2018-03-08 08:35:38 +01:00
Oliver Schneider
47913ee8f4
Address review comments 2018-03-08 08:35:38 +01:00
Oliver Schneider
df283df887
Don't use the undefined bytes of PrimVal::Bytes 2018-03-08 08:34:18 +01:00
Oliver Schneider
d98a2b90b2
Rebase fallout 2018-03-08 08:34:17 +01:00
Oliver Schneider
5b698a1040
Unregress error spans in constant errors 2018-03-08 08:34:17 +01:00
Oliver Schneider
f5cc5ca8c7
Remove dead code 2018-03-08 08:34:16 +01:00
Oliver Schneider
1f9d846a58
Add some documentation to pattern/const conversions 2018-03-08 08:34:16 +01:00
Oliver Schneider
b985399831
Reduce code duplication 2018-03-08 08:34:16 +01:00
Oliver Schneider
3c663d0607
Tidy fix 2018-03-08 08:34:16 +01:00
Oliver Schneider
ceb634a732
Update tests 2018-03-08 08:34:14 +01:00
Oliver Schneider
600fcc7159
Report const eval errors at the correct span 2018-03-08 08:34:14 +01:00
Oliver Schneider
ef995bde50
Move the pattern checking code to hair 2018-03-08 08:34:11 +01:00
Oliver Schneider
1543367624
The const_eval module is no more 2018-03-08 08:34:11 +01:00
Oliver Schneider
9857eaa4df
Nuke ConstInt and Const*size 2018-03-08 08:34:10 +01:00
Oliver Schneider
b33e4e784e
Fully use miri in trans 2018-03-08 08:34:05 +01:00
Alexander Regueiro
b2b101befc
Prepare for using miri in trans 2018-03-08 08:09:01 +01:00
Oliver Schneider
28572d2c1f
Nuke the entire ctfe from orbit, it's the only way to be sure 2018-03-08 08:08:14 +01:00
Oliver Schneider
e97089dae3
Move librustc_const_eval to librustc_mir 2018-03-08 08:08:14 +01:00
Oliver Schneider
918b6d7633
Produce instead of pointers 2018-03-08 08:08:14 +01:00
John Kåre Alsaker
b74e97cf42 Replace Rc with Lrc for shared data 2018-03-02 10:48:52 +01:00
Felix S. Klock II
c8041dd8ac Add AutoBorrowMutability; its like hir::Mutability but w/ two-phase borrow info too.
Namely, the mutable borrows also carries a flag indicating whether
they should support two-phase borrows.

This allows us to thread down, from the point of the borrow's
introduction, whether the particular adjustment that created it is one
that yields two-phase mutable borrows.
2018-02-08 12:16:30 +01:00
Felix S. Klock II
c00266b7ac Encode (in MIR) whether borrows are explicit in source or arise due to autoref.
This is foundation for issue 46747 (limit two-phase borrows to method-call autorefs).
2018-02-08 12:16:25 +01:00
Aaron Hill
b5f8cd5c20
Fix ref-to-ptr coercions not working with NLL in certain cases
Implicit coercions from references to pointers were lowered to slightly
different Mir than explicit casts (e.g. 'foo as *mut T'). This resulted
in certain uses of self-referential structs compiling correctly when an
explicit cast was used, but not when the implicit coercion was used.

To fix this, this commit adds an outer 'Use' expr when applying a
raw-ptr-borrow adjustment. This makes the lowered Mir for coercions
identical to that of explicit coercions, allowing the original code to
compile regardless of how the raw ptr cast occurs.

Fixes #47722
2018-01-29 23:25:54 -05:00
Seiichi Uchida
d882691046 Prefer to use attr::contains_name() and attr::find_by_name() 2017-12-28 12:32:24 +09:00
Eduard-Mihai Burtescu
473f044225 MIR: s/lv(al(ue)?)?/place in function/variable/module names. 2017-12-01 18:48:57 +02:00
Eduard-Mihai Burtescu
c42a118188 MIR: split Operand::Consume into Copy and Move. 2017-11-28 04:18:32 +02:00
bors
d6d09e0b4d Auto merge of #45879 - nikomatsakis:nll-kill-cyclic-closures, r=arielb1
move closure kind, signature into `ClosureSubsts`

Instead of using side-tables, store the closure-kind and signature in the substitutions themselves. This has two key effects:

- It means that the closure's type changes as inference finds out more things, which is very nice.
    - As a result, it avoids the need for the `freshen_closure_like` code (though we still use it for generators).
- It avoids cyclic closures calls.
    - These were never meant to be supported, precisely because they make a lot of the fancy inference that we do much more complicated. However, due to an oversight, it was previously possible -- if challenging -- to create a setup where a closure *directly* called itself (see e.g. #21410).

We have to see what the effect of this change is, though. Needs a crater run. Marking as [WIP] until that has been assessed.

r? @arielb1
2017-11-21 22:52:19 +00:00
Eduard-Mihai Burtescu
9deea47c96 rustc_mir: always downcast enums, even if univariant. 2017-11-18 20:52:38 +02:00
Niko Matsakis
eb26e30b91 kill the closure_kind query 2017-11-18 07:47:37 -05:00
bors
02eed2e9a5 Auto merge of #46004 - michaelwoerister:cached-mir-wip-3, r=nikomatsakis
incr.comp.: Implement query result cache and use it to cache type checking tables.

This is a spike implementation of caching more than LLVM IR and object files when doing incremental compilation. At the moment, only the `typeck_tables_of` query is cached but MIR and borrow-check will follow shortly. The feature is activated by running with `-Zincremental-queries` in addition to `-Zincremental`, it is not yet active by default.

r? @nikomatsakis
2017-11-17 10:12:21 +00:00
Michael Woerister
24e54ddefa Introduce LocalDefId which provides a type-level guarantee that the DefId is from the local crate. 2017-11-16 14:04:01 +01:00
Eduard-Mihai Burtescu
d6aa56f44e rustc: split off BodyOwnerKind from MirSource. 2017-11-14 08:54:27 +02:00
Eduard-Mihai Burtescu
c79e8f4d1d rustc: remove unused MirSource::GeneratorDrop. 2017-11-14 08:52:26 +02:00
bors
91dbf52af3 Auto merge of #44809 - arielb1:small-scope, r=eddyb
encode region::Scope using fewer bytes

Now that region::Scope is no longer interned, its size is more important. This PR encodes region::Scope in 8 bytes instead of 12, which should speed up region inference somewhat (perf testing needed) and should improve the margins on #36799 by 64MB (that's not a lot, I did this PR mostly to speed up region inference).

This is a perf-sensitive PR. Please don't roll me up.

r? @eddyb

This is based on  #44743 so I could get more accurate measurements on #36799.
2017-09-25 12:52:02 +00:00
Ariel Ben-Yehuda
8214ab1662 move Scope behind an enum 2017-09-24 16:13:54 +03:00
Ariel Ben-Yehuda
c72a979979 move unsafety checking to MIR
No functional changes intended.
2017-09-24 12:46:00 +03:00
Ariel Ben-Yehuda
8c7500f9b6 add lint levels to VisibilityScope 2017-09-24 12:46:00 +03:00
Douglas Campos
3fe4612d14 bring Ty into scope 2017-09-14 21:54:21 -04:00
Eduard-Mihai Burtescu
57ebd28fdb rustc: use ConstVal::Unevaluated instead of mir::Literal::Item. 2017-09-11 08:41:16 +03:00
Eduard-Mihai Burtescu
3ce31eb990 rustc: replace usize with u64 and ConstUsize. 2017-09-11 08:41:15 +03:00
Eduard-Mihai Burtescu
932289c12d rustc: introduce ty::Const { ConstVal, Ty }. 2017-09-11 08:41:15 +03:00
Eduard-Mihai Burtescu
50076b00c2 rustc: intern ConstVal's in TyCtxt. 2017-09-11 08:41:03 +03:00
Eduard-Mihai Burtescu
da0a47a081 Use NodeId/HirId instead of DefId for local variables. 2017-09-08 22:00:59 +03:00
Eduard-Mihai Burtescu
8bdfd8a003 rustc: rename CodeExtent to Scope and RegionMaps to ScopeTree. 2017-09-01 23:27:48 +03:00
Eduard-Mihai Burtescu
e4996ec49c rustc: use hir::ItemLocalId instead of ast::NodeId in CodeExtent. 2017-09-01 11:18:31 +03:00
Eduard-Mihai Burtescu
ea6aca7726 rustc: take TyCtxt and RegionMaps in CodeMap::span. 2017-09-01 11:17:03 +03:00
John Kåre Alsaker
d29af37999 Merge branch 'master' of https://github.com/rust-lang/rust into gen 2017-08-28 02:41:16 +02:00
Felix S. Klock II
b8d8dc3c23 Fix #43457 (and avoid some unneeded lookups to boot, woo). 2017-08-25 16:08:03 +02:00
Alex Crichton
1210ebff43 Merge remote-tracking branch 'origin/master' into gen 2017-08-16 10:03:47 -07:00
Zack M. Davis
1b6c9605e4 use field init shorthand EVERYWHERE
Like #43008 (f668999), but _much more aggressive_.
2017-08-15 15:29:17 -07:00
Alex Crichton
1413253a41 Merge remote-tracking branch 'origin/master' into gen 2017-08-14 19:36:13 -07:00
bors
0d12553320 Auto merge of #43740 - michaelwoerister:local-id-in-typecktables, r=arielb1
Use hir::ItemLocalId as keys in TypeckTables.

This PR makes `TypeckTables` use `ItemLocalId` instead of `NodeId` as key. This is needed for incremental compilation -- for stable hashing and for being able to persist and reload these tables. The PR implements the most important part of https://github.com/rust-lang/rust/issues/40303.

Some notes on the implementation:
* The PR adds the `HirId` to HIR nodes where needed (`Expr`, `Local`, `Block`, `Pat`) which obviates the need to store a `NodeId -> HirId` mapping in crate metadata. Thanks @eddyb for the suggestion! In the future the `HirId` should completely replace the `NodeId` in HIR nodes.
* Before something is read or stored in one of the various `TypeckTables` subtables, the entry's key is validated via the new `TypeckTables::validate_hir_id()` method. This makes sure that we are not mixing information from different items in a single table.

That last part could be made a bit nicer by either (a) new-typing the table-key and making `validate_hir_id()` the only way to convert a `HirId` to the new-typed key, or (b) just encapsulate sub-table access a little better. This PR, however, contents itself with not making things significantly worse.

Also, there's quite a bit of switching around between `NodeId`, `HirId`, and `DefIndex`. These conversions are cheap except for `HirId -> NodeId`, so if the valued reviewer finds such an instance in a performance critical place, please let me know.

Ideally we convert more and more code from `NodeId` to `HirId` in the future so that there are no more `NodeId`s after HIR lowering anywhere. Then the amount of switching should be minimal again.

r? @eddyb, maybe?
2017-08-14 14:15:06 +00:00
bors
bffc973da8 Auto merge of #43794 - Eijebong:fix_typos, r=lukaramu,steveklanik,imperio
Fix some typos

I wrote a really naive script and found those typos in the documentation.
2017-08-12 05:52:19 +00:00
John Kåre Alsaker
d020ff0c68 Merge branch 'master' of https://github.com/rust-lang/rust into gen
# Conflicts:
#	src/librustc_mir/build/scope.rs
2017-08-12 07:11:19 +02:00
Michael Woerister
1f54df1101 Encapsulate sub-table access in TypeckTables and validate keys on each access. 2017-08-11 12:17:07 +02:00
Michael Woerister
4dcc3a4aae Use DefIndex instead of NodeId in UpvarId. 2017-08-11 12:11:38 +02:00
Michael Woerister
fbc7398bad Use ItemLocalId as key for TypeckTables::cast_kinds. 2017-08-11 12:11:38 +02:00
Michael Woerister
801dd07a95 Use ItemLocalId as key for TypeckTables::fru_field_types. 2017-08-11 12:11:38 +02:00
Michael Woerister
7f2423eede Use ItemLocalId as key for node_types, node_substs, and adjustments in TypeckTables. 2017-08-11 12:11:38 +02:00
Michael Woerister
783ccc443b Make TypeckTables::type_dependent_defs use ItemLocalId instead of NodeId. 2017-08-11 12:11:38 +02:00
John Kåre Alsaker
be9c64b0c7 Store generator interior in MIR literals 2017-08-11 07:15:33 +02:00
Bastien Orivel
47cb3c5bc2 Fix some typos 2017-08-11 00:16:18 +02:00
Ariel Ben-Yehuda
17d2bcd162 For box expressions, use NZ drop instead of a free block
This falls naturally out of making drop elaboration work with `box`
expressions, which is probably required for sane MIR borrow-checking.
This is a pure refactoring with no intentional functional effects.
2017-08-10 15:57:28 +03:00
Alex Crichton
352577f4bb Initial pass review comments 2017-08-09 13:56:19 -07:00
Alex Crichton
9285a61413 Remove IsGenerator in favor of a boolean
No need to be mixed!
2017-07-28 13:24:28 -07:00
Alex Crichton
09a5d319ab Remove support for gen arg 2017-07-28 15:46:26 +02:00
John Kåre Alsaker
df608e710c Rename suspend to yield 2017-07-28 15:46:24 +02:00
John Kåre Alsaker
d861982ca6 Generator literal support 2017-07-28 15:46:23 +02:00