]> git.lizzy.rs Git - rust.git/log
rust.git
6 years agoAuto merge of #45075 - alexcrichton:inline-less, r=michaelwoerister
bors [Mon, 9 Oct 2017 14:00:12 +0000 (14:00 +0000)]
Auto merge of #45075 - alexcrichton:inline-less, r=michaelwoerister

rustc: Don't inline in CGUs at -O0

This commit tweaks the behavior of inlining functions into multiple codegen
units when rustc is compiling in debug mode. Today rustc will unconditionally
treat `#[inline]` functions by translating them into all codegen units that
they're needed within, marking the linkage as `internal`. This commit changes
the behavior so that in debug mode (compiling at `-O0`) rustc will instead only
translate `#[inline]` functions into *one* codegen unit, forcing all other
codegen units to reference this one copy.

The goal here is to improve debug compile times by reducing the amount of
translation that happens on behalf of multiple codegen units. It was discovered
in #44941 that increasing the number of codegen units had the adverse side
effect of increasing the overal work done by the compiler, and the suspicion
here was that the compiler was inlining, translating, and codegen'ing more
functions with more codegen units (for example `String` would be basically
inlined into all codegen units if used). The strategy in this commit should
reduce the cost of `#[inline]` functions to being equivalent to one codegen
unit, which is only translating and codegen'ing inline functions once.

Collected [data] shows that this does indeed improve the situation from [before]
as the overall cpu-clock time increases at a much slower rate and when pinned to
one core rustc does not consume significantly more wall clock time than with one
codegen unit.

One caveat of this commit is that the symbol names for inlined functions that
are only translated once needed some slight tweaking. These inline functions
could be translated into multiple crates and we need to make sure the symbols
don't collideA so the crate name/disambiguator is mixed in to the symbol name
hash in these situations.

[data]: https://github.com/rust-lang/rust/issues/44941#issuecomment-334880911
[before]: https://github.com/rust-lang/rust/issues/44941#issuecomment-334583384

6 years agoAuto merge of #45064 - alexcrichton:reduce-codegen-units, r=michaelwoerister
bors [Mon, 9 Oct 2017 08:49:38 +0000 (08:49 +0000)]
Auto merge of #45064 - alexcrichton:reduce-codegen-units, r=michaelwoerister

rustc: Reduce default CGUs to 16

Rationale explained in the included comment as well as #44941

6 years agoAuto merge of #45041 - est31:master, r=alexcrichton
bors [Mon, 9 Oct 2017 04:59:02 +0000 (04:59 +0000)]
Auto merge of #45041 - est31:master, r=alexcrichton

Remove support for the PNaCl target (le32-unknown-nacl)

This removes support for the `le32-unknown-nacl` target which is currently supported by rustc on tier 3. Despite the "nacl" in the name, the target doesn't output native code (x86, ARM, MIPS), instead it outputs binaries in the PNaCl format.

There are two reasons for the removal:

* Google [has announced](https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html) deprecation of the PNaCl format. The suggestion is to migrate to wasm. Happens we already have a wasm backend!
* Our PNaCl LLVM backend is provided by the fastcomp patch set that the LLVM fork used by rustc contains in addition to vanilla LLVM (`src/llvm/lib/Target/JSBackend/NaCl`). Upstream LLVM doesn't have PNaCl support. Removing PNaCl support will enable us to move away from fastcomp (#44006) and have a lighter set of patches on top of upstream LLVM inside our LLVM fork. This will help distribution packagers of Rust.

Fixes #42420

6 years agoAuto merge of #45035 - alexcrichton:no-empty, r=michaelwoerister
bors [Mon, 9 Oct 2017 02:42:30 +0000 (02:42 +0000)]
Auto merge of #45035 - alexcrichton:no-empty, r=michaelwoerister

rustc: Don't create empty codegen units

This'll end up just creating a bunch of object files that otherwise wouldn't
exist, so skip that extra work if possible.

6 years agoAuto merge of #45033 - eddyb:capture-me-not, r=nikomatsakis
bors [Mon, 9 Oct 2017 00:18:51 +0000 (00:18 +0000)]
Auto merge of #45033 - eddyb:capture-me-not, r=nikomatsakis

rustc_trans: do not set NoCapture for anonymous lifetime &T arguments.

This was both unsound (due to lifetime elision & unsafe code) and dead code (we erase lifetimes).

r? @nikomatsakis

6 years agoAuto merge of #45030 - raggi:zircon-handle-t, r=alexcrichton
bors [Sun, 8 Oct 2017 20:36:57 +0000 (20:36 +0000)]
Auto merge of #45030 - raggi:zircon-handle-t, r=alexcrichton

zircon: the type of zx_handle_t is now unsigned

This is a kernel ABI change that landed today. I noticed some other ABI
issues and have left a note to cleanup once they are better defined.

6 years agoAuto merge of #45016 - pnkfelix:mir-borrowck-gather-and-signal-move-errors, r=nikomat...
bors [Sun, 8 Oct 2017 18:12:26 +0000 (18:12 +0000)]
Auto merge of #45016 - pnkfelix:mir-borrowck-gather-and-signal-move-errors, r=nikomatsakis

MIR-borrowck: gather and signal any move errors

When building up the `MoveData` structure for a given MIR, also accumulate any erroneous actions, and then report all of those errors when the construction is complete.

This PR adds a host of move-related error constructor methods to `trait BorrowckErrors`. I think I got the notes right; but we should plan to audit all of the notes before turning MIR-borrowck on by default.

Fix #44830

6 years agoAuto merge of #45020 - MaloJaffre:needs-test, r=alexcrichton
bors [Sun, 8 Oct 2017 14:44:12 +0000 (14:44 +0000)]
Auto merge of #45020 - MaloJaffre:needs-test, r=alexcrichton

Fix some E-needstest issues.

Also ignore `attr-on-trait` test on stage-1 to keep `./x.py test --stage 1` successful.

Fixes #30355.
Fixes #33241.
Fixes #36400.
Fixes #37887.
Fixes #44578.

6 years agoAuto merge of #45012 - Gankro:noalias, r=arielb1
bors [Sun, 8 Oct 2017 10:43:45 +0000 (10:43 +0000)]
Auto merge of #45012 - Gankro:noalias, r=arielb1

Add -Zmutable-noalias flag

