]> git.lizzy.rs Git - rust.git/log
rust.git
6 years agoRevert "Test x86_64-unknown-linux-gnux32"
Marco A L Barbosa [Thu, 12 Oct 2017 09:59:14 +0000 (06:59 -0300)]
Revert "Test x86_64-unknown-linux-gnux32"

6 years agoAdd gcc-multilib to cross2
Marco A L Barbosa [Thu, 12 Oct 2017 02:17:50 +0000 (23:17 -0300)]
Add gcc-multilib to cross2

6 years agoTest x86_64-unknown-linux-gnux32
Marco A L Barbosa [Thu, 12 Oct 2017 00:39:42 +0000 (21:39 -0300)]
Test x86_64-unknown-linux-gnux32

6 years agoAdd builder for x86_64-unknown-linux-gnux32 in cross2
Marco A L Barbosa [Thu, 12 Oct 2017 00:36:37 +0000 (21:36 -0300)]
Add builder for x86_64-unknown-linux-gnux32 in cross2

6 years agoBump cc to 1.01 to include x86_64-unknown-linux-gnux32 support
Marco A L Barbosa [Thu, 12 Oct 2017 00:29:46 +0000 (21:29 -0300)]
Bump cc to 1.01 to include x86_64-unknown-linux-gnux32 support

6 years agoAdd x86_64-unknown-linux-gnux32 target
Marco A L Barbosa [Wed, 11 Oct 2017 19:15:42 +0000 (16:15 -0300)]
Add x86_64-unknown-linux-gnux32 target

6 years agoAuto merge of #44888 - tirr-c:binder-hr-region, r=arielb1
bors [Wed, 11 Oct 2017 16:00:25 +0000 (16:00 +0000)]
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

6 years agoAuto merge of #45192 - steveklabnik:rollup, r=steveklabnik
bors [Wed, 11 Oct 2017 13:26:09 +0000 (13:26 +0000)]
Auto merge of #45192 - steveklabnik:rollup, r=steveklabnik

Rollup of 5 pull requests

- Successful merges: #45071, #45139, #45148, #45171, #45180
- Failed merges: #45121

6 years agoAuto merge of #45193 - alexcrichton:fix-travis, r=alexcrichton
bors [Wed, 11 Oct 2017 05:18:13 +0000 (05:18 +0000)]
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.

6 years agoci: Fix installing the Android SDK
Alex Crichton [Wed, 11 Oct 2017 01:59:40 +0000 (18:59 -0700)]
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.

6 years agoRollup merge of #45180 - 0xAX:fix-help-message-in-configure.py, r=Mark-Simulacrum
Steve Klabnik [Wed, 11 Oct 2017 00:22:29 +0000 (20:22 -0400)]
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

6 years agoRollup merge of #45171 - rust-lang:petrochenkov-patch-2, r=steveklabnik
Steve Klabnik [Wed, 11 Oct 2017 00:22:28 +0000 (20:22 -0400)]
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.

6 years agoRollup merge of #45148 - gaurikholkar:master, r=nikomatsakis
Steve Klabnik [Wed, 11 Oct 2017 00:22:27 +0000 (20:22 -0400)]
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 :)

6 years agoRollup merge of #45139 - michaelwoerister:document-force_from_dep_node, r=nikomatsakis
Steve Klabnik [Wed, 11 Oct 2017 00:22:26 +0000 (20:22 -0400)]
Rollup merge of #45139 - michaelwoerister:document-force_from_dep_node, r=nikomatsakis

incr.comp.: Add some documentation to force_from_dep_node().

r? @nikomatsakis

6 years agoRollup merge of #45071 - tromey:use-gdb-lazy-string, r=michaelwoerister
Steve Klabnik [Wed, 11 Oct 2017 00:22:24 +0000 (20:22 -0400)]
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.

6 years agoFix path to x.py in configure.py script
Alexander Kuleshov [Tue, 10 Oct 2017 10:36:53 +0000 (16:36 +0600)]
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

