Commit Graph

60527 Commits

Author SHA1 Message Date
Andrew Cann
7946597f75 Refactor is_uninhabited
We now cache the inhabitedness of types in the GlobalCtxt.

Rather than calculating whether a type is visibly uninhabited from a given
NodeId we calculate the full set of NodeIds from which a type is visibly
uninhabited then cache that set. We can then use that to answer queries about
the inhabitedness of a type relative to any given node.
2017-01-03 15:48:29 +08:00
Andrew Cann
9482492ab6 Add drain method to AccumulateVec/ArrayVec
You can now call .drain(..) on SmallVec, AccumulateVec and ArrayVec
2017-01-03 15:48:29 +08:00
Andrew Cann
f8c4d10e95 Fix test I broke 2017-01-03 15:48:29 +08:00
Andrew Cann
56f355c83a Fix build after rebase 2017-01-03 15:48:29 +08:00
Andrew Cann
d2827aa9bc Fix build after rebase 2017-01-03 15:48:29 +08:00
bors
7766b509b3 Auto merge of #38791 - dylanmckay:foreign-item-dc, r=eddyb
Don't warn about dead foreign items if the 'allow(dead_code)' attribute is present

This functionality was missing, and should have existed previously.

Fixes #38780
2017-01-03 07:41:43 +00:00
Andrew Cann
cfc45d52bb Style fix 2017-01-03 15:33:31 +08:00
Andrew Cann
9ba9cd5fd5 Improve error message, fix and add tests.
Changes the non-exhaustive match error message to generate more general
witnesses.
2017-01-03 15:33:31 +08:00
Andrew Cann
9c5e86d0cd More pattern matching for empty types changes
Fix is_uninhabited for enum types. It used to assume that an enums variant's
fields were all private.

Fix MIR generation for irrefutable Variant pattern matches. This allows code
like this to work:

    let x: Result<32, !> = Ok(123);
    let Ok(y) = x;

Carry type information on dummy wildcard patterns. Sometimes we need to expand
these patterns into their constructors and we don't want to be expanding a
TyError into a Constructor::Single.
2017-01-03 15:33:31 +08:00
Andrew Cann
bcdbe942e1 Make is_useful handle empty types properly 2017-01-03 15:31:46 +08:00
Andrew Cann
9ad20442e8 Start enabling empty types in pattern matching.
Remove the assumption at the start of is_useful that any suitably-long array of
wildcard patterns is useful relative the any empty vector. Instead we just
continue to recurse column-wise over the matrix.

This assumption is false in the presence of empty types.
eg. in the simplest case:

let x: ! = ...;
match x {
    // This pattern should not be considered useful by the algorithm
    _   => ...
}
2017-01-03 15:30:19 +08:00
Simon Sapin
3b208d2dac Reduce the size of static data in std_unicode::tables.
`BoolTrie` works well for sets of code points spread out through
most of Unicode’s range, but is uses a lot of space for sets
with few, mostly low, code points.

This switches a few of its instances to a similar but simpler trie
data structure.

 ## Before

`size_of::<BoolTrie>()` is 1552, which is added to
`table.r3.len() * 8 + t.r5.len() + t.r6.len() * 8`:

* `Cc_table`: 1632
* `White_Space_table`: 1656
* `Pattern_White_Space_table`: 1640
* Total: 4928 bytes

 ## After

`size_of::<SmallBoolTrie>()` is 32, which is added to
`t.r1.len() + t.r2.len() * 8`:

* `Cc_table`: 51
* `White_Space_table`: 273
* `Pattern_White_Space_table`: 193
* Total: 517 bytes

 ## Difference

Every Rust program with `std` statically linked should be about 4 KB smaller.
2017-01-03 08:28:58 +01:00
bors
1659d65e03 Auto merge of #38782 - clarcharr:stupid, r=GuillaumeGomez
Reword 'stupid' and 'crazy' in docs.

These terms are not very descriptive and are better reworded as something else.
2017-01-03 02:21:00 +00:00
Jeffrey Seyfried
fd532a1608 Add regression test. 2017-01-03 02:11:32 +00:00
Jeffrey Seyfried
a2fc566d41 Fold all spans in the AST. 2017-01-03 02:00:40 +00:00
Dylan McKay
09178e455e Don't warn about dead foreign items if the 'allow(dead_code)' attribute is present
This functionality was missing, and should have existed previously.

Fixes #38780
2017-01-03 14:54:15 +13:00
Clar Charr
8ffc3e7790 Reword 'stupid' and 'crazy' in docs. 2017-01-02 16:29:19 -05:00
bors
d3a2efa14b Auto merge of #38543 - philipc:unsized-debuginfo, r=michaelwoerister
Fix debuginfo for unsized struct members

The member was given the size of a fat pointer, which caused
llvm to emit DWARF attributes for a 128-bit bitfield.
2017-01-02 20:17:01 +00:00
Alex Crichton
045f8f6929 rustc: Stabilize the proc_macro feature
This commit stabilizes the `proc_macro` and `proc_macro_lib` features in the
compiler to stabilize the "Macros 1.1" feature of the language. Many more
details can be found on the tracking issue, #35900.