We disabled noalias on mutable references a long time ago when it was clear that llvm was incorrectly handling this in relation to unwinding edges.

Since then, a few things have happened:

* llvm has cleaned up a bunch of the issues (I'm told)
* we've added a nounwind codegen option

As such, I would like to add this -Z flag so that we can evaluate if the codegen bugs still exist, and if this significantly affects the codegen of different projects, with an eye towards permanently re-enabling it (or at least making it a stable option).

6 years agoAuto merge of #45001 - bgermann:master, r=alexcrichton
bors [Sun, 8 Oct 2017 08:21:24 +0000 (08:21 +0000)]
Auto merge of #45001 - bgermann:master, r=alexcrichton

Add builder for Solaris and merge it with Fuchsia's builder

The new Solaris builder can be used to build rust-std.

The dilos illumos distribution was chosen, because illumos is free software
as opposed to Oracle Solaris and dilos is the only illumos distribution that
supports x86_64 and sparcv9 at the same level.

6 years agoAuto merge of #45100 - kennytm:rollup, r=kennytm
bors [Sun, 8 Oct 2017 05:55:13 +0000 (05:55 +0000)]
Auto merge of #45100 - kennytm:rollup, r=kennytm

Rollup of 10 pull requests

- Successful merges: #45018, #45042, #45052, #45053, #45058, #45060, #45081, #45083, #45090, #45094
- Failed merges:

6 years agoRollup merge of #45094 - japaric:strict-align, r=alexcrichton
kennytm [Sun, 8 Oct 2017 05:39:06 +0000 (13:39 +0800)]
Rollup merge of #45094 - japaric:strict-align, r=alexcrichton

enable strict alignment (+strict-align) on ARMv6

As discovered in #44538 ARMv6 devices may or may not support unaligned memory accesses. ARMv6
Linux *seems* to have no problem with unaligned accesses but this is because the kernel is stepping
in to fix each unaligned memory access -- this incurs in a performance penalty.

This commit enforces aligned memory accesses on all our in-tree ARM targets that may be used with
ARMv6 devices. This should improve performance of Rust programs on ARMv6 devices. For the record,
clang also applies this attribute when targeting ARMv6 devices that are not running Darwin or
NetBSD.

closes #44538
r? @alexcrichton

6 years agoRollup merge of #45090 - rust-lang:petrochenkov-patch-1, r=alexcrichton
kennytm [Sun, 8 Oct 2017 05:39:05 +0000 (13:39 +0800)]
Rollup merge of #45090 - rust-lang:petrochenkov-patch-1, r=alexcrichton

Document that `-C ar=PATH` doesn't do anything

Are there any plans to use an external archiver in the future?
IIRC, it was used before, but its use was replaced with LLVM's built-in archive management machinery. I can't found a relevant PR though. EDIT: Found it - https://github.com/rust-lang/rust/pull/26926!

The `-C` option is stable so it still can't be removed right away even if there are no plans to use it (but maybe it can be deprecated?).
Target specifications have a field for archiver as well, which is unused too (these ones are unstable, so I guess it can be removed).

r? @alexcrichton

6 years agoRollup merge of #45083 - fhartwig:slice-read-to-end, r=bluss
kennytm [Sun, 8 Oct 2017 05:39:04 +0000 (13:39 +0800)]
Rollup merge of #45083 - fhartwig:slice-read-to-end, r=bluss

Add read_to_end implementation to &[u8]'s Read impl

The default impl for read_to_end does a bunch of bookkeeping
that isn't necessary for slices and is about 4 times slower
on my machine.

The following benchmark takes about 30 ns before this change and about 7 ns after:

```
#[bench]
fn bench_read_std(b: &mut Bencher) {
    let data = vec![0u8; 100];
    let mut v = Vec::with_capacity(200);
    b.iter(|| {
        let mut s = data.as_slice();
        v.clear();
        s.read_to_end(&mut v).unwrap();
    });
}
```

This solves the easy part of  https://github.com/rust-lang/rust/issues/44819 (I think extending this to `Take<&[u8]> `would require specialization)

6 years agoRollup merge of #45081 - tamird:fmt-cleanup, r=alexcrichton
kennytm [Sun, 8 Oct 2017 05:39:03 +0000 (13:39 +0800)]
Rollup merge of #45081 - tamird:fmt-cleanup, r=alexcrichton

fmt: misc cleanup

6 years agoRollup merge of #45060 - topecongiro:semi-in-local-span, r=petrochenkov
kennytm [Sun, 8 Oct 2017 05:39:02 +0000 (13:39 +0800)]
Rollup merge of #45060 - topecongiro:semi-in-local-span, r=petrochenkov

Add a semicolon to span for ast::Local

6 years agoRollup merge of #45058 - hunteke:fix_rustc_private_typo_2017Oct, r=shepmaster
kennytm [Sun, 8 Oct 2017 05:39:01 +0000 (13:39 +0800)]
Rollup merge of #45058 - hunteke:fix_rustc_private_typo_2017Oct, r=shepmaster

Fix typo, per #45057.

This looks like a simple string -- one character -- fix.  Given that I'm currently running low on battery, I have not actually compiled and tested this.  But I am fully confident this passes muster.  If not, I'll be maintainer-educated, yes?  ;-)

6 years agoRollup merge of #45053 - GuillaumeGomez:atomicbool-doc, r=QuietMisdreavus
kennytm [Sun, 8 Oct 2017 05:39:00 +0000 (13:39 +0800)]
Rollup merge of #45053 - GuillaumeGomez:atomicbool-doc, r=QuietMisdreavus

Add missing links for AtomicBool

r? @rust-lang/docs

6 years agoRollup merge of #45052 - steveklabnik:gh44105, r=dtolnay
kennytm [Sun, 8 Oct 2017 05:38:59 +0000 (13:38 +0800)]
Rollup merge of #45052 - steveklabnik:gh44105, r=dtolnay

Modify Rc/Arc language around mutability

There are a few exceptions to the rule that Arc/Rc are immutable. Rather
than dig into the details, add "generally" to hint at this difference,
as it's kind of a distraction at this point in the docs.

Additionally, Arc's docs were slightly different here generally, so add
in both the existing language and the exception.

Fixes #44105

6 years agoRollup merge of #45042 - brennie:brennie/fmt-trait-summaries, r=steveklabnik
kennytm [Sun, 8 Oct 2017 05:38:58 +0000 (13:38 +0800)]
Rollup merge of #45042 - brennie:brennie/fmt-trait-summaries, r=steveklabnik

