152 Commits

Author SHA1 Message Date
Eduard-Mihai Burtescu
57ebd28fdb rustc: use ConstVal::Unevaluated instead of mir::Literal::Item. 2017-09-11 08:41:16 +03: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
Alex Crichton
04c66c30a7 Merge remote-tracking branch 'origin/master' into gen 2017-08-21 21:47:07 -07:00
bors
942711e115 Auto merge of #43690 - scalexm:issue-28229, r=nikomatsakis
Generate builtin impls for `Clone`

This fixes a long-standing ICE and limitation where some builtin types implement `Copy` but not `Clone` (whereas `Clone` is a super trait of `Copy`).

However, this PR has a few side-effects:
* `Clone` is now marked as a lang item.
* `[T; N]` is now `Clone` if `T: Clone` (currently, only if `T: Copy` and for `N <= 32`).
* `fn foo<'a>() where &'a mut (): Clone { }` won't compile anymore because of how bounds for builtin traits are handled (e.g. same thing currently if you replace `Clone` by `Copy` in this example). Of course this function is unusable anyway, an error would pop as soon as it is called.

Hence, I'm wondering wether this PR would need an RFC...
Also, cc-ing @nikomatsakis, @arielb1.

Related issues: #28229, #24000.
2017-08-22 01:34:54 +00: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
scalexm
4e4e55aa77 Rename BuiltinShim -> CloneShim 2017-08-14 15:07:21 +02:00
scalexm
0c3ac648f8 Make Clone a lang item and generate builtin impls.
Fixes #28229.
Fixes #24000.
2017-08-14 15:07:21 +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
Michael Woerister
f6e5416a2f trans: Make the collector search const fn invocations. 2017-07-20 22:10:36 +02:00
Michael Woerister
678d37700d Address some nits in trans-collector and partitioner. 2017-07-13 17:45:40 +02:00
Michael Woerister
2f07eb3261 trans: Internalize symbols at the trans-item level, without relying on LLVM. 2017-07-13 13:28:16 +02:00
Michael Woerister
1ebfab5104 trans: Collect all accesses between trans-items, not just inlining edges. 2017-07-12 17:39:01 +02:00
bors
c28cbfb127 Auto merge of #42797 - arielb1:ex-falso-ice, r=nikomatsakis
avoid translating roots with predicates that do not hold

Finally I got around to doing this.

Fixes #37725.

r? @nikomatsakis
2017-06-28 23:58:11 +00:00
Ariel Ben-Yehuda
a6ca302097 add comments 2017-06-28 23:50:24 +03:00
Eduard-Mihai Burtescu
33ecf72e8e rustc: move the PolyFnSig out of TyFnDef. 2017-06-27 16:39:52 +03:00
Ariel Ben-Yehuda
3ac976861d avoid translating roots with predicates that do not hold
Fixes #37725.
2017-06-21 16:16:19 +03:00
Ariel Ben-Yehuda
09219d6a49 collector: apply param substs to closures cast to fn items
Fixes #42718.
2017-06-18 18:57:39 +03:00
bors
924898f88a Auto merge of #41917 - arielb1:mir-array, r=nagisa
Translate array drop glue using MIR

I was a bit lazy here and used a usize-based index instead of a pointer iteration. Do you think this is important @eddyb?

r? @eddyb
2017-05-28 12:01:02 +00:00
Ariel Ben-Yehuda
7b295eea42 add NullOp::SizeOf and BinOp::Offset 2017-05-28 10:43:24 +03:00
Ariel Ben-Yehuda
9da2aaccfe translate array drop glue using MIR
This fixes leakage on panic with arrays & slices. I am using a C-style
for-loop instead of a pointer-based loop because that would be ugly-er
to implement.
2017-05-28 10:43:24 +03:00
Robin Kruppe
6fec17ee15 Remove trans-internal re-exports of rustc modules
The previous commit removed them from the public API, this rewrites the use statements to get rid of the non-standard re-exports.
2017-05-27 21:09:29 +02:00
achernyak
1f532bfed5 is_exported_symbol 2017-05-07 21:05:31 -05:00
achernyak
5a7946df70 is_foreign_item 2017-05-05 08:15:08 -05:00
Niko Matsakis
393fa4f1b7 rename from item_mir to optimized_mir 2017-05-02 16:21:57 -04:00
Taylor Cramer
daa0094eb7 Queryify is_item_mir_available 2017-05-01 10:24:10 -07:00
bors
54ef80043a Auto merge of #37860 - giannicic:defaultimpl, r=nagisa
#37653 support `default impl` for specialization

this commit implements the first step of the `default impl` feature:

> all items in a `default impl` are (implicitly) `default` and hence
> specializable.

