Commit Graph

68479 Commits

Author SHA1 Message Date
bors
fbb5054fa9 Auto merge of #44969 - QuietMisdreavus:impls-for-everyone, r=steveklabnik
document trait impls when the type appears in the trait's generics

Fixes #25264

![image](https://user-images.githubusercontent.com/5217170/31062309-4fc7c594-a6ef-11e7-892e-07f95bbc7976.png)
2017-10-12 01:00:15 +00:00
bors
a47c9f870f Auto merge of #44963 - JLockerman:fix_spsc, r=alexcrichton
Improve performance of spsc_queue and stream.

This PR makes two main changes:

1. It switches the `spsc_queue` node caching strategy from keeping a shared
counter of the number of nodes in the cache to keeping a consumer only counter
of the number of node eligible to be cached.
2. It separates the consumer and producers fields of `spsc_queue` and `stream` into
a producer cache line and consumer cache line.

Overall, it speeds up `mpsc` in `spsc` mode by 2-10x.
Variance is higher than I'd like (that 2-10x speedup is on one benchmark), I believe this is due to the drop check in `send` (`fn stream::Queue::send:107`). I think this check can be combined with the sleep detection code into a version which only uses 1 shared variable, and only one atomic access per `send`, but I haven't looked through the select implementation enough to be sure.

The code currently assumes a cache line size of 64 bytes. I added a CacheAligned newtype in `mpsc` which I expect to reuse for `shared`. It doesn't really belong there, it would probably be best put in `core::sync::atomic`, but putting it in `core` would involve making it public, which I thought would require an RFC.

Benchmark runner is [here](3eca46279c/shootout), benchmarks [here](3eca46279c/queue_bench/src/lib.rs (L170-L293)).

Fixes #44512.
2017-10-11 19:32:19 +00:00
bors
cbf5d39cca Auto merge of #44888 - tirr-c:binder-hr-region, r=arielb1
Refactor fmt::Display and fmt::Debug impls in ppaux

Also fixes #44887.

There was a problem that unnamed late-bound regions are *always* named `'r` while they are displayed using `std::fmt::Display`.

---

```rust
fn main() {
    f(|_: (), _: ()| {});
}
fn f<F>(_: F) where F: Fn(&(), for<'r> fn(&'r ())) {}
```

Before (incorrectly shadows lifetime, `for<'r>` omitted for the second argument):

```
error[E0631]: type mismatch in closure arguments
 --> test.rs:2:5
  |
2 |     f(|_: (), _: ()| {});
  |     ^ ----------------- found signature of `fn((), ()) -> _`
  |     |
  |     expected signature of `for<'r> fn(&'r (), fn(&'r ())) -> _`
  |
  = note: required by `f`
```

After:

```
error[E0631]: type mismatch in closure arguments
 --> test.rs:2:5
  |
2 |     f(|_: (), _: ()| {});
  |     ^ ----------------- found signature of `fn((), ()) -> _`
  |     |
  |     expected signature of `for<'s> fn(&'s (), for<'r> fn(&'r ())) -> _`
  |
  = note: required by `f`
```

r? @nikomatsakis
2017-10-11 16:00:25 +00:00
bors
c0d40a1908 Auto merge of #45192 - steveklabnik:rollup, r=steveklabnik
Rollup of 5 pull requests

- Successful merges: #45071, #45139, #45148, #45171, #45180
- Failed merges: #45121
2017-10-11 13:26:09 +00:00
bors
264aafe056 Auto merge of #45193 - alexcrichton:fix-travis, r=alexcrichton
ci: Fix installing the Android SDK

Apparently the https urls are broken due to some certificate validation
whatnots, and so far the least intrusive solution I've found is to just disable
that.
2017-10-11 05:18:13 +00:00
Alex Crichton
d5d4494213 ci: Fix installing the Android SDK
Apparently the https urls are broken due to some certificate validation
whatnots, and so far the least intrusive solution I've found is to just disable
that.
2017-10-10 18:59:40 -07:00
Steve Klabnik
4a90366464 Rollup merge of #45180 - 0xAX:fix-help-message-in-configure.py, r=Mark-Simulacrum
Fix path to x.py in bootstrap/configure.py script

We may see a help message in the end of the output of the ./configure script:

```
$ ./configure
configure: processing command line
configure:
configure: build.configure-args := []
configure:
configure: writing `config.toml` in current directory
configure:
configure: run `python ./src/bootstrap/x.py --help`
configure:
```

but the `x.py` script is actually in the rust root directory and
executing of such help string will give us error:

```
$ python ./src/bootstrap/x.py --help
python: can't open file './src/bootstrap/x.py': [Errno 2] No such file
or directory
```

This patch fixes path to the x.py script in the output of the ./configure
2017-10-10 20:22:29 -04:00
Steve Klabnik
fa70d04dc5 Rollup merge of #45171 - rust-lang:petrochenkov-patch-2, r=steveklabnik
Fix a mistake in release notes for 1.21.0

Also reorder changes to put the important one first.
2017-10-10 20:22:28 -04:00
Steve Klabnik
eac9138a79 Rollup merge of #45148 - gaurikholkar:master, r=nikomatsakis
Update let-expressions.rs with DepNode labels

As a part of #44924, the PR has tests verified for the following dependency nodes for **let-expressions**
```
- MirValidated
- MirOptimized
- TypeCheckTables
- TypeOfItem
- GenericsOfItem
- PredicatesOfItem
- FnSignature
```

As we are more concerned with the function body,  the following fingerprints do not change over compilation sessions.
```- TypeOfItem
- GenericsOfItem
- PredicatesOfItem
- FnSignature
```

r? @nikomatsakis
cc @michaelwoerister

P.S. Will add more tests as and when possible :)
2017-10-10 20:22:27 -04:00
Steve Klabnik
0a0bec7695 Rollup merge of #45139 - michaelwoerister:document-force_from_dep_node, r=nikomatsakis
incr.comp.: Add some documentation to force_from_dep_node().

r? @nikomatsakis
2017-10-10 20:22:26 -04:00
Steve Klabnik
fab96c4b12 Rollup merge of #45071 - tromey:use-gdb-lazy-string, r=michaelwoerister
Implement display_hint in gdb pretty printers

A few pretty-printers were returning a quoted string from their
to_string method.  It's preferable in gdb to return a lazy string and to
let gdb handle the display by having a "display_hint" method that
returns "string" -- it lets gdb settings (like "set print ...") work, it
handles corrupted strings a bit better, and it passes the information
along to IDEs.
2017-10-10 20:22:24 -04:00
Alexander Kuleshov
a84c62a7f1 Fix path to x.py in configure.py script
We may see a help message in the end of the output of the ./configure script:

$ ./configure
configure: processing command line
configure:
configure: build.configure-args := []
configure:
configure: writing `config.toml` in current directory
configure:
configure: run `python ./src/bootstrap/x.py --help`
configure:

but the x.py script is actually in the rust root directory and
executing of such help string will give us error:

$ python ./src/bootstrap/x.py --help
python: can't open file './src/bootstrap/x.py': [Errno 2] No such file
or directory

This patch fixes path to the x.py script in the output of the ./configure
2017-10-11 00:00:18 +06:00
bors
d6d711dd8f Auto merge of #45169 - kennytm:rollup, r=kennytm
Rollup of 9 pull requests

- Successful merges: #44775, #45089, #45095, #45099, #45101, #45108, #45116, #45135, #45146
- Failed merges:
2017-10-10 16:55:39 +00:00
kennytm
ce0a1cfa30
Rollup merge of #45146 - petrochenkov:lessrec, r=estebank
Fix a bug in diagnostics for `x as usize < y`

Also improve diagnostics for `x as usize << y`.

Fixes https://github.com/rust-lang/rust/issues/44406
r? @estebank
2017-10-10 22:44:12 +08:00
kennytm
0ca4c4c5b3
Rollup merge of #45135 - michaelwoerister:move-incr-comp-with-macro-export, r=alexcrichton
incr.comp.: Move macro-export test case to src/test/incremental.

`compile-fail/incr_comp_with_macro_export.rs` was trying to role its own incremental compilation setup. This started to cause problems. There's no reason to not just make this a regular `src/test/incremental` test.

Fixes #45062.
2017-10-10 22:44:10 +08:00
kennytm
b7a3a14406
Rollup merge of #45116 - johnthagen:typo-fix, r=alexcrichton
Fix typos
2017-10-10 22:44:08 +08:00
kennytm
3b69c79efc
Rollup merge of #45108 - phil-opp:patch-2, r=japaric
Fix data-layout field in x86_64-unknown-linux-gnu.json test file

The current data-layout causes the following error:

> rustc: /checkout/src/llvm/lib/CodeGen/MachineFunction.cpp:151: void llvm::MachineFunction::init(): Assertion `Target.isCompatibleDataLayout(getDataLayout()) && "Can't create a MachineFunction using a Module with a " "Target-incompatible DataLayout attached\n"' failed.

The new value was generated according to [this comment by @japaric](https://github.com/rust-lang/rust/issues/31367#issuecomment-213595571).
2017-10-10 22:44:07 +08:00
kennytm
bedce1e0a6
Rollup merge of #45101 - lfairy:proc-macro-string-escape, r=jseyfried
Make the result of `Literal::string()` more readable

Closes #45076
2017-10-10 22:44:05 +08:00
kennytm
2f4dd1527e
Rollup merge of #45099 - mikeyhew:fix-astconv-self-type-comments, r=nikomatsakis
Update comments referring to old check_method_self_type

I was browsing the code base, trying to figure out how #44874 could be implemented, and noticed some comments that were out of date and a bit misleading (`check_method_self_type` has since been renamed to `check_method_receiver`). Thought it would be an easy first contribution to Rust!
2017-10-10 22:44:04 +08:00
kennytm
9effa73286
Rollup merge of #45095 - bluss:discriminant-send-sync, r=alexcrichton
Ensure std::mem::Discriminant is Send + Sync

`PhantomData<*const T>` has the implication of Send / Syncness following
the *const T type, but the discriminant should always be Send and Sync.

Use `PhantomData<fn() -> T>` which has the same variance in T, but is Send + Sync
2017-10-10 22:44:02 +08:00
kennytm
f2efa793f0
Rollup merge of #45089 - rkruppe:master, r=bluss
Fix typo in codegen test

Without the `:`, the `CHECK-NOT` is ignored by FileCheck, making the line not test anything.
2017-10-10 22:44:00 +08:00
kennytm
23a99f4e0e
Rollup merge of #44775 - MaloJaffre:debug-struct, r=sfackler
Refactor to use `debug_struct` in several Debug impls

Also use `pad` and derive `Debug` for `Edge`.

Fixes #44771.
2017-10-10 22:43:57 +08:00
bors
ec016f80cf Auto merge of #45170 - rust-lang:aphs-no-unsynchronised-llvm-err-global, r=alexcrichton
Band-aid fix to stop race conditions in llvm errors

This is a big hammer, but should be effective at completely removing a
few issues, including inconsistent error messages and segfaults when
LLVM workers race to report results

`LLVM_THREAD_LOCAL` has been present in LLVM since 8 months before 3.7
(the earliest supported LLVM version that Rust can use)

Maybe fixes #43402 (third time lucky?)

r? @alexcrichton

------

You can see that in 5f578dfad0/src/librustc_trans/back/write.rs (L75-L100) there's a small window where the static global error message (made thread local in this PR) could be altered by another thread.

Note that we can't use `thread_local` because gcc 4.7 (permitted according to the readme) does not support it.

Maybe ideally all the functions should be modified to not use a global, but this PR makes things deterministic at least. My only hesitation is whether errors are checked in different threads to where they occur, but I figure that's probably unlikely (and is less bad than racing code).

As an aside, segfault evidence before this patch when I was doing some debugging:
```
$ while grep 'No such file or directory' log2; do RUST_LOG=debug ./build/x86_64-unknown-linux-gnu/stage1/bin/rustc -o "" y.rs >log2 2>&1; done
error: could not write output to : No such file or directory
error: could not write output to : No such file or directory
error: could not write output to : No such file or directory
error: could not write output to : No such file or directory
error: could not write output to : No such file or directory
error: could not write output to : No such file or directory
error: could not write output to : No such file or directory
Segmentation fault (core dumped)
error: could not write output to : No such file or directory
error: could not write output to : No such file or directory
```
2017-10-10 14:26:13 +00:00
Vadim Petrochenkov
1138f853e1 Fix a mistake in release notes for 1.21.0
Also reorder changes to put the important one first.
2017-10-10 15:45:04 +03:00
Aidan Hobson Sayers
8628d51c3b Band-aid fix to stop race conditions in llvm errors
This is a big hammer, but should be effective at completely removing a
few issues, including inconsistent error messages and segfaults when
LLVM workers race to report results

LLVM_THREAD_LOCAL has been present in LLVM since 8 months before 3.7
(the earliest supported LLVM version that Rust can use)

Maybe fixes #43402 (third time lucky?)
2017-10-10 13:14:51 +01:00
bors
0217315bf2 Auto merge of #44877 - nvzqz:box-conversions, r=alexcrichton
Improve raw Box conversions

This PR has two goals:

- Reduce use of `mem::transmute` in `Box` conversions

  I understand that `mem::transmute`-ing non `#[repr(C)]` types is implementation-defined behavior.  This may not matter within the reference implementation of Rust, but I believe it's important to remain consistent. For example, I noticed that `str::from_utf8_unchecked` went from using `mem::transmute` to using pointer casts.

- Make `Box` pointer conversions more straightforward regarding `Unique`
2017-10-10 11:07:25 +00:00
bors
5f578dfad0 Auto merge of #45141 - kennytm:rollup, r=kennytm
Rollup of 9 pull requests

- Successful merges: #44962, #45051, #45091, #45106, #45117, #45118, #45120, #45125, #45136
- Failed merges:
2017-10-10 08:30:10 +00:00
Philipp Oppermann
06b9168d33 Rename test Linux target to avoid conflict with built-in target
It seems like the file wasn't actually used, since there is a built-in target with the same name. See https://github.com/rust-lang/rust/pull/45108#issuecomment-335173165 for more details.
2017-10-10 10:05:29 +02:00
bors
13ae187043 Auto merge of #44822 - frewsxcv:frewsxcv-eprintln, r=Kimundi
Migrate to eprint/eprintln macros where appropriate.

None
2017-10-10 02:54:14 +00:00
Malo Jaffré
679457ad2a Refactor to use debug_struct in several Debug impls
Fixes #44771.
2017-10-09 20:09:08 +02:00
gaurikholkar
29b576e15b Update let-expressions.rs 2017-10-09 23:32:21 +05:30
Vadim Petrochenkov
3e4d9df02b Fix a bug in diagnostics for x as usize < y
Improve diagnostics for `x as usize << y`
2017-10-09 20:02:37 +03:00
bors
692b94ae25 Auto merge of #45111 - aidanhs:aphs-bubble-worker-failures, r=alexcrichton
Don't panic in the coordinator thread, bubble up the failure

Fixes #43402 (take 2)

Followup to #45019, this makes the coordinator thread not panic on worker failures since they can be reported reasonably back in the main thread.

The output also now has no evidence of backtraces at all, unlike the previous PR:
```
$ ./build/x86_64-unknown-linux-gnu/stage1/bin/rustc -o "" x.rs
error: could not write output to : No such file or directory

error: aborting due to previous error
```

r? @alexcrichton
2017-10-09 16:31:15 +00:00
kennytm
6a7785330a
Rollup merge of #45136 - johnthagen:patch-1, r=QuietMisdreavus
Clarify RAM usage during build in README

The sentence wasn't immediately clear if it meant RAM or disk space before reading the next sentence.

I think this helps clarify it.
2017-10-10 00:27:28 +08:00
kennytm
c5ba2d2b57
Rollup merge of #45125 - bleibig:grammar-update, r=alexcrichton
Update grammar to parse current rust syntax

Mainly addressing #32723. This PR updates the bison grammar so that it can parse the current rust syntax, except for feature-gated syntax additions. It has been tested with all the tests in run-pass.

The grammar in this repo doesn't have build logic anymore, but you can test it out in https://github.com/bleibig/rust-grammar, which has all of what's in this PR. If you are interested in having build logic and grammar tests again, I can look into implementing that as well.

I'm aware that things are somewhat undecided as to what an official rust grammar should be from the discussion in #30942. With this PR we can go back to having an up-to-date flex/bison based grammar, but the rustypop grammar looks interesting as well.
2017-10-10 00:27:26 +08:00
kennytm
d7f1a260b9
Rollup merge of #45120 - johnthagen:none-identity-test, r=sfackler
Use identity operator `is` when comparing to None

This is very minor, but idiomatic Python code uses `is` for comparisons to `None`. This is because semantically we want to compare to the "identity" of `None`, not its value.

See [PEP8 for details](https://www.python.org/dev/peps/pep-0008/#programming-recommendations).
2017-10-10 00:27:24 +08:00
kennytm
380b7951ac
Rollup merge of #45118 - johnthagen:fix-section-key-name, r=alexcrichton
Fix variable name reference

As best I can tell, this was a typo due to how similar it looks to the function above it. PyCharm found this as a unbound local variable.
2017-10-10 00:27:23 +08:00
kennytm
743ff73e20
Rollup merge of #45117 - johnthagen:fix-str-raise, r=alexcrichton
Fix raising a bare str as an exception in configure.py

Raising a bare `str` has been [deprecated since Python 2.5](https://docs.python.org/2/whatsnew/2.5.html#pep-352-exceptions-as-new-style-classes).

On Python 2.7 it produces the following error:

```
TypeError: exceptions must be old-style classes or derived from BaseException, not str
```

For maximum compatibility with Python 2.7 and 3.x, we wrap the error message in `RuntimeError` which derives from `Exception`.
2017-10-10 00:27:22 +08:00
kennytm
4c992111a3
Rollup merge of #45106 - Pirh:process_stdio_docs, r=dtolnay
Add links and examples for std::process::Stdio

As per #29370
2017-10-10 00:27:20 +08:00
kennytm
9687c2efbe
Rollup merge of #45091 - kennytm:fix-45086, r=michaelwoerister
debuginfo-test: Fix #45086.

Fixes #45086, where all debuginfo-lldb fails when using LLDB from Xcode 9.
2017-10-10 00:27:19 +08:00
kennytm
9e6b565c61
Rollup merge of #45051 - k0pernicus:master, r=michaelwoerister
Debugger pretty printer files are take into account in test execution time-stamping

This PR is proposed to solve the issue #45022.
2017-10-10 00:27:17 +08:00
kennytm
dad731cc80
Rollup merge of #44962 - shepmaster:no-ignore-result, r=steveklabnik
Don't encourage people to ignore threading errors in the docs
2017-10-10 00:27:16 +08:00
Michael Woerister
eb1006f5cf incr.comp.: Add some documentation to force_from_dep_node(). 2017-10-09 17:29:59 +02:00
johnthagen
c3ff62863d Clarify RAM usage during build 2017-10-09 10:02:50 -04:00
bors
72d65019c7 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
2017-10-09 14:00:12 +00:00
Michael Woerister
4a9df0ec62 incr.comp.: Move macro-export test case to src/test/incremental. 2017-10-09 15:38:51 +02:00
k0pernicus
53a648522b New rebase for the issue #45022
Add pretty printer files into test execution time-stamping

Move find_rust_src_path() as a method for Config

Move find_rust_src_path() as a method for Config

Call find_rust_src_path() from Config

Move find_rust_src_path() from common.rs to header.rs

Add pretty printer files as relevant files to get up_to_date information

Remove dead code

Add two pretty printer files to keep a close watch on

Move find_rust_src_path() as a method for Config

Move find_rust_src_path() as a method for Config

Call find_rust_src_path() from Config

Move find_rust_src_path() from common.rs to header.rs

Remove dead code

Add two pretty printer files to keep a close watch on
2017-10-09 13:06:51 +02:00
bors
d7acd29ad5 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
2017-10-09 08:49:38 +00:00
bors
b2f67c8d56 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
2017-10-09 04:59:02 +00:00
bors
dbed066d49 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.
2017-10-09 02:42:30 +00:00