Update trait summaries for std::fmt

This patch is part of #29355.

r? @steveklabnik

6 years agoRollup merge of #45018 - michaelwoerister:fix-dep-node-debug-recursion, r=eddyb
kennytm [Sun, 8 Oct 2017 05:38:57 +0000 (13:38 +0800)]
Rollup merge of #45018 - michaelwoerister:fix-dep-node-debug-recursion, r=eddyb

incr.comp.: Fix infinite recursion in Debug implementation of DepNode

Small bug fix. Depends on #44901 to land first.

6 years agoAuto merge of #44983 - vitiral:dirty_clean_groups, r=michaelwoerister
bors [Sun, 8 Oct 2017 03:02:35 +0000 (03:02 +0000)]
Auto merge of #44983 - vitiral:dirty_clean_groups, r=michaelwoerister

groundwork for rustc_clean/dirty improvements

This is a WIP PR that needs mentoring from @michaelwoerister.

There are several TODOs but no outstanding questions (except for the main one -- **is this the right approach?**)

This is the plumbing for supporing groups in `rustc_clean(labels="...")`, as well as supporting an `except="..."` which will remove the excepted labels in the "clean" check and then assert that they are dirty (this is still TODO).

See the code TODO's and example comments for a rough design.

I'd like to know if this is the design you would like to do, and then I can go about actually filling out the groups and implementing the remaining logic.

6 years agorustc: Don't inline in CGUs at -O0
Alex Crichton [Fri, 6 Oct 2017 21:59:33 +0000 (14:59 -0700)]
rustc: Don't inline in CGUs at -O0

This commit tweaks the behavior of inlining functions into multiple codegen
units when rustc is compiling in debug mode. Today rustc will unconditionally
treat `#[inline]` functions by translating them into all codegen units that
they're needed within, marking the linkage as `internal`. This commit changes
the behavior so that in debug mode (compiling at `-O0`) rustc will instead only
translate `#[inline]` functions into *one* codegen unit, forcing all other
codegen units to reference this one copy.

The goal here is to improve debug compile times by reducing the amount of
translation that happens on behalf of multiple codegen units. It was discovered
in #44941 that increasing the number of codegen units had the adverse side
effect of increasing the overal work done by the compiler, and the suspicion
here was that the compiler was inlining, translating, and codegen'ing more
functions with more codegen units (for example `String` would be basically
inlined into all codegen units if used). The strategy in this commit should
reduce the cost of `#[inline]` functions to being equivalent to one codegen
unit, which is only translating and codegen'ing inline functions once.

Collected [data] shows that this does indeed improve the situation from [before]
as the overall cpu-clock time increases at a much slower rate and when pinned to
one core rustc does not consume significantly more wall clock time than with one
codegen unit.

One caveat of this commit is that the symbol names for inlined functions that
are only translated once needed some slight tweaking. These inline functions
could be translated into multiple crates and we need to make sure the symbols
don't collideA so the crate name/disambiguator is mixed in to the symbol name
hash in these situations.

[data]: https://github.com/rust-lang/rust/issues/44941#issuecomment-334880911
[before]: https://github.com/rust-lang/rust/issues/44941#issuecomment-334583384

6 years agoAuto merge of #44978 - jamesmunns:armv5te-os-atomics, r=alexcrichton
bors [Sun, 8 Oct 2017 00:40:58 +0000 (00:40 +0000)]
Auto merge of #44978 - jamesmunns:armv5te-os-atomics, r=alexcrichton

Allow atomic operations up to 32 bits

The ARMv5te platform does not have instruction-level support for atomics, however the kernel provides [user space helpers] which can be used to perform atomic operations. When linked with `libgcc`, the atomic symbols needed by Rust will be provided, rather than CPU level intrinsics.

[user space helpers]: https://www.kernel.org/doc/Documentation/arm/kernel_user_helpers.txt

32-bit versions of these kernel level helpers were introduced in Linux Kernel 2.6.12, and 64-bit version of these kernel level helpers were introduced in Linux Kernel 3.1. I have selected 32 bit versions as std currently only requires Linux version 2.6.18 and above as far as I am aware.

As this target is specifically linux and gnueabi, it is reasonable to assume the Linux Kernel and libc will be available for the target. There is a large performance penalty, as we are not using CPU level intrinsics, however this penalty is likely preferable to not having the target at all.

I have used this change in a custom target (along with xargo) to build std, as well as a number of higher level crates.

## Additional information

For reference, here is what a a code snippet decompiles to:

```rust
use std::sync::atomic::{AtomicIsize, Ordering};

#[no_mangle]
pub extern fn foo(a: &AtomicIsize) -> isize {

    a.fetch_add(1, Ordering::SeqCst)
}
```

```
Disassembly of section .text.foo:

00000000 <foo>:
   0: e92d4800  push {fp, lr}
   4: e3a01001  mov r1, #1
   8: ebfffffe  bl 0 <__sync_fetch_and_add_4>
   c: e8bd8800  pop {fp, pc}
```

Which in turn is provided by `libgcc.a`, which has code which looks like this:

```
Disassembly of section .text:

00000000 <__sync_fetch_and_add_4>:
       0: e92d40f8  push {r3, r4, r5, r6, r7, lr}
       4: e1a05000  mov r5, r0
       8: e1a07001  mov r7, r1
       c: e59f6028  ldr r6, [pc, #40] ; 3c <__sync_fetch_and_add_4+0x3c>
      10: e5954000  ldr r4, [r5]
      14: e1a02005  mov r2, r5
      18: e1a00004  mov r0, r4
      1c: e0841007  add r1, r4, r7
      20: e1a0e00f  mov lr, pc
      24: e12fff16  bx r6
      28: e3500000  cmp r0, #0
      2c: 1afffff7  bne 10 <__sync_fetch_and_add_4+0x10>
      30: e1a00004  mov r0, r4
      34: e8bd40f8  pop {r3, r4, r5, r6, r7, lr}
      38: e12fff1e  bx lr
      3c: ffff0fc0  .word 0xffff0fc0
```

Where you can see the reference to `0xffff0fc0`, which is provided by the [user space helpers].