6 years agoAuto merge of #45169 - kennytm:rollup, r=kennytm
bors [Tue, 10 Oct 2017 16:55:39 +0000 (16:55 +0000)]
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:

6 years agoRollup merge of #45146 - petrochenkov:lessrec, r=estebank
kennytm [Tue, 10 Oct 2017 12:08:29 +0000 (20:08 +0800)]
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

6 years agoRollup merge of #45135 - michaelwoerister:move-incr-comp-with-macro-export, r=alexcri...
kennytm [Tue, 10 Oct 2017 12:08:28 +0000 (20:08 +0800)]
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.

6 years agoRollup merge of #45116 - johnthagen:typo-fix, r=alexcrichton
kennytm [Tue, 10 Oct 2017 12:08:27 +0000 (20:08 +0800)]
Rollup merge of #45116 - johnthagen:typo-fix, r=alexcrichton

Fix typos

6 years agoRollup merge of #45108 - phil-opp:patch-2, r=japaric
kennytm [Tue, 10 Oct 2017 12:08:26 +0000 (20:08 +0800)]
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).

6 years agoRollup merge of #45101 - lfairy:proc-macro-string-escape, r=jseyfried
kennytm [Tue, 10 Oct 2017 12:08:25 +0000 (20:08 +0800)]
Rollup merge of #45101 - lfairy:proc-macro-string-escape, r=jseyfried

Make the result of `Literal::string()` more readable

Closes #45076

6 years agoRollup merge of #45099 - mikeyhew:fix-astconv-self-type-comments, r=nikomatsakis
kennytm [Tue, 10 Oct 2017 12:08:24 +0000 (20:08 +0800)]
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!

6 years agoRollup merge of #45095 - bluss:discriminant-send-sync, r=alexcrichton
kennytm [Tue, 10 Oct 2017 12:08:23 +0000 (20:08 +0800)]
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

6 years agoRollup merge of #45089 - rkruppe:master, r=bluss
kennytm [Tue, 10 Oct 2017 12:08:22 +0000 (20:08 +0800)]
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.

6 years agoRollup merge of #44775 - MaloJaffre:debug-struct, r=sfackler
kennytm [Tue, 10 Oct 2017 12:08:20 +0000 (20:08 +0800)]
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.

6 years agoAuto merge of #45170 - rust-lang:aphs-no-unsynchronised-llvm-err-global, r=alexcrichton
bors [Tue, 10 Oct 2017 14:26:13 +0000 (14:26 +0000)]
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 https://github.com/rust-lang/rust/blob/5f578dfad0dd5d43b28eff71a7e857d10c3f55fe/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
```

6 years agoFix a mistake in release notes for 1.21.0
Vadim Petrochenkov [Tue, 10 Oct 2017 12:45:04 +0000 (15:45 +0300)]
Fix a mistake in release notes for 1.21.0

Also reorder changes to put the important one first.

6 years agoBand-aid fix to stop race conditions in llvm errors
Aidan Hobson Sayers [Tue, 10 Oct 2017 12:11:28 +0000 (13:11 +0100)]
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?)

6 years agoAuto merge of #44877 - nvzqz:box-conversions, r=alexcrichton
bors [Tue, 10 Oct 2017 11:07:25 +0000 (11:07 +0000)]
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`

6 years agoAuto merge of #45141 - kennytm:rollup, r=kennytm
bors [Tue, 10 Oct 2017 08:30:10 +0000 (08:30 +0000)]
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:

6 years agoRename test Linux target to avoid conflict with built-in target
Philipp Oppermann [Tue, 10 Oct 2017 08:05:29 +0000 (10:05 +0200)]
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.

6 years agoAuto merge of #44822 - frewsxcv:frewsxcv-eprintln, r=Kimundi
bors [Tue, 10 Oct 2017 02:54:14 +0000 (02:54 +0000)]
Auto merge of #44822 - frewsxcv:frewsxcv-eprintln, r=Kimundi

Migrate to eprint/eprintln macros where appropriate.

None

