Commit Graph

72 Commits

Author SHA1 Message Date
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
Niko Matsakis
6288faa3a3 trans_apply_param_substs => subst_and_normalize_erasing_regions
Consolidate `trans_apply_param_substs` and
`trans_apply_param_substs_env`. Also remove `trans_impl_self_ty`
2018-03-13 11:22:08 -04:00
Oliver Schneider
918b6d7633
Produce instead of pointers 2018-03-08 08:08:14 +01:00
Wesley Wiser
97b30f0961 Replace attr::contains_name(..., "cold")
Part of #47320
2018-03-06 19:58:02 -05:00
Wesley Wiser
4f840a683a Add inline to TransFnAttrs
Part of #47320
2018-03-06 19:58:02 -05:00
bors
3bcda48a30 Auto merge of #47802 - bobtwinkles:loop_false_edge, r=nikomatsakis
[NLL] Add false edges out of infinite loops

Resolves #46036 by adding a `cleanup` member to the `FalseEdges` terminator kind. There's also a small doc fix to one of the other comments in `into.rs` which I can pull out in to another PR if desired =)

This PR should pass CI but the test suite has been relatively unstable on my system so I'm not 100% sure.

r? @nikomatsakis
2018-02-09 13:04:17 +00: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
bobtwinkles
bdc37aa057 mir: Add TerminatorKind::FalseUnwind
Sometimes a simple goto misses the cleanup/unwind edges. Specifically, in the
case of infinite loops such as those introduced by a loop statement without any
other out edges. Analogous to TerminatorKind::FalseEdges; this new terminator
kind is used when we want borrowck to consider an unwind path, but real control
flow should never actually take it.
2018-02-05 15:00:40 -05:00
Eduard-Mihai Burtescu
9c3dc7e872 rustc: prefer ParamEnvAnd and LayoutCx over tuples for LayoutOf. 2018-02-01 00:01:08 +02:00
David Henningsson
dd6127e4af Mir: Add Terminatorkind::Abort
The Abort Terminatorkind will cause an llvm.trap function call to be
emitted.

Signed-off-by: David Henningsson <diwic@ubuntu.com>
2017-12-21 04:43:27 +01: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
511743c438 MIR: s/Lvalue/Place in type names. 2017-12-01 18:47:36 +02:00
Eduard-Mihai Burtescu
c42a118188 MIR: split Operand::Consume into Copy and Move. 2017-11-28 04:18:32 +02:00
Eduard-Mihai Burtescu
73f5bab33f rustc_mir: enforce that arguments are replaced with Local's only. 2017-11-28 04:11:09 +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
Niko Matsakis
df6fdbc9ae fix closure inlining by spilling arguments to a temporary 2017-11-19 05:36:56 -05:00
Eduard-Mihai Burtescu
b28f668e26 rustc: move size, align & primitive_align from Abi::Aggregate to layout. 2017-11-19 02:14:32 +02:00
Eduard-Mihai Burtescu
8c4d5af52b rustc: remove Ty::layout and move everything to layout_of. 2017-11-19 02:14:29 +02:00
bors
8a98531973 Auto merge of #45913 - sinkuu:mir-inlining-closure, r=arielb1
Handle closures correctly in MIR inlining

Fixes #45894.
2017-11-15 01:32:30 +00:00
Shotaro Yamada
ec2ff8f734 Add TyCtxt::is_closure 2017-11-14 17:43:43 +09:00
Shotaro Yamada
c3ec175857 Make create_temp_necessary a method 2017-11-14 17:12:08 +09:00
Shotaro Yamada
cc36f88ed4 Handle closures correctly in MIR inlining 2017-11-14 17:12:08 +09:00
Eduard-Mihai Burtescu
d6aa56f44e rustc: split off BodyOwnerKind from MirSource. 2017-11-14 08:54:27 +02:00
Eduard-Mihai Burtescu
86206f22a0 rustc: move the MIR pass infrastructure and list to rustc_mir. 2017-11-14 08:52:25 +02:00
bors
9b53f0a662 Auto merge of #45909 - sinkuu:issue-45885, r=arielb1
Normalize inlined function in MIR inliner

Fixes #45885

r? @arielb1
2017-11-14 02:05:37 +00:00
Shotaro Yamada
3c96c3012d Normalize inlined function in MIR inliner 2017-11-10 20:54:58 +09:00
Ariel Ben-Yehuda
48655ea661 add a bunch of debug logging to transform::inline 2017-11-09 23:03:41 +02:00
Mikhail Modin
2d71c5f10c add TerminatorKind::FalseEdges and use it in matches 2017-11-02 09:43:36 +03:00
Douglas Campos
081b29c1f6 stop using monomorphize::resolve() 2017-09-29 22:34:48 -04:00
Douglas Campos
8a5800e1d4 take ParamEnv into account when resolving 2017-09-29 22:34:47 -04:00
Douglas Campos
24fc50fffa make it not to be a method 2017-09-29 22:34:46 -04:00
Douglas Campos
5eb302fba8 always use resolve 2017-09-29 22:34:46 -04:00
Douglas Campos
3bd09dee45 re-enable mir inlining across trait methods
this fixes #44389
2017-09-29 22:34:46 -04:00
bors
909733286f Auto merge of #44383 - qmx:gh/40473/no-inline-trait-method, r=nikomatsakis
MIR: should not inline trait method

Fixes #40473.

The idea here is bailing out of inlining if we're talking about a trait method.
2017-09-11 04:59:28 +00:00
Douglas Campos
10a5b539c7 simplify 2017-09-08 11:06:28 -04:00
bors
dead08cb33 Auto merge of #44142 - alexcrichton:dllimport-query, r=nikomatsakis
Migrate a slew of metadata methods to queries

This PR intends to make more progress on #41417, knocking off some low-hanging fruit.

Closes #44190
cc #44137
2017-09-08 09:47:58 +00:00
Douglas Campos
784e4316eb ugly, but works! 2017-09-06 23:06:14 -04:00
Oliver Schneider
5bb870faca Reintroduce the early returns 2017-09-06 12:25:46 +02:00
Oliver Schneider
02fb1b0b72 Fix a bug in the inliner 2017-09-06 10:33:53 +02:00
Alex Crichton
a2e2aba07d rustc: Migrate lang items to a query
This commit moves the calculation of the `LanguageItems` structure into a
query rather than being calculated before the `TyCtxt` exists, with the eventual
end goal of removing some `CrateStore` methods.
2017-09-05 07:37:57 -07:00
Eduard-Mihai Burtescu
c911925243 rustc_mir: implement visit_local instead/along visit_lvalue where possible. 2017-09-03 19:14:31 +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
Alex Crichton
82bad957c0 rustc: Add a FIXME for try_get in MIR inlining
It sounds like this is being handled elsewhere, so for now just preserve the
existing behavior of ignoring th error.
2017-08-25 16:08:35 -07: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
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
Ralf Jung
66fce33ecb overload the mir ty methods to make them more ergonomic to use 2017-07-12 12:59:05 -07:00
Ralf Jung
62b2e5446d Refactor: {Lvalue,Rvalue,Operand}::ty only need the locals' types, not the full &Mir 2017-07-11 16:38:16 -07:00
Eduard-Mihai Burtescu
33ecf72e8e rustc: move the PolyFnSig out of TyFnDef. 2017-06-27 16:39:52 +03:00