347 Commits

Author SHA1 Message Date
Mark Simulacrum
654131cb53 Add unreachable() after calls to eh_unwind_resume. 2016-12-20 20:04:45 -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
15b9b27bb0 slice_for_each gives a reference already 2016-12-20 20:04:44 -07:00
Mark Simulacrum
295ea0d6c3 Reduce coerce_unsized_into to one call
We cannot inline due to it being recursive.
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
5bdcc22b79 Remove FIXME 2016-12-20 20:02:52 -07:00
Mark-Simulacrum
dda6c8cf2f Inline base::malloc_raw_dyn.
Move comment about not unwinding into liballoc.
2016-12-20 20:02:52 -07:00
Mark-Simulacrum
31691692a2 Deduplicate store_operand_direct and store_operand 2016-12-20 20:02:51 -07:00
Mark-Simulacrum
51dfba1185 Refactor Vec<CleanupScope> into Option<CleanupScope>. 2016-12-20 20:02:50 -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
Austin Hicks
c8c3579bff Fix closure arguments which are immediate because of field reordering.
While building immediates goes through type_of::type_of, extracting them must account for field reorderings.
2016-12-14 12:28:24 -05:00
Austin Hicks
0e61c0e231 Incorporate a bunch of review comments. 2016-12-14 12:28:20 -05:00
Austin Hicks
d754778083 Fix tuple and closure literals. 2016-12-14 12:28:19 -05:00
Mark-Simulacrum
1eab19dba8 Refactor ty::FnSig to privatize all fields 2016-12-05 22:22:49 -07:00
bors
ebec55406b Auto merge of #37824 - jseyfried:symbols, r=eddyb
Clean up `ast::Attribute`, `ast::CrateConfig`, and string interning

This PR
 - removes `ast::Attribute_` (changing `Attribute` from `Spanned<Attribute_>` to a struct),
 - moves a `MetaItem`'s name from the `MetaItemKind` variants to a field of `MetaItem`,
 - avoids needlessly wrapping `ast::MetaItem` with `P`,
 - moves string interning into `syntax::symbol` (`ast::Name` is a reexport of `symbol::Symbol` for now),
 - replaces `InternedString` with `Symbol` in the AST, HIR, and various other places, and
 - refactors `ast::CrateConfig` from a `Vec` to a `HashSet`.

r? @eddyb
2016-11-21 08:08:47 -06:00
Jeffrey Seyfried
e85a0d70b8 Use Symbol instead of InternedString in the AST, HIR, and various other places. 2016-11-21 09:00:55 +00:00
Jeffrey Seyfried
d2f8fb0a0a Move syntax::util::interner -> syntax::symbol, cleanup. 2016-11-20 23:40:20 +00:00
Dylan McKay
84415ea1f2 [LLVM 4.0] Set EH personality when resuming stack unwinding
To resume stack unwinding, the LLVM `resume` instruction must be used.

In order to use this instruction, the calling function must have an
exception handling personality set.

LLVM 4.0 adds a new IR validation check to ensure a personality is
always set in these cases.

This was introduced in [r277360](https://reviews.llvm.org/rL277360).
2016-11-18 11:24:19 -05:00
bors
c8867f8b46 Auto merge of #37672 - japaric:msp430, r=alexcrichton
enable the MSP430 LLVM backend

to let people experiment with this target out of tree.

The MSP430 architecture is used in 16-bit microcontrollers commonly used
in Digital Signal Processing applications.

---

How this was tested:

Declaring a custom target with the following specification:

``` json
{
  "arch": "msp430",
  "data-layout": "e-m:e-p:16:16-i32:16:32-a:16-n8:16",
  "executables": true,
  "linker": "msp430-gcc",
  "llvm-target": "msp430",
  "max-atomic-width": 0,
  "no-integrated-as": true,
  "os": "none",
  "panic-strategy": "abort",
  "relocation-model": "static",
  "target-endian": "little",
  "target-pointer-width": "16"
}
```

And this minimal file:

``` rust

pub fn start() -> ! {
    loop {}
}

trait Copy {}

trait Sized {}
```

Produces the following object files:

```
$ rustc --target=msp430 --emit=obj foo.rs

$ msp430-objdump -Cd foo.o

foo.o:     file format elf32-msp430

Disassembly of section .text.start:

00000000 <start>:
   0:   21 83           decd    r1
   2:   00 3c           jmp     $+2             ;abs 0x4
   4:   00 3c           jmp     $+2             ;abs 0x6
   6:   ff 3f           jmp     $+0             ;abs 0x6

$ rustc --target=msp430 --emit=obj foo.rs -O

$ msp430-objdump -Cd foo.o

foo.o:     file format elf32-msp430

Disassembly of section .text.start:

00000000 <start>:
   0:   ff 3f           jmp     $+0             ;abs 0x0
```

---

r? @alexcrichton
~~TODO get this working with Makefiles so nightly releases include this backend~~
~~TODO measure the increase in binary size~~ +187KiB (+0.47%)
~~FIXME --emit=obj produces empty object files~~
2016-11-15 01:27:47 -08:00
Jorge Aparicio
30e5667607 fix #37673 2016-11-12 17:33:35 -05:00
Ariel Ben-Yehuda
57950982b2 rustc_trans: translate closures using the collector
Translate closures like normal functions, using the trans::collector
interface.
2016-11-12 20:08:03 +02:00