6 years agoRefactor to use `debug_struct` in several Debug impls
Malo Jaffré [Mon, 9 Oct 2017 18:09:08 +0000 (20:09 +0200)]
Refactor to use `debug_struct` in several Debug impls

Fixes #44771.

6 years agoUpdate let-expressions.rs
gaurikholkar [Fri, 6 Oct 2017 19:44:44 +0000 (01:14 +0530)]
Update let-expressions.rs

6 years agoFix a bug in diagnostics for `x as usize < y`
Vadim Petrochenkov [Mon, 9 Oct 2017 17:02:17 +0000 (20:02 +0300)]
Fix a bug in diagnostics for `x as usize < y`

Improve diagnostics for `x as usize << y`

6 years agoAuto merge of #45111 - aidanhs:aphs-bubble-worker-failures, r=alexcrichton
bors [Mon, 9 Oct 2017 16:31:15 +0000 (16:31 +0000)]
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

6 years agoRollup merge of #45136 - johnthagen:patch-1, r=QuietMisdreavus
kennytm [Mon, 9 Oct 2017 16:16:28 +0000 (00:16 +0800)]
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.

6 years agoRollup merge of #45125 - bleibig:grammar-update, r=alexcrichton
kennytm [Mon, 9 Oct 2017 16:16:27 +0000 (00:16 +0800)]
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.

6 years agoRollup merge of #45120 - johnthagen:none-identity-test, r=sfackler
kennytm [Mon, 9 Oct 2017 16:16:26 +0000 (00:16 +0800)]
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).

6 years agoRollup merge of #45118 - johnthagen:fix-section-key-name, r=alexcrichton
kennytm [Mon, 9 Oct 2017 16:16:25 +0000 (00:16 +0800)]
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.

