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
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
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
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
e96a171453
rustc: move the actual values of enum discriminants into a map.
2017-02-25 17:07:59 +02:00
James Miller
7af3406a49
Set metadata for vtable-related loads
...
Give LLVM much more information about vtable pointers. Without the extra
information, LLVM has to be rather pessimistic about vtables, preventing
a number of obvious optimisations.
* Makes the vtable pointer argument noalias and readonly.
* Marks loads of the vtable pointer as nonnull.
* Marks load from the vtable with `!invariant.load` metadata.
Fixes #39992
2017-02-21 21:08:06 +13:00
Ariel Ben-Yehuda
7ce1f5194c
remove unneeded drop of isize
2017-02-08 22:23:21 +01:00
Ariel Ben-Yehuda
09825de61b
emit "align 1" metadata on loads/stores of packed structs
...
According to the LLVM reference:
> A value of 0 or an omitted align argument means that the operation has
the ABI alignment for the target.
So loads/stores of fields of packed structs need to have their align set
to 1. Implement that by tracking the alignment of `LvalueRef`s.
Fixes #39376 .
2017-02-08 22:23:21 +01:00
Andrew Cann
2cc84df44c
Add warning for () to ! switch
2017-02-03 18:48:15 +08:00
Vadim Petrochenkov
a5d725cc82
cleanup: Refactor away DtorKind
2017-01-30 23:18:22 +03:00
Vadim Petrochenkov
4a4f8ff0a3
Implement Drop for Box
2017-01-30 23:14:15 +03:00
Vadim Petrochenkov
ffba0cea62
Merge ty::TyBox into ty::TyAdt
2017-01-30 23:14:15 +03:00
Eduard-Mihai Burtescu
85a4a192c7
rustc: keep track of tables everywhere as if they were per-body.
2017-01-06 22:23:29 +02:00
Mark Simulacrum
21f86ba1bc
Simplify handling of dropping structs.
2017-01-04 11:38:11 -07:00
Mark Simulacrum
7dadd14d6c
Pull out downcasting into caller of iter_variant
...
Renames iter_variant to iter_variant_fields to more clearly communicate
the purpose of the function.
2017-01-04 11:38:11 -07:00
Mark Simulacrum
c3fe2590f5
Inline and remove Builder::entry_block
2017-01-04 11:38:10 -07:00
Mark Simulacrum
901984e1d1
Builder.build_new_block -> Builder.build_sibling_block
2017-01-04 11:38:10 -07:00
Mark Simulacrum
81e8137b0d
Inline trans_switch to simplify code
2017-01-04 11:38:10 -07:00
Mark Simulacrum
426c558c5a
Move trans_field_ptr and struct_field_ptr to mir/lvalue
2017-01-04 11:38:09 -07:00
Mark Simulacrum
ea0ebe41c7
Change trans_field_ptr to utilize LvalueTy to determine discriminant.
2017-01-04 11:37:42 -07:00
Mark Simulacrum
8038489357
Use LvalueRef instead of MaybeSizedValue
2017-01-04 11:35:33 -07:00
Mark Simulacrum
37dd9f6c7b
Add Builder::sess and Builder::tcx methods
2017-01-04 11:34:26 -07:00
Mark Simulacrum
937e8da349
Purge FunctionContext
2017-01-04 11:33:59 -07:00
Mark Simulacrum
1be170b01a
Replace BlockAndBuilder with Builder.
2017-01-04 11:33:31 -07:00
Simonas Kazlauskas
9aad2d551e
Add a way to retrieve constant value in 128 bits
...
Fixes rebase fallout, makes code correct in presence of 128-bit constants.
This commit includes manual merge conflict resolution changes from a rebase by @est31.
2016-12-30 15:17:26 +01:00
Mark Simulacrum
ca115dd083
Remove extra lang item, exchange_free; use box_free instead.
...
Trans used to insert code equivalent to box_free in a wrapper around
exchange_free, and that code is now removed from trans.
2016-12-26 17:13:51 -07:00
Mark Simulacrum
afc2dcd0ca
Make drop glue for unsized value pass two arguments instead of *(data, meta)
2016-12-21 12:02:09 -07:00
Mark Simulacrum
bd009dc444
Remove fn_ty from FunctionContext
2016-12-20 20:04:44 -07:00
Mark Simulacrum
b9f1064760
Inline make_drop_glue
2016-12-20 20:04:44 -07:00
Mark Simulacrum
6a1ec55c47
Remove needless check
2016-12-20 20:04:43 -07:00
Mark Simulacrum
6fac0a1a84
Change *.fcx.ccx to *.ccx
2016-12-20 20:04:43 -07:00
Mark Simulacrum
88202c5b83
Replace bcx.ccx() with bcx.ccx
2016-12-20 20:04:41 -07:00
Mark Simulacrum
dd1890f7f4
Remove unreachable call to unreachable
2016-12-20 20:03:34 -07:00
Mark Simulacrum
0a71b38803
Remove llretslotptr from FunctionContext
2016-12-20 20:03:33 -07:00
Mark Simulacrum
a42a3429fe
Move param_env onto SharedCrateContext, and move functions which need the ParamEnv onto it.
2016-12-20 20:03:32 -07:00
Mark Simulacrum
1173db0062
Inline last remaining use of Callee::call and delete unused code
2016-12-20 20:03:31 -07:00
Mark Simulacrum
97a2096e5e
Inline and cleanup build_return_block
2016-12-20 20:03:31 -07:00
Mark Simulacrum
515d14f094
Inline/Replace finish with build_return_block
2016-12-20 20:03:31 -07:00
Mark Simulacrum
b48e74b5b0
Rename 'blk and 'bcx to 'a
2016-12-20 20:03:31 -07:00
Mark Simulacrum
f051c60d92
Reduce extensions to FunctionContext in cleanup.
2016-12-20 20:03:30 -07:00
Mark-Simulacrum
937001a1f8
Refactor Callee::call to take bcx by-reference.
...
Also change to not return anything; nothing used the return ValueRef.
Inlines with_cond.
2016-12-20 20:03:29 -07:00
Mark-Simulacrum
cc1e210ee8
Inline trans_exchange_free
2016-12-20 20:03:28 -07:00
Mark-Simulacrum
c4f6173af8
Replace init with get_entry_block.
2016-12-20 20:03:27 -07:00
Mark-Simulacrum
c7f8b0cd81
Eagerly evaluate landing pads for cleanup scopes
2016-12-20 20:02:51 -07:00
Mark-Simulacrum
6441c977cb
Remove push_ctxt
2016-12-20 20:02:50 -07:00
Mark-Simulacrum
3265afa08f
Inline and simplify Callee::call duplicates.
2016-12-20 20:02:50 -07:00
Mark-Simulacrum
cd57bbe27a
Refactor get_landing_pad to take a CleanupScope
...
It unwrapped the Option anyway, so this more closely resembles the
reality of what's happening.
2016-12-20 20:02:50 -07:00
Mark-Simulacrum
28d00e781b
Remove cleanup scope from FunctionContext
2016-12-20 20:02:50 -07:00
Mark-Simulacrum
51dfba1185
Refactor Vec<CleanupScope> into Option<CleanupScope>.
2016-12-20 20:02:50 -07:00