Closes #35900
2017-01-02 12:13:30 -08:00
bors
9953e76ca4 Auto merge of #38760 - est31:ignorecfg, r=sanxiyn
Fix pre-cfg_attr notation in comment

Commit aa3b1261b1 has changed notation
in the test from `#[ignore(cfg(ignorecfg))]` to `#[cfg_attr(ignorecfg, ignore)]`,
but missed to change the comment in the accompanying Makefile.
2017-01-02 18:10:37 +00:00
Craig Macomber
7cb20408a4 do not run outter part of benchmarks multimple times to fix issue 20142 2017-01-02 09:43:40 -08:00
bors
df61658c8a Auto merge of #38766 - eddyb:less-fake-hir, r=arielb1
Stop creating fake HIR pattern nodes.

This replaces all the HIR patterns `rustc_const_eval` creates with the more appropriate HAIR equivalent.

The only place left that creates HIR nodes is the "explicit lifetimes in function signature" suggestion, which only creates type nodes while rebuilding the signature, but that is only in case of an error.

cc @arielb1
2017-01-02 13:51:43 +00:00
Simon Sapin
90c7c05ecb Remove some dead Python code.
It was used to measure before/after size in cfaf66c94e.
2017-01-02 12:55:41 +01:00
Seo Sanghyeon
631955888e Avoid rustdoc ICE when an unstable feature is used 2017-01-02 20:32:58 +09:00
Steven Fackler
f2cb47adf9 Add PeekMut::pop
A fairly common workflow is to put a bunch of stuff into a binary heap
and then mutate the top value until its empty. This both makes that a
bit more convenient (no need to save a boolean off and pop after to
avoid borrowck issues), and a bit more efficient since you only shift
once.
2017-01-01 19:18:07 -08:00
bors
07191e2b11 Auto merge of #38548 - GuillaumeGomez:thread_struct_docs, r=frewsxcv
Add missing example for Thread struct

r? @frewsxcv
2017-01-01 22:45:02 +00:00
bors
917e5baae7 Auto merge of #38765 - xen0n:i-dont-like-red-bots-2, r=alexcrichton
rustbuild: fix dist-analysis with full bootstrap disabled

Really fixes #38734, per discussion in #38752 which was solving the underlying problem the wrong way.

This just mirrors the [similar logic] in documentation building as suggested, that just takes the stage1 compiler artifacts instead in case of non-full-bootstrap builds. Actually copying the artifacts around seems to be unnecessary.

r? @alexcrichton

[similar logic]: 7b659cfdbc/src/bootstrap/doc.rs (L140-L144)
2017-01-01 20:43:21 +00:00
Eduard-Mihai Burtescu
c6e130e89b rustc_const_eval: convert constants to Pattern instead of hir::Pat. 2017-01-01 22:17:18 +02:00
Wang Xuerui
24c7340e3e
rustbuild: fix dist-analysis with full bootstrap disabled 2017-01-02 04:12:49 +08:00
est31
2dc2284808 Fix pre-cfg_attr notation in comment
Commit aa3b1261b1 has changed notation
in the test from `#[ignore(cfg(ignorecfg))]` to `#[cfg_attr(ignorecfg, ignore)]`,
but missed to change the comment in the accompanying Makefile.
2017-01-01 20:34:23 +01:00
Eduard-Mihai Burtescu
c001b0940c rustc_const_eval: build Pattern instead of hir::Pat for pretty-printing. 2017-01-01 20:57:21 +02:00
bors
4947adaa8c Auto merge of #38692 - estebank:remove-try-from-pprust, r=petrochenkov
Use `?` instead of `try!` macro in `print::pprust`
2017-01-01 18:42:34 +00:00
bors
7b659cfdbc Auto merge of #38753 - philipc:debuginfo-union, r=petrochenkov
Add pretty printing of unions in debuggers

Fixes #37479
2017-01-01 16:41:29 +00:00
bors
ac5cd3bd43 Auto merge of #38745 - CannedYerins:llvm-code-style, r=rkruppe
Improve naming style in rustllvm.

As per the LLVM style guide, use CamelCase for all locals and classes,
and camelCase for all non-FFI functions.
Also, make names of variables of commonly used types more consistent.

Fixes #38688.

r? @rkruppe
2017-01-01 11:58:02 +00:00
bors
e1279a0b30 Auto merge of #38726 - japaric:sparc64, r=sanxiyn
sparc64-linux support

This is built on top of #38656 and depends on rust-lang/libc#483

Hello world works.

The libc-test test suite passes.

`panic!` doesn't fully work:

```
$ qemu-sparc64-static ./panic
thread 'main' panicked at 'explicit panic', panic.rs:1
note: Run with `RUST_BACKTRACE=1` for a backtrace.
Illegal instruction (core dumped)
```

Backtraces don't work either, probably related to the previous point:

```
$ export RUST_BACKTRACE=1
$ qemu-sparc64-static ./panic
thread 'main' panicked at 'explicit panic', panic.rs:1
stack backtrace:
Illegal instruction (core dumped)
```

r? @alexcrichton