6 years agoAuto merge of #44841 - alexcrichton:thinlto, r=michaelwoerister
bors [Sat, 7 Oct 2017 22:18:20 +0000 (22:18 +0000)]
Auto merge of #44841 - alexcrichton:thinlto, r=michaelwoerister

rustc: Implement ThinLTO

This commit is an implementation of LLVM's ThinLTO for consumption in rustc
itself. Currently today LTO works by merging all relevant LLVM modules into one
and then running optimization passes. "Thin" LTO operates differently by having
more sharded work and allowing parallelism opportunities between optimizing
codegen units. Further down the road Thin LTO also allows *incremental* LTO
which should enable even faster release builds without compromising on the
performance we have today.

This commit uses a `-Z thinlto` flag to gate whether ThinLTO is enabled. It then
also implements two forms of ThinLTO:

* In one mode we'll *only* perform ThinLTO over the codegen units produced in a
  single compilation. That is, we won't load upstream rlibs, but we'll instead
  just perform ThinLTO amongst all codegen units produced by the compiler for
  the local crate. This is intended to emulate a desired end point where we have
  codegen units turned on by default for all crates and ThinLTO allows us to do
  this without performance loss.

* In anther mode, like full LTO today, we'll optimize all upstream dependencies
  in "thin" mode. Unlike today, however, this LTO step is fully parallelized so
  should finish much more quickly.

There's a good bit of comments about what the implementation is doing and where
it came from, but the tl;dr; is that currently most of the support here is
copied from upstream LLVM. This code duplication is done for a number of
reasons:

* Controlling parallelism means we can use the existing jobserver support to
  avoid overloading machines.
* We will likely want a slightly different form of incremental caching which
  integrates with our own incremental strategy, but this is yet to be
  determined.
* This buys us some flexibility about when/where we run ThinLTO, as well as
  having it tailored to fit our needs for the time being.
* Finally this allows us to reuse some artifacts such as our `TargetMachine`
  creation, where all our options we used today aren't necessarily supported by
  upstream LLVM yet.

My hope is that we can get some experience with this copy/paste in tree and then
eventually upstream some work to LLVM itself to avoid the duplication while
still ensuring our needs are met. Otherwise I fear that maintaining these
bindings may be quite costly over the years with LLVM updates!

6 years agoAdd read_to_end implementation to &[u8]'s Read impl
Florian Hartwig [Sat, 7 Oct 2017 12:49:42 +0000 (14:49 +0200)]
Add read_to_end implementation to &[u8]'s Read impl

The default impl for read_to_end does a bunch of bookkeeping
that isn't necessary for slices and is about 4 times slower
on my machine.

6 years agoAuto merge of #44892 - GuillaumeGomez:fnty-args-rustdoc, r=eddyb
bors [Sat, 7 Oct 2017 19:39:31 +0000 (19:39 +0000)]
Auto merge of #44892 - GuillaumeGomez:fnty-args-rustdoc, r=eddyb

Fnty args rustdoc

Fixes #44570.

cc @QuietMisdreavus
cc @rust-lang/dev-tools

Considering the impact on the `hir` libs, I'll put @eddyb as reviewer.

r? @eddyb

6 years agoenable strict alignment (+strict-align) on ARMv6
Jorge Aparicio [Sat, 7 Oct 2017 18:48:25 +0000 (20:48 +0200)]
enable strict alignment (+strict-align) on ARMv6

As discovered in #44538 ARMv6 devices may or may not support unaligned memory accesses. ARMv6
Linux *seems* to have no problem with unaligned accesses but this is because the kernel is stepping
in to fix each unaligned memory access -- this incurs in a performance penalty.

This commit enforces aligned memory accesses on all our in-tree ARM targets that may be used with
ARMv6 devices. This should improve performance of Rust programs on ARMv6 devices. For the record,
clang also applies this attribute when targeting ARMv6 devices that are not running Darwin or
NetBSD.

6 years agoDocument that `-C ar=PATH` doesn't do anything
Vadim Petrochenkov [Sat, 7 Oct 2017 16:26:02 +0000 (19:26 +0300)]
Document that `-C ar=PATH` doesn't do anything

6 years agoFix invalid rustdoc rendering for FnTy args
Guillaume Gomez [Tue, 26 Sep 2017 22:43:37 +0000 (00:43 +0200)]
Fix invalid rustdoc rendering for FnTy args

6 years agorustc: Implement ThinLTO
Alex Crichton [Sun, 23 Jul 2017 15:14:38 +0000 (08:14 -0700)]
rustc: Implement ThinLTO

This commit is an implementation of LLVM's ThinLTO for consumption in rustc
itself. Currently today LTO works by merging all relevant LLVM modules into one
and then running optimization passes. "Thin" LTO operates differently by having
more sharded work and allowing parallelism opportunities between optimizing
codegen units. Further down the road Thin LTO also allows *incremental* LTO
which should enable even faster release builds without compromising on the
performance we have today.

This commit uses a `-Z thinlto` flag to gate whether ThinLTO is enabled. It then
also implements two forms of ThinLTO:

* In one mode we'll *only* perform ThinLTO over the codegen units produced in a
  single compilation. That is, we won't load upstream rlibs, but we'll instead
  just perform ThinLTO amongst all codegen units produced by the compiler for
  the local crate. This is intended to emulate a desired end point where we have
  codegen units turned on by default for all crates and ThinLTO allows us to do
  this without performance loss.

* In anther mode, like full LTO today, we'll optimize all upstream dependencies
  in "thin" mode. Unlike today, however, this LTO step is fully parallelized so
  should finish much more quickly.

There's a good bit of comments about what the implementation is doing and where
it came from, but the tl;dr; is that currently most of the support here is
copied from upstream LLVM. This code duplication is done for a number of
reasons:

* Controlling parallelism means we can use the existing jobserver support to
  avoid overloading machines.
* We will likely want a slightly different form of incremental caching which
  integrates with our own incremental strategy, but this is yet to be
  determined.
* This buys us some flexibility about when/where we run ThinLTO, as well as
  having it tailored to fit our needs for the time being.
* Finally this allows us to reuse some artifacts such as our `TargetMachine`
  creation, where all our options we used today aren't necessarily supported by
  upstream LLVM yet.

My hope is that we can get some experience with this copy/paste in tree and then
eventually upstream some work to LLVM itself to avoid the duplication while
still ensuring our needs are met. Otherwise I fear that maintaining these
bindings may be quite costly over the years with LLVM updates!

