100 Commits

Author SHA1 Message Date
Corey Farwell
7bd0da7e89 Rollup merge of #39678 - vadimcn:top-level-expn, r=michaelwoerister
Exclude top-level macro expansions from source location override.

It occurred to me that a simple heuristic can address the issue #36382: any macros that expand into items (including `include!()`) don't need to be stepped over because there's not code to step through above a function scope level.

r? @michaelwoerister
2017-02-09 12:14:22 -05:00
Vadim Chugunov
d113b39fbf Exclude top-level macro expansions from source location override. 2017-02-08 22:10:33 -08: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
Simonas Kazlauskas
1363cdaec9 Remove unnecessary LLVMRustPersonalityFn binding
LLVM Core C bindings provide this function for all the versions back to what we support (3.7), and
helps to avoid this unnecessary builder->function transition every time. Also a negative diff.
2017-01-26 23:49:17 +02:00
Mark Simulacrum
b01b6e1d56 Fix errors introduced during rebase 2017-01-04 11:47:43 -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
8038489357 Use LvalueRef instead of MaybeSizedValue 2017-01-04 11:35:33 -07:00
Mark Simulacrum
4c9995a3f9 Simpliy block creation in MirContext 2017-01-04 11:34:27 -07:00
Mark Simulacrum
37dd9f6c7b Add Builder::sess and Builder::tcx methods 2017-01-04 11:34:26 -07:00
Mark Simulacrum
f67e7d6b4a Add method, new_block, to MirContext for block construction.
This makes a slow transition to block construction happening only from
MirContext easier.
2017-01-04 11:34:00 -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
bors
d40d01bd0e Auto merge of #38670 - dotdash:transmute_align, r=eddyb
Fix transmute::<T, U> where T requires a bigger alignment than U

For transmute::<T, U> we simply pointercast the destination from a U
pointer to a T pointer, without providing any alignment information,
thus LLVM assumes that the destination is aligned to hold a value of
type T, which is not necessarily true. This can lead to LLVM emitting
machine instructions that assume said alignment, and thus cause aborts.

To fix this, we need to provide the actual alignment to store_operand()
and in turn to store() so they can set the proper alignment information
on the stores and LLVM can emit the proper machine instructions.

Fixes #32947
2017-01-04 14:26:17 +00:00
Björn Steinbrink
71a11a0b10 Fix transmute::<T, U> where T requires a bigger alignment than U
For transmute::<T, U> we simply pointercast the destination from a U
pointer to a T pointer, without providing any alignment information,
thus LLVM assumes that the destination is aligned to hold a value of
type T, which is not necessarily true. This can lead to LLVM emitting
machine instructions that assume said alignment, and thus cause aborts.

To fix this, we need to provide the actual alignment to store_operand()
and in turn to store() so they can set the proper alignment information
on the stores and LLVM can emit the proper machine instructions.

Fixes #32947
2016-12-31 13:13:30 +01:00
Simonas Kazlauskas
ee69cd7925 Calculate discriminant bounds within 64 bits
Since discriminants do not support i128 yet, lets just calculate the boundaries within the 64 bits
that are supported. This also avoids an issue with bootstrapping on 32 bit systems due to #38727.
2016-12-31 04:55:29 +02:00
Mark Simulacrum
0013d4cdf6 Fix rebase errors. 2016-12-20 20:37:19 -07:00
Mark Simulacrum
57914f626b Move eh_personality() onto CrateContext 2016-12-20 20:04:45 -07:00
Mark Simulacrum
bd009dc444 Remove fn_ty from FunctionContext 2016-12-20 20:04:44 -07:00
Mark Simulacrum
98a13ffe44 Remove outdated comment 2016-12-20 20:04:44 -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
f11721a13e Add helper function to set debug locations 2016-12-20 20:03:35 -07:00
Mark Simulacrum
22bf541e27 Clean up uses of set_personality_fn.
Remove gnu/msvc constructors for Funclet; these are worse for
readability than explicit Some/None.
2016-12-20 20:03:35 -07:00
Mark Simulacrum
7f87163071 Simplify funclets creation. 2016-12-20 20:03:35 -07:00
Mark Simulacrum
5301d380b6 Remove unused bcx from LocalAnalyzer. 2016-12-20 20:03:35 -07:00
Mark Simulacrum
0256f60461 Move debug info check into create_function_debug_context 2016-12-20 20:03:34 -07:00
Mark Simulacrum
a445199afb Remove public ccx function on MirContext 2016-12-20 20:03:34 -07:00
Mark Simulacrum
7f5dffbb19 Make debuginfo take debug_context instead of MirContext 2016-12-20 20:03:34 -07:00
Mark Simulacrum
2bda3b7acb Inline and simplify init_cpad 2016-12-20 20:03:33 -07:00
Mark Simulacrum
e10695f161 Move param_substs onto MirContext 2016-12-20 20:03:32 -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
2b9a0efef4 Move debug_context to MirContext from FunctionContext 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
b48e74b5b0 Rename 'blk and 'bcx to 'a 2016-12-20 20:03:31 -07:00
Mark-Simulacrum
1804131b6d Remove Ref::clone for MirContext mir 2016-12-20 20:03:30 -07:00
Mark-Simulacrum
9c38a54cae Inline FunctionContext.mir 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
cbbdb73eb0 Remove FunctionContext::cleanup, replacing it with a Drop impl.
Move alloca and initial entry block creation into FunctionContext::new.
2016-12-20 20:03:27 -07:00
Mark-Simulacrum
bf8614b55a Rename Builder::alloca to dynamic_alloca 2016-12-20 20:03:27 -07:00
Mark-Simulacrum
5262113fa6 Remove fcx.span 2016-12-20 20:03:26 -07:00
Mark-Simulacrum
820164582d Remove DebugLoc. 2016-12-20 20:03:24 -07:00
Mark-Simulacrum
be981dce80 Start FunctionContext privatization and reduction 2016-12-20 20:02:53 -07:00
Mark-Simulacrum
86b2bdb435 Rename LandingPad to Funclet
Changes internal storage to direct field values instead of Options,
since both fields are always either set or not set.
2016-12-20 20:02:48 -07:00
Mark-Simulacrum
8f3d824cc7 Remove common::Block. 2016-12-20 20:02:46 -07:00
Mark-Simulacrum
ad0a901d37 Remove *_builder 2016-12-20 20:01:40 -07:00
Mark-Simulacrum
59ef51c12a Replace build.rs with calling functions on builder directly 2016-12-20 20:01:40 -07:00
Mark-Simulacrum
bf7d4534a7 Refactor Block into BlockAndBuilder 2016-12-20 20:01:40 -07:00
Austin Hicks
e1d8806efd Fix closure debuginfo. 2016-12-19 21:14:27 -05:00