1438 Commits

Author SHA1 Message Date
Niko Matsakis
6a5b263503 Add (and use) an analysis to determine which temps can forgo an alloca. 2015-11-03 18:00:30 -05:00
Niko Matsakis
e84829d51d Plumbing to omit allocas for temps when possible (currently unused) 2015-11-03 04:35:00 -05:00
Niko Matsakis
02017b30eb New trans codepath that builds fn body from MIR instead. 2015-11-03 04:35:00 -05:00
Niko Matsakis
877b93add2 Move shifting code out of expr and into somewhere more accessible 2015-11-03 04:35:00 -05:00
Niko Matsakis
81ff2c2f8e Change adt case handling fn to be less tied to match 2015-11-03 04:35:00 -05:00
Niko Matsakis
3c07b46118 Pass the mir map to trans 2015-11-03 04:34:59 -05:00
bors
b7fbfb658e Auto merge of #29285 - eefriedman:libsyntax-panic, r=nrc
A set of commits which pushes some panics out of core parser methods, and into users of those parser methods.
2015-11-03 03:06:03 +00:00
bors
5b11b286bc Auto merge of #28846 - Ms2ger:categorization, r=nikomatsakis 2015-11-02 10:44:08 +00:00
bors
71409184dc Auto merge of #29177 - vadimcn:rtstuff, r=alexcrichton
Note: for now, this change only affects `-windows-gnu` builds.

