bors [Wed, 4 Jan 2017 14:26:17 +0000 (14:26 +0000)]
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.
bors [Wed, 4 Jan 2017 06:29:14 +0000 (06:29 +0000)]
Auto merge of #38552 - eddyb:bad-blocks, r=arielb1
Don't leak the compiler's internal representation of scopes in error messages.
Fixes #37884 (actually fixes #27942, which was made worse by #37412) by handling more node types.
Ideally we'd turn the unknown node type situations into ICEs and fix them as they show up in errors.
But we might want to backport this patch so I was less aggressive.
Alex Crichton [Tue, 3 Jan 2017 22:16:05 +0000 (14:16 -0800)]
rustbuild: Update where we look for mtime changes
Recent versions of Cargo lift less output up into the "main" directory, so let's
look more inside the `deps` folder for changes to propagate differences.
Alex Crichton [Tue, 3 Jan 2017 22:07:30 +0000 (14:07 -0800)]
rustbuild: Allow create_sysroot in stage0
Despite what the comment says, we actually need to do this. We're not cleaning
out the stage0 compiler's sysroot, but rather just our own sysroot that we
assembled previously.
rustc: use -Xlinker when specifying an rpath with ',' in it
The `-Wl` option splits its parameters on commas, so if rustc specifies
`-Wl,-rpath,<path>` when `<path>` contains commas, the path gets split up
and the linker gets a partial path and spurious extra parameters.
Gcc/clang support the more verbose `-Xlinker` option to pass options
to the linker directly, so use it for comma-containing paths.
Some would argue that the inconsistency is æsthetically displeasing,
hence this trivial patch. (Note that run-pass/auxiliary/issue13507.rs
has an excuse; it's `use`d in run-pass/issue-13507-2.rs; the matter of
there being two different compile-fail tests with different name
conventions for issue no. 32829 is also neglected here for the sake of
keeping this trivial cleanup patch as trivial as possible for ease of
review.)
Andrew Cann [Sun, 11 Dec 2016 14:30:14 +0000 (22:30 +0800)]
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.
Andrew Cann [Wed, 30 Nov 2016 17:12:03 +0000 (01:12 +0800)]
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.
Andrew Cann [Mon, 28 Nov 2016 10:38:27 +0000 (18:38 +0800)]
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
_ => ...
}
Simon Sapin [Mon, 2 Jan 2017 12:52:20 +0000 (13:52 +0100)]
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`:
Alex Crichton [Mon, 2 Jan 2017 00:14:35 +0000 (16:14 -0800)]
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.
bors [Mon, 2 Jan 2017 18:10:37 +0000 (18:10 +0000)]
Auto merge of #38760 - est31:ignorecfg, r=sanxiyn
Fix pre-cfg_attr notation in comment
Commit aa3b1261b164eeac3e68573bfc698d1ca943fb05 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.
bors [Mon, 2 Jan 2017 13:51:43 +0000 (13:51 +0000)]
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.
Steven Fackler [Sat, 31 Dec 2016 05:18:17 +0000 (21:18 -0800)]
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.
bors [Sun, 1 Jan 2017 20:43:21 +0000 (20:43 +0000)]
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.
est31 [Sun, 1 Jan 2017 19:34:23 +0000 (20:34 +0100)]
Fix pre-cfg_attr notation in comment
Commit aa3b1261b164eeac3e68573bfc698d1ca943fb05 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.
bors [Sun, 1 Jan 2017 11:58:02 +0000 (11:58 +0000)]
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.
bors [Sun, 1 Jan 2017 09:56:18 +0000 (09:56 +0000)]
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:
bors [Sat, 31 Dec 2016 22:08:32 +0000 (22:08 +0000)]
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.
bors [Sat, 31 Dec 2016 18:54:31 +0000 (18:54 +0000)]
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...
Ian Kerins [Sat, 31 Dec 2016 17:01:23 +0000 (12:01 -0500)]
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.