6 years agoAuto merge of #44913 - leavehouse:patch-1, r=BurntSushi
bors [Sat, 7 Oct 2017 12:13:28 +0000 (12:13 +0000)]
Auto merge of #44913 - leavehouse:patch-1, r=BurntSushi

Fix TcpStream::local_addr docs example code

The local address's port is not 8080 in this example, that's the remote peer address port. On my machine, the local address is different every time, so I've changed `assert_eq` to only test the IP address

6 years agoAdd names to BareFnTy
Guillaume Gomez [Tue, 26 Sep 2017 22:43:22 +0000 (00:43 +0200)]
Add names to BareFnTy

6 years agofmt: remove misleading comment fragment
Tamir Duberstein [Sat, 7 Oct 2017 09:48:58 +0000 (05:48 -0400)]
fmt: remove misleading comment fragment

6 years agofmt: DRY
Tamir Duberstein [Sat, 7 Oct 2017 09:31:21 +0000 (05:31 -0400)]
fmt: DRY

6 years agofmt: remove unnecessary lint suppression
Tamir Duberstein [Sat, 7 Oct 2017 09:32:31 +0000 (05:32 -0400)]
fmt: remove unnecessary lint suppression

6 years agoAuto merge of #44860 - kennytm:fix-44731, r=alexcrichton
bors [Sat, 7 Oct 2017 09:36:12 +0000 (09:36 +0000)]
Auto merge of #44860 - kennytm:fix-44731, r=alexcrichton

Fix issue #44731.

Also excludes `impl Trait` from everybody_loops if it appears in the path.

Fixes #44731.

6 years agoAuto merge of #44515 - tamird:clean-shims, r=alexcrichton
bors [Sat, 7 Oct 2017 05:32:49 +0000 (05:32 +0000)]
Auto merge of #44515 - tamird:clean-shims, r=alexcrichton

{compiler-builtins,libc} shim cleanup

~~Depends on https://github.com/rust-lang/libc/pull/764; opening early for feedback.~~ r? @alexcrichton

6 years agoTrim and document compiler-builtins shim
Tamir Duberstein [Tue, 12 Sep 2017 00:15:10 +0000 (20:15 -0400)]
Trim and document compiler-builtins shim

6 years agoAuto merge of #44614 - tschottdorf:pat_adjustments, r=nikomatsakis
bors [Sat, 7 Oct 2017 00:28:42 +0000 (00:28 +0000)]
Auto merge of #44614 - tschottdorf:pat_adjustments, r=nikomatsakis

implement pattern-binding-modes RFC

See the [RFC] and [tracking issue].

[tracking issue]: #42640
[RFC]: https://github.com/rust-lang/rfcs/blob/491e0af/text/2005-match-ergonomics.md

6 years agoimplement pattern-binding-modes RFC
Tobias Schottdorf [Fri, 6 Oct 2017 20:30:23 +0000 (16:30 -0400)]
implement pattern-binding-modes RFC

See the [RFC] and [tracking issue].

[tracking issue]: https://github.com/rust-lang/rust/issues/42640
[RFC]: https://github.com/rust-lang/rfcs/blob/491e0af/text/2005-match-ergonomics.md

6 years agoAuto merge of #43604 - abonander:proc_macro_span_api, r=jseyfried
bors [Fri, 6 Oct 2017 18:52:30 +0000 (18:52 +0000)]
Auto merge of #43604 - abonander:proc_macro_span_api, r=jseyfried

Improvements to `proc_macro::Span` API

Motivation: https://internals.rust-lang.org/t/better-panic-location-reporting-for-unwrap-and-friends/5042/12?u=logician

TODO:
- [x] Bikeshedding/complete API
- [x] Implement tests/verify return values

cc @jseyfried @nrc

6 years agoAuto merge of #45065 - arielb1:not-correct, r=nikomatsakis
bors [Fri, 6 Oct 2017 15:30:32 +0000 (15:30 +0000)]
Auto merge of #45065 - arielb1:not-correct, r=nikomatsakis

fix logic error in #44269's `prune_cache_value_obligations`

We want to retain obligations that *contain* inference variables, not
obligations that *don't contain* them, in order to fix #43132. Because
of surrounding changes to inference, the ICE doesn't occur in its
original case, but I believe it could still be made to occur on master.