@jakllsch Does panicking / backtraces work on sparc64-netbsd?

cc @glaubitz
2017-01-01 09:56:18 +00:00
Philip Craig
1765a3fd30 Add pretty printing of unions in debuggers
Fixes #37479
2017-01-01 19:34:06 +10:00
bors
e227433dc3 Auto merge of #38711 - programble:doc/slice-iter-method-links, r=brson
Add links to methods on all slice iterator struct docs

In the same style as `std::slice::Iter` to help people find how to create iterators.

r? @steveklabnik
2017-01-01 07:54:04 +00:00
bors
453172bdf9 Auto merge of #38713 - clarcharr:trusted_len, r=brson
TrustedLen for Empty and Once.

These implementations were missing, so, I went ahead and added them.
2017-01-01 05:39:16 +00:00
Seo Sanghyeon
b14785d3d0 Merge branch 'master' into sparc64 2017-01-01 12:40:10 +09:00
bors
08babdb412 Auto merge of #38653 - Mark-Simulacrum:dropless-arena, r=eddyb
Add a DroplessArena and utilize it as a more efficient arena when possible

I will collect performance (probably just `-Ztime-passes`, and more if that shows significant differences, perhaps).

6feba98 also fixes a potential infinite loop if inplace reallocation failed for `TypedArena` (and `DroplessArena` via copied code).

r? @eddyb
2017-01-01 02:39:40 +00:00
bors
07412c8d25 Auto merge of #38736 - xen0n:save-the-save-analysis, r=alexcrichton
rustbuild: save the save analysis

Fixes #38734. ~~call me the nightly firefighter~~

r? @alexcrichton
2017-01-01 00:27:35 +00:00
bors
90c80e0c4d Auto merge of #38708 - alexcrichton:add-distcheck, r=brson
Gate on distcheck on Travis

This commit adds a new entry to the Travis matrix to gate on distcheck, the illustrious test process that has historically taken *8 hours* to complete and also breaks all the time on nightly. By adding it to Travis we should hope to never see nightly breakage (like https://github.com/rust-lang/rust/issues/38690) because of this ever again!

"But wait, surely we can't wait 8 hours for all PRs!" you might be thinking, and you are indeed correct. The distcheck added here is much more optimized for speed than the old buildbot instances for a number of reasons:

* We're not building *two host compilers* beforehand. The current distcheck bot does a cross for i686 Linux and x86_64 Linux before it actually runs distcheck, building 6 compilers and LLVM twice. None of this is done in parallel as well (e.g. `-j1`). Not doing any of this work will be a huge win!
* We're using sccache to compile LLVM, so it should be much faster. Distcheck on the bots didn't cache LLVM well and rebuilt it every time.

All in all, this version of "distcheck" should be exactly like other matrix entries that run tests except that it's a *little* slower to start as it has to create the source tarball then rebuild the build system in the distcheck dir. Overall this should be well under the 2 hours that Android is currently taking anyway.

Closes https://github.com/rust-lang/rust/issues/38691
2016-12-31 22:08:32 +00:00
bors
38bd207626 Auto merge of #38482 - est31:i128, r=eddyb
i128 and u128 support

Brings i128 and u128 support to nightly rust, behind a feature flag. The goal of this PR is to do the bulk of the work for 128 bit integer support. Smaller but just as tricky features needed for stabilisation like 128 bit enum discriminants are left for future PRs.

Rebased version of  #37900, which in turn was a rebase + improvement of #35954 . Sadly I couldn't reopen #37900 due to github. There goes my premium position in the homu queue...

[plugin-breaking-change]

cc #35118 (tracking issue)
2016-12-31 18:54:31 +00:00
Mark Simulacrum
1676bec5bf Utilize new in_arena method instead of hashing for Lifting interned items 2016-12-31 11:48:48 -07:00
Mark Simulacrum
0e43b378c1 Split CtxtArenas into GlobalArenas and CtxtInterners.
CtxtInterners contains a single DroplessArena, while GlobalArenas
contains the TypedArenas still required for the remaining
Drop-containing types.
2016-12-31 11:48:48 -07:00
Ian Kerins
e6f97114ca Improve naming style in rustllvm.
As per the LLVM style guide, use CamelCase for all locals and classes,
and camelCase for all non-FFI functions.
Also, make names of variables of commonly used types more consistent.

Fixes #38688.
2016-12-31 13:20:30 -05:00
est31
29e01af6a6 Fix iabs and add some more tests 2016-12-31 18:19:06 +01:00
bors
6185c54452 Auto merge of #38737 - keeperofdakeys:proc-macro-derive-Dec-16, r=jseyfried
Fix panic when using a macros 1.1 custom derive on a struct containing a macro invocation

Fixes #38706

r? @jseyfried
2016-12-31 16:49:27 +00:00
Mark Simulacrum
bb1959f416 Fix TypedArena infinitely looping when inplace reallocation fails. 2016-12-31 08:38:56 -07:00
Mark Simulacrum
9e963b9b2f Add a non type-specific arena.
It relies on the underlying types not having special Drop behavior.
2016-12-31 08:38:55 -07:00