6 years agoRollup merge of #45117 - johnthagen:fix-str-raise, r=alexcrichton
kennytm [Mon, 9 Oct 2017 16:16:24 +0000 (00:16 +0800)]
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`.

6 years agoRollup merge of #45106 - Pirh:process_stdio_docs, r=dtolnay
kennytm [Mon, 9 Oct 2017 16:16:23 +0000 (00:16 +0800)]
Rollup merge of #45106 - Pirh:process_stdio_docs, r=dtolnay

Add links and examples for std::process::Stdio

As per #29370

6 years agoRollup merge of #45091 - kennytm:fix-45086, r=michaelwoerister
kennytm [Mon, 9 Oct 2017 16:16:22 +0000 (00:16 +0800)]
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.

6 years agoRollup merge of #45051 - k0pernicus:master, r=michaelwoerister
kennytm [Mon, 9 Oct 2017 16:16:21 +0000 (00:16 +0800)]
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.

6 years agoRollup merge of #44962 - shepmaster:no-ignore-result, r=steveklabnik
kennytm [Mon, 9 Oct 2017 16:16:19 +0000 (00:16 +0800)]
Rollup merge of #44962 - shepmaster:no-ignore-result, r=steveklabnik

Don't encourage people to ignore threading errors in the docs

6 years agoincr.comp.: Add some documentation to force_from_dep_node().
Michael Woerister [Mon, 9 Oct 2017 15:29:59 +0000 (17:29 +0200)]
incr.comp.: Add some documentation to force_from_dep_node().

6 years agoClarify RAM usage during build
johnthagen [Mon, 9 Oct 2017 14:02:50 +0000 (10:02 -0400)]
Clarify RAM usage during build

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 agoincr.comp.: Move macro-export test case to src/test/incremental.
Michael Woerister [Mon, 9 Oct 2017 13:38:51 +0000 (15:38 +0200)]
incr.comp.: Move macro-export test case to src/test/incremental.

6 years agoNew rebase for the issue #45022
k0pernicus [Thu, 5 Oct 2017 20:34:49 +0000 (22:34 +0200)]
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

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 agoUpdate grammar to parse current rust syntax
Brian Leibig [Mon, 9 Oct 2017 01:46:42 +0000 (18:46 -0700)]
Update grammar to parse current rust syntax

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 agoUse identity operator `is` when comparing to None
johnthagen [Sun, 8 Oct 2017 23:46:58 +0000 (19:46 -0400)]
Use identity operator `is` when comparing to None

6 years agoFix variable name reference
johnthagen [Sun, 8 Oct 2017 23:36:37 +0000 (19:36 -0400)]
Fix variable name reference

6 years agoFix trying to raise a bare str as an exception. This has been deprecated since Python 2.5
johnthagen [Sun, 8 Oct 2017 23:28:21 +0000 (19:28 -0400)]
Fix trying to raise a bare str as an exception. This has been deprecated since Python 2.5

6 years agoFix typo in README
johnthagen [Sun, 8 Oct 2017 23:15:17 +0000 (19:15 -0400)]
Fix typo in README

6 years agoFix typo in comment
johnthagen [Sun, 8 Oct 2017 23:11:34 +0000 (19:11 -0400)]
Fix typo in comment

6 years agoDon't panic in the coordinator thread, bubble up the failure
Aidan Hobson Sayers [Sun, 8 Oct 2017 20:57:03 +0000 (21:57 +0100)]
Don't panic in the coordinator thread, bubble up the failure

Fixes #43402 (take 2)

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 agoRemove ./ prefix from relative URLs
Pirh [Sun, 8 Oct 2017 18:09:16 +0000 (19:09 +0100)]
Remove ./ prefix from relative URLs

Also remove trailing whitespace to pass tidy checks.

6 years agoFix data-layout field
Philipp Oppermann [Sun, 8 Oct 2017 16:19:51 +0000 (18:19 +0200)]
Fix data-layout field

The value was generated according to [this comment by @japaric](https://github.com/rust-lang/rust/issues/31367#issuecomment-213595571).

6 years agoAdd links and examples for std::process::Stdio
Pirh [Sun, 8 Oct 2017 16:12:14 +0000 (17:12 +0100)]
Add links and examples for std::process::Stdio

As per #29370

6 years agoFix tests
Wonwoo Choi [Mon, 2 Oct 2017 17:04:02 +0000 (02:04 +0900)]
Fix tests

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 agoDon't encourage people to ignore threading errors in the docs
Jake Goulding [Sun, 1 Oct 2017 18:55:58 +0000 (14:55 -0400)]
Don't encourage people to ignore threading errors in the docs

6 years agoIntroduce `Print` trait for displaying types
Wonwoo Choi [Sun, 1 Oct 2017 17:12:08 +0000 (02:12 +0900)]
Introduce `Print` trait for displaying types

6 years agoName higher-ranked lifetimes properly while displaying
Wonwoo Choi [Mon, 25 Sep 2017 15:36:08 +0000 (00:36 +0900)]
Name higher-ranked lifetimes properly while displaying

Now they don't shadow other lifetimes.

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 agoMake the result of `Literal::string()` more readable
Chris Wong [Sun, 8 Oct 2017 08:42:33 +0000 (21:42 +1300)]
Make the result of `Literal::string()` more readable

Closes #45076

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 agoupdate comments referring to old check_method_self_type
Michael Hewson [Sun, 8 Oct 2017 03:51:43 +0000 (23:51 -0400)]
update comments referring to old check_method_self_type
- function has been renamed to check_method_receiver

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 agocore: Ensure std::mem::Discriminant is Send + Sync
Ulrik Sverdrup [Sat, 7 Oct 2017 19:33:36 +0000 (21:33 +0200)]
core: 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

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 agodebuginfo-test: Fix #45086.
kennytm [Sat, 7 Oct 2017 17:39:27 +0000 (01:39 +0800)]
debuginfo-test: Fix #45086.

LLDB's output may be None instead of '', and that will cause type
mismatch when normalize_whitespace() expects a string instead of
None. This commit simply ensures we do pass '' even if the output
is None.

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 typo in codegen test
Robin Kruppe [Sat, 7 Oct 2017 16:04:23 +0000 (18:04 +0200)]
Fix typo in codegen test

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!