Maybe I should try to write a new test case? Certainly not right now
(I'm mainly trying to get us a beta that we can ship) but maybe before
we land this PR on nightly?

This seems to cause a 10% performance regression in my imprecise
attempt to benchmark item-body checking for #43613, but it's better to
be slow and right than fast and wrong. If we want to recover that, I
think we can change the constrained-type-parameter code to actually
give a list of projections that are important for resolving inference
variables and filter everything else out.

6 years agofix logic error in #44269's `prune_cache_value_obligations`
Ariel Ben-Yehuda [Fri, 6 Oct 2017 14:12:24 +0000 (17:12 +0300)]
fix logic error in #44269's `prune_cache_value_obligations`

We want to retain obligations that *contain* inference variables, not
obligations that *don't contain* them, in order to fix #43132. Because
of surrounding changes to inference, the ICE doesn't occur in its
original case, but I believe it could still be made to occur on master.

Maybe I should try to write a new test case? Certainly not right now
(I'm mainly trying to get us a beta that we can ship) but maybe before
we land this PR on nightly?

This seems to cause a 10% performance regression in my imprecise
attempt to benchmark item-body checking for #43613, but it's better to
be slow and right than fast and wrong. If we want to recover that, I
think we can change the constrained-type-parameter code to actually
give a list of projections that are important for resolving inference
variables and filter everything else out.

6 years agorustc: Reduce default CGUs to 16
Alex Crichton [Fri, 6 Oct 2017 14:06:30 +0000 (07:06 -0700)]
rustc: Reduce default CGUs to 16

Rationale explained in the included comment as well as #44941

6 years agoAuto merge of #44734 - mchlrhw:wip/hashmap-entry-and-then, r=BurntSushi
bors [Fri, 6 Oct 2017 12:51:11 +0000 (12:51 +0000)]
Auto merge of #44734 - mchlrhw:wip/hashmap-entry-and-then, r=BurntSushi

Implement `and_modify` on `Entry`

## Motivation

`Entry`s are useful for allowing access to existing values in a map while also allowing default values to be inserted for absent keys. The existing API is similar to that of `Option`, where `or` and `or_with` can be used if the option variant is `None`.

The `Entry` API is, however, missing an equivalent of `Option`'s `and_then` method. If it were present it would be possible to modify an existing entry before calling `or_insert` without resorting to matching on the entry variant.

Tracking issue: https://github.com/rust-lang/rust/issues/44733.

6 years agoAuto merge of #44965 - oconnor663:res_init_glibc, r=dtolnay
bors [Fri, 6 Oct 2017 10:20:14 +0000 (10:20 +0000)]
Auto merge of #44965 - oconnor663:res_init_glibc, r=dtolnay

replace libc::res_init with res_init_if_glibc_before_2_26

The previous workaround for gibc's res_init bug is not thread-safe on
other implementations of libc, and it can cause crashes. Use a runtime
check to make sure we only call res_init when we need to, which is also
when it's safe. See https://github.com/rust-lang/rust/issues/43592.

~This PR is returning an InvalidData IO error if the glibc version string fails to parse. We could also have treated that case as "not glibc", and gotten rid of the idea that these functions could return an error. (Though I'm not a huge fan of ignoring error returns from `res_init` in any case.) Do other folks agree with these design choices?~

I'm pretty new to hacking on libstd. Is there an easy way to build a toy rust program against my changes to test this, other than doing an entire `sudo make install` on my system? What's the usual workflow?

6 years agoAdd a semicolon to span for ast::Local
Seiichi Uchida [Fri, 6 Oct 2017 10:16:16 +0000 (19:16 +0900)]
Add a semicolon to span for ast::Local

6 years agoImplement `entry_and_modify`
mchlrhw [Wed, 20 Sep 2017 15:02:10 +0000 (16:02 +0100)]
Implement `entry_and_modify`

6 years agoAuto merge of #44818 - petrochenkov:astymac2, r=jseyfried
bors [Fri, 6 Oct 2017 05:37:43 +0000 (05:37 +0000)]
Auto merge of #44818 - petrochenkov:astymac2, r=jseyfried

Improve resolution of associated types in declarative macros 2.0

Make various identifier comparisons for associated types (and sometimes other associated items) hygienic.
Now declarative macros 2.0 can use `Self::AssocTy`, `TyParam::AssocTy`, `Trait<AssocTy = u8>` where `AssocTy` is an associated type of a trait `Trait` visible from the macro. Also, `Trait` can now be implemented inside the macro and specialization should work properly (fixes https://github.com/rust-lang/rust/pull/40847#issuecomment-310867299).

r? @jseyfried or @eddyb

6 years agoAuto merge of #44951 - vitiral:incr_struct_defs, r=michaelwoerister
bors [Fri, 6 Oct 2017 03:16:13 +0000 (03:16 +0000)]
Auto merge of #44951 - vitiral:incr_struct_defs, r=michaelwoerister

incr compilation struct_defs.rs

I am prematurely openeing this as I need mentoring help from @michaelwoerister (also pinged @nikomatsakis)

First, is this the right approach for these changes?

Second, I'm a bit confused by the results so far.

- Changing `TupleStructFieldType(i32)` -> `...(u32)` changes only Hir and HirBody, not TypeOfItem
- Chaning `TupleStructAddField(i32)` -> `...(i32, u32)` *does* change TypeOfItem

This seems wrong. I feel like it should change TypeOfItem in both cases. Is this a bug in incr compilation or is it expected?

6 years agoFix typo, per #45057.
Kevin Hunter Kesling [Fri, 6 Oct 2017 01:31:59 +0000 (21:31 -0400)]
Fix typo, per #45057.

6 years ago`proc_macro::Span` API improvements
Austin Bonander [Wed, 2 Aug 2017 01:05:08 +0000 (18:05 -0700)]
`proc_macro::Span` API improvements

6 years agoAuto merge of #45054 - andjo403:master, r=alexcrichton
bors [Thu, 5 Oct 2017 22:20:23 +0000 (22:20 +0000)]
Auto merge of #45054 - andjo403:master, r=alexcrichton

Faster compile times for release builds with llvm fix

Run global optimizations after the inliner to avoid spending time on optimizing dead code.

fixes #44655

6 years agoreplace libc::res_init with res_init_if_glibc_before_2_26
Jack O'Connor [Sun, 1 Oct 2017 21:42:18 +0000 (17:42 -0400)]
replace libc::res_init with res_init_if_glibc_before_2_26

The previous workaround for gibc's res_init bug is not thread-safe on
other implementations of libc, and it can cause crashes. Use a runtime
check to make sure we only call res_init when we need to, which is also
when it's safe. See https://github.com/rust-lang/rust/issues/43592.

6 years agoImprove resolution of associated types in macros 2.0
Vadim Petrochenkov [Mon, 25 Sep 2017 23:49:34 +0000 (02:49 +0300)]
Improve resolution of associated types in macros 2.0

6 years agoAdd missing links for AtomicBool
Guillaume Gomez [Thu, 5 Oct 2017 21:20:58 +0000 (23:20 +0200)]
Add missing links for AtomicBool

6 years agoModify Rc/Arc language around mutability
steveklabnik [Thu, 5 Oct 2017 20:54:56 +0000 (16:54 -0400)]
Modify Rc/Arc language around mutability

There are a few exceptions to the rule that Arc/Rc are immutable. Rather
than dig into the details, add "generally" to hint at this difference,
as it's kind of a distraction at this point in the docs.

Additionally, Arc's docs were slightly different here generally, so add
in both the existing language and the exception.

Fixes #44105

6 years agoAuto merge of #44943 - nivkner:fixme_fixup, r=dtolnay
bors [Thu, 5 Oct 2017 19:52:00 +0000 (19:52 +0000)]
Auto merge of #44943 - nivkner:fixme_fixup, r=dtolnay

address some FIXME whose associated issues were marked as closed

part of #44366

6 years agoFaster compile times for release builds with llvm fix
Andreas Jonson [Thu, 5 Oct 2017 18:56:23 +0000 (18:56 +0000)]
Faster compile times for release builds with llvm fix

6 years agorestore 'if: branch = auto' for cross2 builder
bgermann [Thu, 5 Oct 2017 18:42:27 +0000 (20:42 +0200)]
restore 'if: branch = auto' for cross2 builder

6 years agoAuto merge of #44878 - Nashenas88:master, r=nikomatsakis
bors [Thu, 5 Oct 2017 17:14:12 +0000 (17:14 +0000)]
Auto merge of #44878 - Nashenas88:master, r=nikomatsakis

Store a new Region value every time we create a new region variable

Paired with @spastorino to walk through this and implement #44870.

6 years agoAdd libsocket and libresolv to Solaris builder
bgermann [Thu, 5 Oct 2017 17:05:19 +0000 (19:05 +0200)]
Add libsocket and libresolv to Solaris builder

6 years agodelete 'if: branch = auto' for cross2 builder
bgermann [Thu, 5 Oct 2017 15:21:28 +0000 (17:21 +0200)]
delete 'if: branch = auto' for cross2 builder

6 years agoAuto merge of #45046 - kennytm:rollup, r=kennytm
bors [Thu, 5 Oct 2017 13:25:55 +0000 (13:25 +0000)]
Auto merge of #45046 - kennytm:rollup, r=kennytm

Rollup of 9 pull requests

- Successful merges: #44664, #44935, #44972, #44980, #44987, #44997, #45006, #45017, #45024
- Failed merges:

6 years agoRollup merge of #45024 - QuietMisdreavus:doc-masked-issue-num, r=pnkfelix
kennytm [Thu, 5 Oct 2017 12:22:37 +0000 (20:22 +0800)]
Rollup merge of #45024 - QuietMisdreavus:doc-masked-issue-num, r=pnkfelix

add the issue number to doc_masked's feature gate

Whoops, missed this in the original `#[doc(masked)]` PR.

6 years agoRollup merge of #45017 - GuillaumeGomez:mutex-links, r=estebank
kennytm [Thu, 5 Oct 2017 12:22:36 +0000 (20:22 +0800)]
Rollup merge of #45017 - GuillaumeGomez:mutex-links, r=estebank

Add missing urls for Mutex

r? @rust-lang/docs

6 years agoRollup merge of #45006 - MaikKlein:patch-2, r=nikomatsakis
kennytm [Thu, 5 Oct 2017 12:22:36 +0000 (20:22 +0800)]
Rollup merge of #45006 - MaikKlein:patch-2, r=nikomatsakis

Typo in `librustc/README.md`

6 years agoRollup merge of #44997 - SuriyaaKudoIsc:patch-1, r=steveklabnik
kennytm [Thu, 5 Oct 2017 12:22:35 +0000 (20:22 +0800)]
Rollup merge of #44997 - SuriyaaKudoIsc:patch-1, r=steveklabnik

Use HTTPS protocol for "chat.mibbit.com"

I changed the `http://` protocol to `https://` for the `chat.mibbit.com` website. :pencil:

--[**Suriyaa**](https://mozillians.org/de/u/suriyaakudo/) ðŸ¦Š

(*PS: Is somebody interested to vouch me at https://mozillians.org/de/u/suriyaakudo/?*)

6 years agoRollup merge of #44987 - pnkfelix:mir-borrowck-fix-borrowindexes-ice, r=arielb1
kennytm [Thu, 5 Oct 2017 12:22:34 +0000 (20:22 +0800)]
Rollup merge of #44987 - pnkfelix:mir-borrowck-fix-borrowindexes-ice, r=arielb1

`EndRegion` do not always correspond to borrow-data entries

Remove assertion that the argument to every `EndRegion` correspond to some dataflow-tracked borrow-data entry.

Fix #44828

(The comment thread on the aforementioned issue discusses why its best to just remove this assertion.)

6 years agoRollup merge of #44980 - steveklabnik:update-books, r=estebank
kennytm [Thu, 5 Oct 2017 12:22:33 +0000 (20:22 +0800)]
Rollup merge of #44980 - steveklabnik:update-books, r=estebank

update books for next release

Also fixes some stdlib links to the reference which have changed.

First step in https://forge.rust-lang.org/release-process.html, doing it a few days early ðŸ˜„

6 years agoRollup merge of #44972 - durka:patch-44, r=arielb1
kennytm [Thu, 5 Oct 2017 12:22:31 +0000 (20:22 +0800)]
Rollup merge of #44972 - durka:patch-44, r=arielb1

fix ItemKind::DefaultImpl doc comment

Upgrade comment to doc comment.

...Is this actually used? If so, why does the `Impl` variant right below have a `Defaultness`?

6 years agoRollup merge of #44935 - vitiral:dependencies, r=steveklabnik
kennytm [Thu, 5 Oct 2017 12:22:30 +0000 (20:22 +0800)]
Rollup merge of #44935 - vitiral:dependencies, r=steveklabnik

Add links to headers in README and CONTRIBUTING

this also adds dependencies to CONTRIBUTING

I'm just getting started building the rust compiler and noticed this information/ability was missing.

It was also missing the gdb dependency for running tests. I pulled the information out of `appveyor.yml` and recommended later than 7.1 because that is what [apt ships](https://packages.ubuntu.com/search?suite=trusty&keywords=gdb). Feel free to tell me something different!

6 years agoRollup merge of #44664 - budziq:contributing_external, r=steveklabnik
kennytm [Thu, 5 Oct 2017 12:22:29 +0000 (20:22 +0800)]
Rollup merge of #44664 - budziq:contributing_external, r=steveklabnik

Corrected the CONTRIBUTING.md "External Dependencies" section

The "External Dependencies" section is a little outdated.
Please see following comments https://github.com/rust-lang/rust/pull/44567#issuecomment-329797331 https://github.com/rust-lang/rust/pull/44567#issuecomment-329799655 for rationale.

6 years agoFix CC for solaris environments
bgermann [Thu, 5 Oct 2017 11:48:34 +0000 (13:48 +0200)]
Fix CC for solaris environments

6 years agoAuto merge of #45019 - aidanhs:aphs-no-trans-worker-panic, r=alexcrichton
bors [Thu, 5 Oct 2017 10:50:11 +0000 (10:50 +0000)]
Auto merge of #45019 - aidanhs:aphs-no-trans-worker-panic, r=alexcrichton

Don't unwrap work item results as the panic trace is useless

Fixes #43402 now there's no multithreaded panic printouts

Also update a comment

--------

Likely regressed in #43506, where the code was changed to panic in worker threads on error.

Unwrapping gives zero extra information since the stack trace is so short, so we may as well just surface that there was an error and exit the thread properly. Because there are then no multithreaded printouts, I think it should mean the output of the test for #26199 is deterministic and not interleaved (thanks to @philipc https://github.com/rust-lang/rust/issues/43402#issuecomment-333835271 for a hint).

Sadly the output is now:
```
thread '<unnamed>' panicked at 'aborting due to worker thread panic', src/librustc_trans/back/write.rs:1643:20
note: Run with `RUST_BACKTRACE=1` for a backtrace.
error: could not write output to : No such file or directory

error: aborting due to previous error
```
but it's an improvement over the multi-panic situation before.

r? @alexcrichton

6 years agoFix infinite recursion in <DepNode as Debug>.
Michael Woerister [Wed, 4 Oct 2017 12:57:14 +0000 (14:57 +0200)]
Fix infinite recursion in <DepNode as Debug>.

6 years agoAuto merge of #44940 - philipc:remap-path, r=michaelwoerister
bors [Thu, 5 Oct 2017 05:16:41 +0000 (05:16 +0000)]
Auto merge of #44940 - philipc:remap-path, r=michaelwoerister

Don't use remapped path when loading modules and include files

Fixes bug reported in https://github.com/rust-lang/rust/issues/41555#issuecomment-327866056.

cc @michaelwoerister

6 years agoUpdate trait summaries for std::fmt
Barret Rennie [Thu, 5 Oct 2017 04:11:36 +0000 (22:11 -0600)]
Update trait summaries for std::fmt

This patch is part of #29355.

6 years agoRemove nacl from librustdoc
est31 [Thu, 5 Oct 2017 03:04:50 +0000 (05:04 +0200)]
Remove nacl from librustdoc

6 years agoRemove nacl from libtest
est31 [Thu, 5 Oct 2017 03:04:40 +0000 (05:04 +0200)]
Remove nacl from libtest

6 years agoRemove nacl from libstd
est31 [Thu, 5 Oct 2017 03:01:41 +0000 (05:01 +0200)]
Remove nacl from libstd

6 years agoRemove nacl from librustc_back
est31 [Thu, 5 Oct 2017 03:01:19 +0000 (05:01 +0200)]
Remove nacl from librustc_back

6 years agoRemove nacl from librustc_llvm
est31 [Thu, 5 Oct 2017 03:01:02 +0000 (05:01 +0200)]
Remove nacl from librustc_llvm

6 years agoAuto merge of #44481 - Aaronepower:master, r=alexcrichton
bors [Thu, 5 Oct 2017 02:53:43 +0000 (02:53 +0000)]
Auto merge of #44481 - Aaronepower:master, r=alexcrichton

Updated RELEASES.md for 1.21.0

[Rendered](https://github.com/Aaronepower/rust/blob/master/RELEASES.md)

6 years agoGenerate ScopeId using newtype_index macro
Santiago Pastorino [Thu, 28 Sep 2017 20:08:28 +0000 (17:08 -0300)]
Generate ScopeId using newtype_index macro

6 years agoGenerate SerializedDepNodeIndex using newtype_index macro
Santiago Pastorino [Thu, 28 Sep 2017 19:11:06 +0000 (16:11 -0300)]
Generate SerializedDepNodeIndex using newtype_index macro

6 years agoGenerate DepNodeIndexNew using newtype_index macro
Santiago Pastorino [Thu, 28 Sep 2017 18:56:28 +0000 (15:56 -0300)]
Generate DepNodeIndexNew using newtype_index macro

6 years agoMake newtype_index get debug_name using reflection
Santiago Pastorino [Tue, 3 Oct 2017 17:19:56 +0000 (14:19 -0300)]
Make newtype_index get debug_name using reflection

6 years agoMake newtype_index macro use full path to resolve constants
Santiago Pastorino [Thu, 28 Sep 2017 15:30:13 +0000 (12:30 -0300)]
Make newtype_index macro use full path to resolve constants

6 years agoGenerate Idx in nll using newtype_index!
Santiago Pastorino [Thu, 28 Sep 2017 01:18:38 +0000 (22:18 -0300)]
Generate Idx in nll using newtype_index!

6 years agoMove newtype_index to rustc_data_structures
Santiago Pastorino [Wed, 27 Sep 2017 22:47:41 +0000 (19:47 -0300)]
Move newtype_index to rustc_data_structures

6 years agoConvert regions to IndexVec
Santiago Pastorino [Wed, 27 Sep 2017 17:29:11 +0000 (14:29 -0300)]
Convert regions to IndexVec

6 years agoStore a new Region value every time we create a new region variable
Paul Faria [Wed, 27 Sep 2017 02:24:19 +0000 (22:24 -0400)]
Store a new Region value every time we create a new region variable

6 years agoMerge dist-solaris with cross2 builder
bgermann [Wed, 4 Oct 2017 23:22:30 +0000 (01:22 +0200)]
Merge dist-solaris with cross2 builder

6 years agorustc: Don't create empty codegen units
Alex Crichton [Wed, 4 Oct 2017 23:21:38 +0000 (16:21 -0700)]
rustc: Don't create empty codegen units

This'll end up just creating a bunch of object files that otherwise wouldn't
exist, so skip that extra work if possible.

6 years agozircon: update some more zx and lp constants
James Tucker [Wed, 4 Oct 2017 22:29:01 +0000 (15:29 -0700)]
zircon: update some more zx and lp constants

 * Use size_t where size_t is used, while it's not critical on our
 specifically supported architectures, this is more accurate.
 * Update HND_SPECIAL_COUNT to the correct value, and give it the size
 that enum is likely to be.

6 years agoRename dist-fuchsia builder to cross2
bgermann [Wed, 4 Oct 2017 22:40:36 +0000 (00:40 +0200)]
Rename dist-fuchsia builder to cross2

6 years agozircon: the type of zx_handle_t is now unsigned
James Tucker [Wed, 4 Oct 2017 21:08:53 +0000 (14:08 -0700)]
zircon: the type of zx_handle_t is now unsigned

This is a kernel ABI change that landed today. I noticed some other ABI
issues and have left a note to cleanup once they are better defined.

6 years agorustc_trans: do not set NoCapture for anonymous lifetime &T arguments.
Eduard-Mihai Burtescu [Wed, 4 Oct 2017 22:02:25 +0000 (01:02 +0300)]
rustc_trans: do not set NoCapture for anonymous lifetime &T arguments.