In order to test this feature I've copied all the tests provided for the
`default` method implementation (in run-pass/specialization and
compile-fail/specialization directories) and moved the `default` keyword
from the item to the impl.
See [referenced](https://github.com/rust-lang/rust/issues/37653) issue for further info

r? @aturon
2017-04-27 02:48:17 +00:00
Eduard-Mihai Burtescu
612bb1f54e rustc: rename some of the queries to match tcx methods. 2017-04-24 15:20:52 +03:00
Gianni Ciccarelli
116e9831a5 support default impl for specialization
this commit implements the first step of the `default impl` feature:
all items in a `default impl` are (implicitly) `default` and hence
specializable.
In order to test this feature I've copied all the tests provided for the
`default` method implementation (in run-pass/specialization and
compile-fail/specialization directories) and moved the `default` keyword
from the item to the impl.
See referenced issue for further info
2017-04-24 10:08:48 +00:00
Niko Matsakis
6d86f81eb1 move the uses of the trans caches into rustc::traits
This makes these routines more readily available for other bits of
code. It also will help when refactoring.
2017-04-21 21:02:14 -04:00
A.J. Gardner
70fcff6318 Add new TransItem for global_asm trans 2017-04-12 19:12:49 -05:00
A.J. Gardner
768e902941 First attempt at global_asm! macro 2017-04-12 19:12:49 -05:00
Ariel Ben-Yehuda
f2c7917402 translate drop glue using MIR
Drop of arrays is now translated in trans::block in an ugly way that I
should clean up in a later PR, and does not handle panics in the middle
of an array drop, but this commit & PR are growing too big.
2017-03-18 02:53:08 +02:00
Ariel Ben-Yehuda
e1f3c67cb4 translate closure shims using MIR 2017-03-18 02:53:07 +02:00
Ariel Ben-Yehuda
a5e3c3d5b8 collector: collect functions when they are called/reified
This avoids the creation of unneeded vtable shims.
2017-03-18 02:53:07 +02:00
Ariel Ben-Yehuda
65a4266f1f refactor away callee::Callee and translate virtual calls through a MIR shim
These changes are in the same commit to avoid needing to adapt
meth::trans_object_shim to the new scheme.

One codegen-units test is broken because we instantiate the shims even
when they are not needed. This will be fixed in the next PR.
2017-03-18 02:53:07 +02:00
Ariel Ben-Yehuda
aac5ba5dab resolve instances to ty::Instance directly
This removes the duplication between collector, callee, and (eventually)
MIRI.
2017-03-18 02:53:07 +02:00
Ariel Ben-Yehuda
bf80fec326 translate function shims using MIR 2017-03-18 02:53:06 +02:00
Ariel Ben-Yehuda
ffee9566bb move Instance to rustc and use it in the collector 2017-03-18 02:53:04 +02:00
Ariel Ben-Yehuda
0af3775dd2 translate tuple-variant constructors using MIR 2017-03-18 02:52:07 +02:00
bors
8c6c0f80a3 Auto merge of #40163 - arielb1:normalization-1702, r=nikomatsakis
More through normalization, Feb/Mar 2017 edition

Fix a few normalization bugs.

Fixes #27901.
Fixes #28828.
Fixes #38135.
Fixes #39363.
Fixes #39367.
2017-03-04 01:47:51 +00:00
Ariel Ben-Yehuda
e294fd5ecb convert AdtDef::destructor to on-demand
This removes the Cell from AdtDef. Also, moving destructor validity
checking to on-demand (forced during item-type checking) ensures that
invalid destructors can't cause ICEs.

Fixes #38868.
Fixes #40132.
2017-03-01 18:42:26 +02:00
Ariel Ben-Yehuda
ca8708273b more through normalization in typeck & trans
Fixes #27901.
Fixes #28828.
Fixes #38135.
Fixes #39363.
2017-03-01 16:56:08 +02:00
Eduard-Mihai Burtescu
c832e6f327 rustc_typeck: rework coherence to be almost completely on-demand. 2017-02-25 18:35:26 +02:00
Eduard-Mihai Burtescu
91374f8fe4 rustc: combine BareFnTy and ClosureTy into FnSig. 2017-02-25 17:47:15 +02:00
Eduard-Mihai Burtescu
ecae5bf785 Rollup merge of #40064 - arielb1:virtual-enum, r=nikomatsakis
trans: don't ICE when trying to create ADT trans-items

ADTs are translated in-place from rustc_trans::callee, so no trans-items
are needed.

This fix will be superseded by the shimmir branch, but I prefer not to
backport that to beta.

Fixes #39823.

Beta-nominating because regression.

r? @michaelwoerister
2017-02-25 14:13:41 +02:00
est31
1b9b322883 Implement non-capturing closure to fn coercion 2017-02-23 22:32:22 +01:00
Ariel Ben-Yehuda
4e2c993bd3 trans: don't ICE when trying to create ADT trans-items
ADTs are translated in-place from rustc_trans::callee, so no trans-items
are needed.

This fix will be superseded by the shimmir branch, but I prefer not to
backport that to beta.

Fixes #39823.
2017-02-23 20:03:18 +02:00
Niko Matsakis
f2d8a00191 erase late bound regions in get_vtable_methods()
Higher-ranked object types can otherwise cause late-bound regions to
sneak into the substs, leading to the false conclusion that some method
is unreachable.  The heart of this patch is from @arielb1.
2017-02-16 13:56:06 -05:00