So why was this `libgcc` dylib dependency needed in the first place?
The stack unwinder needs to know about locations of unwind tables of all the modules loaded in the current process.  The easiest portable way of achieving this is to have each module register itself with the unwinder when loaded into the process.  All modules compiled by GCC do this by calling the __register_frame_info() in their startup code (that's `crtbegin.o` and `crtend.o`, which are automatically linked into any gcc output).
Another important piece is that there should be only one copy of the unwinder (and thus unwind tables registry) in the process.  This pretty much means that the unwinder must be in a shared library (unless everything is statically linked). 

Now, Rust compiler tries very hard to make sure that any given Rust crate appears in the final output just once.   So if we link the unwinder statically to one of Rust's crates, everything should be fine.

Unfortunately, GCC startup objects are built under assumption that `libgcc` is the one true place for the unwind info registry, so I couldn't find any better way than to replace them.  So out go `crtbegin`/`crtend`, in come `rsbegin`/`rsend`!  

A side benefit of this change is that rustc is now more in control of the command line that goes to the linker, so we could stop using `gcc` as the linker driver and just invoke `ld` directly.
2015-11-01 17:15:29 +00:00
bors
6d43fef3aa Auto merge of #29486 - petrochenkov:multiwild, r=Manishearth
Motivation:
- It is not actually a pattern
- It is not actually needed, except for...

Drawback:
- Slice patterns like `[a, _.., b]` are pretty-printed as `[a, .., b]`. Great loss :(

plugin-[breaking-change], as always
2015-11-01 13:36:49 +00:00
bors
a5fbb3a25f Auto merge of #29316 - GBGamer:change-unchecked-div-generic, r=eddyb
Similarly to the simd intrinsics. I believe this is a better solution than #29288, and I could implement it as well for overflowing_add/sub/mul. Also rename from udiv/sdiv to div, and same for rem.
2015-11-01 07:03:09 +00:00
Nicholas Mazzuca
579420fbdd Check unchecked_div|rem's specialisation
Similarly to the simd intrinsics.
2015-10-31 12:22:15 -07:00
Vadim Petrochenkov
3468b8d42c Remove PatWildMulti 2015-10-31 03:44:43 +03:00
Ms2ger
9e135f7b15 Rename categorization and stop re-exporting its variants. 2015-10-29 09:38:11 +01:00
bors
a4fa0657f2 Auto merge of #29409 - arielb1:recursive-arrays, r=eddyb
when evaluating a recursive type, the `type_of` of the interior could be
still in progress, so trying to get its size would cause an ICE.

Fixes #19001

r? @eddyb
2015-10-28 13:16:14 +00:00
Eli Friedman
e5024924ad Make fatal errors more consistent. 2015-10-27 20:09:10 -07:00
bors
8974297b4a Auto merge of #29313 - arielb1:projection-overflow, r=eddyb
This turns the crashes into overflow errors.

r? @eddyb
2015-10-28 03:07:28 +00:00
Ariel Ben-Yehuda
7f772bb84e type_of: use sizing_type_of to check the size of arrays
when evaluating a recursive type, the type_of of the interior could be
still in progress, so we can't use that.

Fixes #19001
2015-10-27 23:02:23 +02:00
bors
540fd3aa71 Auto merge of #26848 - oli-obk:const_fn_const_eval, r=pnkfelix
this has the funky side-effect of also allowing constant evaluation of function calls to functions that are not `const fn` as long as `check_const` didn't mark that function `NOT_CONST`

It's still not possible to call a normal function from a `const fn`, but let statements' initialization value can get const evaluated (this caused the fallout in the overflowing tests)

we can now do this:

```rust
const fn add(x: usize, y: usize) -> usize { x + y }
const ARR: [i32; add(1, 2)] = [5, 6, 7];
```

also added a test for destructuring in const fn args
```rust
const fn i((a, b): (u32, u32)) -> u32 { a + b } //~ ERROR: E0022
```

This is a **[breaking change]**, since it turns some runtime panics into compile-time errors. This statement is true for ANY improvement to the const evaluator.
2015-10-27 17:11:13 +00:00
bors
679b5a9faa Auto merge of #29327 - sanxiyn:argument, r=nrc
Fix #24114.
2015-10-27 14:25:57 +00:00
Ariel Ben-Yehuda
1220e016bd add a recursion limit for type representation
I could have added a check for explicit recursion, as irregular types
tend to cause selection errors, but I am not sufficiently sure that
cannot be bypassed.

Fixes #22919
Fixes #25639
Fixes #26548
2015-10-27 16:04:43 +02:00
Jonas Schievink
153c533b27 Print the codegen worker # when using time-passes 2015-10-26 21:03:03 +01:00
Seo Sanghyeon
4e2189fe45 Remove NodeArg 2015-10-27 01:32:04 +09:00
bors
c44316d4a1 Auto merge of #29303 - petrochenkov:unistrimp, r=eddyb
And use `VariantData` instead of `P<VariantData>` in `Item_` and `Variant_`

Improvements suggested by @eddyb in https://github.com/rust-lang/rust/pull/28816#discussion_r42483587 and https://github.com/rust-lang/rust/pull/28816#discussion_r42483648

plugin-[breaking-change]

r? @eddyb
2015-10-26 08:27:59 +00:00
bors
e02ada6d38 Auto merge of #29254 - alexcrichton:stabilize-1.5, r=brson
This commit stabilizes and deprecates library APIs whose FCP has closed in the
last cycle, specifically:

Stabilized APIs:

* `fs::canonicalize`
* `Path::{metadata, symlink_metadata, canonicalize, read_link, read_dir, exists,
   is_file, is_dir}` - all moved to inherent methods from the `PathExt` trait.
* `Formatter::fill`
* `Formatter::width`
* `Formatter::precision`
* `Formatter::sign_plus`
* `Formatter::sign_minus`
* `Formatter::alternate`
* `Formatter::sign_aware_zero_pad`
* `string::ParseError`
* `Utf8Error::valid_up_to`
* `Iterator::{cmp, partial_cmp, eq, ne, lt, le, gt, ge}`
* `<[T]>::split_{first,last}{,_mut}`
* `Condvar::wait_timeout` - note that `wait_timeout_ms` is not yet deprecated
  but will be once 1.5 is released.
* `str::{R,}MatchIndices`
* `str::{r,}match_indices`
* `char::from_u32_unchecked`
* `VecDeque::insert`
* `VecDeque::shrink_to_fit`
* `VecDeque::as_slices`
* `VecDeque::as_mut_slices`
* `VecDeque::swap_remove_front` - (renamed from `swap_front_remove`)
* `VecDeque::swap_remove_back` - (renamed from `swap_back_remove`)
* `Vec::resize`
* `str::slice_mut_unchecked`
* `FileTypeExt`
* `FileTypeExt::{is_block_device, is_char_device, is_fifo, is_socket}`
* `BinaryHeap::from` - `from_vec` deprecated in favor of this
* `BinaryHeap::into_vec` - plus a `Into` impl
* `BinaryHeap::into_sorted_vec`

Deprecated APIs

* `slice::ref_slice`
* `slice::mut_ref_slice`
* `iter::{range_inclusive, RangeInclusive}`
* `std::dynamic_lib`

Closes #27706
Closes #27725
cc #27726 (align not stabilized yet)
Closes #27734
Closes #27737
Closes #27742
Closes #27743
Closes #27772
Closes #27774
Closes #27777
Closes #27781
cc #27788 (a few remaining methods though)
Closes #27790
Closes #27793
Closes #27796
Closes #27810
cc #28147 (not all parts stabilized)
2015-10-25 16:38:38 +00:00
Alex Crichton
ff49733274 std: Stabilize library APIs for 1.5
This commit stabilizes and deprecates library APIs whose FCP has closed in the
last cycle, specifically:

Stabilized APIs:

* `fs::canonicalize`
* `Path::{metadata, symlink_metadata, canonicalize, read_link, read_dir, exists,
   is_file, is_dir}` - all moved to inherent methods from the `PathExt` trait.
* `Formatter::fill`
* `Formatter::width`
* `Formatter::precision`
* `Formatter::sign_plus`
* `Formatter::sign_minus`
* `Formatter::alternate`
* `Formatter::sign_aware_zero_pad`
* `string::ParseError`
* `Utf8Error::valid_up_to`
* `Iterator::{cmp, partial_cmp, eq, ne, lt, le, gt, ge}`
* `<[T]>::split_{first,last}{,_mut}`
* `Condvar::wait_timeout` - note that `wait_timeout_ms` is not yet deprecated
  but will be once 1.5 is released.
* `str::{R,}MatchIndices`
* `str::{r,}match_indices`
* `char::from_u32_unchecked`
* `VecDeque::insert`
* `VecDeque::shrink_to_fit`
* `VecDeque::as_slices`
* `VecDeque::as_mut_slices`
* `VecDeque::swap_remove_front` - (renamed from `swap_front_remove`)
* `VecDeque::swap_remove_back` - (renamed from `swap_back_remove`)
* `Vec::resize`
* `str::slice_mut_unchecked`
* `FileTypeExt`
* `FileTypeExt::{is_block_device, is_char_device, is_fifo, is_socket}`
* `BinaryHeap::from` - `from_vec` deprecated in favor of this
* `BinaryHeap::into_vec` - plus a `Into` impl
* `BinaryHeap::into_sorted_vec`

Deprecated APIs

* `slice::ref_slice`
* `slice::mut_ref_slice`
* `iter::{range_inclusive, RangeInclusive}`
* `std::dynamic_lib`

Closes #27706
Closes #27725
cc #27726 (align not stabilized yet)
Closes #27734
Closes #27737
Closes #27742
Closes #27743
Closes #27772
Closes #27774
Closes #27777
Closes #27781
cc #27788 (a few remaining methods though)
Closes #27790
Closes #27793
Closes #27796
Closes #27810
cc #28147 (not all parts stabilized)
2015-10-25 09:36:32 -07:00
Vadim Petrochenkov
e8ddbba2ed syntax/rustc_front: Simplify VariantData::fields
And use VariantData instead of P<VariantData> in Item_ and Variant_
2015-10-25 18:33:51 +03:00
bors
8d86d1a4e1 Auto merge of #29215 - fhahn:issue-28157-bad-semicolon, r=alexcrichton
PR for #28157. At the moment, `rustc` emits a warning when a bare semicolon is encountered (could also be a fail, but I think this is a backwards incompatible change).

Also I am not sure where the best place for a test for that warning would be. Seems run-pass tests do not check warnings.
2015-10-24 18:37:09 +00:00
Florian Hahn
107b4aa329 Remove bare semicolons 2015-10-24 00:35:44 +02:00
bors
e7b2052f34 Auto merge of #28355 - DiamondLovesYou:pnacl-librustc-trans, r=alexcrichton
r? @alexcrichton
2015-10-22 08:35:38 +00:00
Richard Diamond
e497d4a4e2 Add the PNaCl/JS targets to the backend. 2015-10-21 19:11:44 -05:00
Nick Cameron
401c80dab1 save-analysis: don't recompute crate name 2015-10-21 12:04:48 +13:00
Oliver Schneider
b4e30bd2a3 allow constant evaluation of function calls 2015-10-19 13:13:02 +02:00
Vadim Chugunov
bd0cf1ba13 Don't use GCC's startup objects (crtbegin.o/crtend.o); build and use our own (for now on for -windows-gnu target only).
Since it isn't possible to disable linkage of just GCC startup objects, we now need logic for finding libc installation directory and copying the required startup files (e.g. crt2.o) to rustlib directory.
Bonus change: use the `-nodefaultlibs` flag on Windows, thus paving the way to direct linker invocation.
2015-10-19 00:42:04 -07:00
Vadim Chugunov
1da466253c Revisit implementation of custom unwind resume;
Rather than injecting a local `_Unwind_Resume` into the current translation unit,
just replace `resume` instruction with a direct call the the `eh_unwind_resume` lang item.
This is likely to be more robust in the face of future LLVM changes, and also allows us to delegate
work back to libgcc's `_Unwind_Resume`.
2015-10-18 19:57:28 -07:00
bors
140e793854 Auto merge of #29131 - apasel422:transmute, r=bluss 2015-10-18 12:59:29 +00:00
bors
3f2ad610a8 Auto merge of #28845 - oli-obk:rfc1229, r=pnkfelix
This PR turns statically known erroneous code (e.g. numeric overflow) into a warning and continues normal code-generation to emit the same code that would have been generated without `check_const` detecting that the result can be computed at compile-time.

<del>It's not done yet, as I don't know how to properly emit a lint from trans. I can't seem to extract the real lint level of the item the erroneous expression is in.</del> It's an unconditional warning now.

r? @pnkfelix 

cc @nikomatsakis 

* [RFC 1229 text](https://github.com/rust-lang/rfcs/blob/master/text/1229-compile-time-asserts.md)
* RFC PR: rust-lang/rfcs#1229
* tracking issue: https://github.com/rust-lang/rust/issues/28238
2015-10-18 11:09:03 +00:00
bors
9d7c5e5d3d Auto merge of #29134 - wthrowe:linker-output-ICE, r=pnkfelix
The escaped form isn't pretty, but this should be a very rare error.
Having a general binary-escaping string creation function might be a
good idea, though.

Closes #29122
2015-10-18 08:20:38 +00:00
William Throwe
d12522c25e Don't ICE if the linker prints something non-UTF-8
The escaped form isn't pretty, but this should be a very rare error.
Having a general binary-escaping string creation function might be a
good idea, though.

Closes #29122
2015-10-17 23:58:11 -04:00
Andrew Paseltiner
6031a58a20 Remove some trivial transmutes
`rbml::writer::Encoder::unsafe_clone` had no users across the entire
repo.
2015-10-17 20:29:49 -04:00
Luqman Aden
82f08ea21c trans: Use an isize to count the number of registers so we don't underflow for fn's with > 7 args in debug builds. 2015-10-16 21:10:52 -04:00
bors
beeaea4a70 Auto merge of #28957 - GuillaumeGomez:patch-5, r=Manishearth
cc @nagisa
2015-10-16 09:49:50 +00:00
bors
7ac89d27ad Auto merge of #29040 - nrc:save-defid, r=@nikomatsakis
With this change, normalised node ids correspond to def id indices where they exist, or are made disjoint from def ids otherwise.

r? @nikomatsakis
2015-10-15 12:51:31 +00:00
bors
99dc12472a Auto merge of #27017 - luqmana:25594-sysv-abi-ffi, r=bkoropoff
Fixes #25594.
2015-10-15 05:19:18 +00:00
Luqman Aden
3c31841c72 rust_trans: struct argument over ffi were passed incorrectly in some situations on x86_64. 2015-10-15 01:06:57 -04:00
bors
eafe106ef3 Auto merge of #29012 - tari:issue-28676, r=luqmana
Fixes #28676.

There doesn't seem to be a good way to add a test for this, but I tested the repro in #28676 and confirmed it now yields the correct result.
2015-10-15 00:14:17 +00:00
Nick Cameron
06b5a951a0 save-analysis: normalise node ids before emitting.
With this change, normalised node ids correspond to def id indices where they exist, or are made disjoint from def ids otherwise.
2015-10-15 10:58:12 +13:00
bors
18268bfd9e Auto merge of #29001 - arielb1:normalized-foreign, r=eddyb
This is needed as item types are allowed to be unnormalized.

Fixes an ICE that occurs when foreign function signatures contained
an associated type.

Fixes #28983
2015-10-14 16:12:51 +00:00
bors
b28a550248 Auto merge of #28909 - GuillaumeGomez:patch-3, r=pnkfelix
r? @Manishearth
2015-10-14 13:04:53 +00:00
Guillaume Gomez
4618aada4d Add E0511 error explanation 2015-10-13 17:42:17 +02:00