80327 Commits

Author SHA1 Message Date
ljedrz
9cffe90fd0 Deny bare trait objects in in src/librustc_metadata 2018-07-11 14:49:00 +02:00
bors
ae5b629efd Auto merge of #51966 - alexcrichton:llvm7, r=michaelwoerister
Upgrade to LLVM's master branch (LLVM 7)

### Current status

~~Blocked on a [performance regression](https://github.com/rust-lang/rust/pull/51966#issuecomment-402320576). The performance regression has an [upstream LLVM issue](https://bugs.llvm.org/show_bug.cgi?id=38047) and has also [been bisected](https://reviews.llvm.org/D44282) to an LLVM revision.~~

Ready to merge!

---

This commit upgrades the main LLVM submodule to LLVM's current master branch.
The LLD submodule is updated in tandem as well as compiler-builtins.

Along the way support was also added for LLVM 7's new features. This primarily
includes the support for custom section concatenation natively in LLD so we now
add wasm custom sections in LLVM IR rather than having custom support in rustc
itself for doing so.

Some other miscellaneous changes are:

* We now pass `--gc-sections` to `wasm-ld`
* The optimization level is now passed to `wasm-ld`
* A `--stack-first` option is passed to LLD to have stack overflow always cause
  a trap instead of corrupting static data
* The wasm target for LLVM switched to `wasm32-unknown-unknown`.
* The syntax for aligned pointers has changed in LLVM IR and tests are updated
  to reflect this.
* ~~The `thumbv6m-none-eabi` target is disabled due to an [LLVM bug][llbug]~~

Nowadays we've been mostly only upgrading whenever there's a major release of
LLVM but enough changes have been happening on the wasm target that there's been
growing motivation for quite some time now to upgrade out version of LLD. To
upgrade LLD, however, we need to upgrade LLVM to avoid needing to build yet
another version of LLVM on the builders.

The revision of LLVM in use here is arbitrarily chosen. We will likely need to
continue to update it over time if and when we discover bugs. Once LLVM 7 is
fully released we can switch to that channel as well.

[llbug]: https://bugs.llvm.org/show_bug.cgi?id=37382

cc #50543
2018-07-11 07:20:14 +00:00
bors
4700e1188f Auto merge of #52232 - arielb1:ill-adjusted-tuples, r=pnkfelix
use the adjusted type for cat_pattern in tuple patterns

This looks like a typo introduced in #51686.

Fixes #52213.

r? @pnkfelix

beta + stable nominating because regression + unsoundness.
2018-07-11 00:37:25 +00:00
bors
b9f1a0762a Auto merge of #52229 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 7 pull requests

Successful merges:

 - #51612 (NLL: fix E0594 "change to mutable ref" suggestion)
 - #51722 (Updated RELEASES for 1.28.0)
 - #52064 (Clarifying how the alignment of the struct works)
 - #52149 (Add #[repr(transparent)] to Atomic* types)
 - #52151 (Trait impl settings)
 - #52171 (Correct some codegen stats counter inconsistencies)
 - #52195 (rustc: Avoid /tmp/ in graphviz writing)

Failed merges:

 - #52164 (use proper footnote syntax for references)

r? @ghost
2018-07-10 22:40:17 +00:00
Ariel Ben-Yehuda
4c044537ce add test for #52213 2018-07-11 01:11:59 +03:00
Ariel Ben-Yehuda
df33cf4cb0 add a debug log for more MC failures
I don't see why MC should fail on well-formed code, so it might be a
better idea to just add a `delay_span_bug` there (anyone remember the
`cat_expr Errd` bug from the 1.0 days?).

However, I don't think this is a good idea to backport a new delay_span_bug
into stable and this code is going away soon-ish anyway.
2018-07-11 01:09:48 +03:00
Ariel Ben-Yehuda
05d6e55fab use the adjusted type for cat_pattern in tuple patterns
This looks like a typo introduced in #51686.

Fixes #52213.
2018-07-11 01:08:15 +03:00
Guillaume Gomez
d5c907890b
Rollup merge of #52195 - alexcrichton:no-tmp, r=pnkfelix
rustc: Avoid /tmp/ in graphviz writing

This issue was reported to security@rust-lang.org by Sebastien Marie following
our recent [security advisory][1]. Because `/tmp` is typically globally writable
it's possible for one user to place symlinks in `/tmp` pointing to files in
another user's directories, causing `rustc` to overwrite the contents of
innocent files by accident.

This patch instead defaults the output path here to the cwd which should avoid
this issue.

[1]: https://blog.rust-lang.org/2018/07/06/security-advisory-for-rustdoc.html
2018-07-10 22:56:43 +02:00
Guillaume Gomez
aa9ee687f3
Rollup merge of #52171 - bharrisau:fsub-count, r=estebank
Correct some codegen stats counter inconsistencies

I noticed some possible typos/inconsistencies in the codegen counters. For example, `fsub` was getting counted as an integer `sub`, whereas `fadd` was counted as an add. And `addincoming` was only being counted on the initial call.

dbd10f8175/src/librustc_codegen_llvm/builder.rs (L831-L841)

Only remaining inconsistencies I can see are things like `fadd_fast` are counted as `fadd`. But the vector versions like `vector_reduce_fmax_fast` are counted as `vector.reduce.fmax_fast` not as their 'base' versions (`vector_reduce_fmax` is counted as `vector.reduce.fmax`).
2018-07-10 22:56:42 +02:00
Guillaume Gomez
f7c2efddc7
Rollup merge of #52151 - GuillaumeGomez:trait-impl-settings, r=QuietMisdreavus
Trait impl settings

Fixes #51797.

r? @QuietMisdreavus

PS: I was annoyed by some intra link failures so I fixed them as well.
2018-07-10 22:56:40 +02:00
Guillaume Gomez
115447a65d
Rollup merge of #52149 - willmo:transparent-atomics, r=cramertj
Add #[repr(transparent)] to Atomic* types

This allows them to be used in `#[repr(C)]` structs without warnings. Since rust-lang/rfcs#1649 and rust-lang/rust#35603 they are already documented to have "the same in-memory representation as" their corresponding primitive types. This just makes that explicit.

This was briefly part of #51395, but was controversial and therefore dropped. But it turns out that it's essentially already documented (which I had forgotten).
2018-07-10 22:56:39 +02:00
Guillaume Gomez
bfac782b69
Rollup merge of #52064 - Valloric:patch-1, r=cramertj
Clarifying how the alignment of the struct works

The docs were not specifying how to compute the alignment of the struct, so I had to spend some time trying to figure out how that works. Found the answer [on this page](http://camlorn.net/posts/April%202017/rust-struct-field-reordering.html):

> The total size of this struct is 5, but the most-aligned field is b with alignment 2, so we round up to 6 and give the struct an alignment of 2 bytes.
2018-07-10 22:56:38 +02:00
Guillaume Gomez
2d0bbfcaed
Rollup merge of #51722 - Aaronepower:master, r=Mark-Simulacrum
Updated RELEASES for 1.28.0

[Rendered](https://github.com/Aaronepower/rust/blob/master/RELEASES.md)
r? @Mark-Simulacrum
cc @rust-lang/release
2018-07-10 22:56:36 +02:00
Guillaume Gomez
aac60ce8aa
Rollup merge of #51612 - ashtneoi:51515-missing-first-char, r=pnkfelix
NLL: fix E0594 "change to mutable ref" suggestion

Fix #51515.
Fix #51879.

Questions:
- [x] Is this the right place to fix this? It feels brittle, being so close to the frontend. **It's probably fine.**
- [ ] Have I missed any other cases that trigger this behavior?
- [x] Is it okay to use HELP and SUGGESTION in the UI test? **Yes.**
- [x] Do I need more tests for this? **No.**
2018-07-10 22:56:35 +02:00
Alex Crichton
42eb85002a Upgrade to LLVM's master branch (LLVM 7)
This commit upgrades the main LLVM submodule to LLVM's current master branch.
The LLD submodule is updated in tandem as well as compiler-builtins.

Along the way support was also added for LLVM 7's new features. This primarily
includes the support for custom section concatenation natively in LLD so we now
add wasm custom sections in LLVM IR rather than having custom support in rustc
itself for doing so.

Some other miscellaneous changes are:

* We now pass `--gc-sections` to `wasm-ld`
* The optimization level is now passed to `wasm-ld`
* A `--stack-first` option is passed to LLD to have stack overflow always cause
  a trap instead of corrupting static data
* The wasm target for LLVM switched to `wasm32-unknown-unknown`.
* The syntax for aligned pointers has changed in LLVM IR and tests are updated
  to reflect this.
* The `thumbv6m-none-eabi` target is disabled due to an [LLVM bug][llbug]

Nowadays we've been mostly only upgrading whenever there's a major release of
LLVM but enough changes have been happening on the wasm target that there's been
growing motivation for quite some time now to upgrade out version of LLD. To
upgrade LLD, however, we need to upgrade LLVM to avoid needing to build yet
another version of LLVM on the builders.

The revision of LLVM in use here is arbitrarily chosen. We will likely need to
continue to update it over time if and when we discover bugs. Once LLVM 7 is
fully released we can switch to that channel as well.

[llbug]: https://bugs.llvm.org/show_bug.cgi?id=37382
2018-07-10 13:43:01 -07:00
bors
e5f6498d3d Auto merge of #51612 - ashtneoi:51515-missing-first-char, r=pnkfelix
NLL: fix E0594 "change to mutable ref" suggestion

Fix #51515.
Fix #51879.

Questions:
- [x] Is this the right place to fix this? It feels brittle, being so close to the frontend. **It's probably fine.**
- [ ] Have I missed any other cases that trigger this behavior?
- [x] Is it okay to use HELP and SUGGESTION in the UI test? **Yes.**
- [x] Do I need more tests for this? **No.**
2018-07-10 20:36:13 +00:00
bors
90bd83c9fc Auto merge of #52196 - ollie27:rustdoc_ctor_imports, r=QuietMisdreavus
rustdoc: Hide struct and enum variant constructor imports

This is fallout from #51425. The duplicate variant imports can be seen [here](https://doc.rust-lang.org/nightly/std/prelude/v1/index.html) for example.

This is fixing a regression so could be backported to beta.

r? @QuietMisdreavus
2018-07-10 17:29:30 +00:00
bors
ce45cbb053 Auto merge of #52191 - SimonSapin:alloc_error_handler, r=alexcrichton
Implement #[alloc_error_handler]

This to-be-stable attribute is equivalent to `#[lang = "oom"]`. It is required when using the `alloc` crate without the `std` crate. It is called by `handle_alloc_error`, which is in turned called by "infallible" allocations APIs such as `Vec::push`.
2018-07-10 15:20:17 +00:00
bors
fc491526dd Auto merge of #52168 - nikomatsakis:nll-region-name, r=estebank
find and highlight the `&` or `'_` in `region_name`

Before:

```
   --> $DIR/dyn-trait-underscore.rs:18:5
    |
 LL | fn a<T>(items: &[T]) -> Box<dyn Iterator<Item=&T>> {
-   |         ----- lifetime `'1` appears in this argument
 LL |     Box::new(items.iter()) //~ ERROR cannot infer an appropriate lifetime
    |     ^^^^^^^^^^^^^^^^^^^^^^ cast requires that `'1` must outlive `'static`
```

After:

```
   --> $DIR/dyn-trait-underscore.rs:18:5
    |
 LL | fn a<T>(items: &[T]) -> Box<dyn Iterator<Item=&T>> {
+   |                - let's call the lifetime of this reference `'1`
 LL |     Box::new(items.iter()) //~ ERROR cannot infer an appropriate lifetime
    |     ^^^^^^^^^^^^^^^^^^^^^^ cast requires that `'1` must outlive `'static`
```

Not intended as the final end point necessarily in any sense. I intentionally left some to-do points to fill in later:

- Does not apply to upvars in closures yet (should be relatively easy)
- Does not handle the case where we can't find a precise match very well
- And of course we can still tweak wording

but shows the basic idea of how to make the `Ty` and `hir::Ty` to find a good spot to highlight.

r? @estebank
cc @davidtwco
2018-07-10 11:19:31 +00:00
bors
e46bfa2879 Auto merge of #52204 - zackmdavis:and_the_crate_of_the_missing_module, r=oli-obk
correct import suggestions for edition 2018

For #52202.
2018-07-10 09:05:46 +00:00
bors
77117e3836 Auto merge of #52177 - ljedrz:bare_gcc_warning, r=alexcrichton
Warn windows-gnu users that the bundled gcc can't compile

Add a `DO NOT USE THIS gcc.exe FOR COMPILATION.txt` file to `lib\rustlib\*-pc-windows-gnu\bin` folders in `windows-gnu` installations in order to warn against attempting to use the bundled `gcc.exe` as a C compiler. I'm pretty sure that location is usually found manually, so this should be easily noticeable.

This mistake has been made plenty of times and has lead to misunderstandings:
Rust: [Bundled gcc (windows x64) is unable to build any c file](https://github.com/rust-lang/rust/issues/24418)
gtk-rs:    [Compiling on windows](https://github.com/gtk-rs/gtk/issues/625)
bzip2-rs: [Build failure at gcc level: blocksort.c not found](https://github.com/alexcrichton/bzip2-rs/issues/30)

Alternatives: rename the bundled `gcc.exe` to e.g. `rustc-gcc.exe` or `gcc-linker.exe`. This might require a more comprehensive change or break crates already using it as a linker.

r? @alexcrichton
2018-07-10 06:52:20 +00:00
Zack M. Davis
96b151bd9c in which use suggestions meet edition 2018
The intent here is to resolve #52202.
2018-07-09 23:21:29 -07:00
bors
b3e7d70ce7 Auto merge of #51583 - cuviper:packed_pair-bool, r=Mark-Simulacrum
Store scalar pair bools as i8 in memory

We represent `bool` as `i1` in a `ScalarPair`, unlike other aggregates,
to optimize IR for checked operators and the like.  With this patch, we
still do so when the pair is an immediate value, but we use the `i8`
memory type when the value is loaded or stored as an LLVM aggregate.

So `(bool, bool)` looks like an `{ i1, i1 }` immediate, but `{ i8, i8 }`
in memory.  When a pair is a direct function argument, `PassMode::Pair`,
it is still passed using the immediate `i1` type, but as a return value
it will use the `i8` memory type.  Also, `bool`-like` enum tags will now
use scalar pairs when possible, where they were previously excluded due
to optimization issues.

Fixes #51516.
Closes #51566.

r? @eddyb
cc @nox
2018-07-10 03:08:47 +00:00
bors
295858eba7 Auto merge of #52100 - nielx:fix/rust_driver-stacklimit, r=cramertj
Haiku: work around the lack of setrlimit

The default Unix codepath fails, because Haiku does not implement
setrlimit for stack size. Thus we create an additional path.

By default, Haiku has the desired 16 MB stack, therefore in general
we do not have to spawn a new thread. The code has been written in
such a way that any changes in Haiku or in Rust will be adapted to.
2018-07-10 01:07:23 +00:00
Oliver Middleton
6b1d584ed8 rustdoc: Hide struct and enum variant constructor imports 2018-07-10 00:16:18 +01:00
bors
5b525916ee Auto merge of #51899 - gnzlbg:llvm501, r=alexcrichton
bump minimum LLVM version to 5.0

Closes #51878 .

r? @alexcrichton

--

cc @cuviper @infinity0
2018-07-09 23:08:51 +00:00
Alex Crichton
bc09fcb990 rustc: Avoid /tmp/ in graphviz writing
This issue was reported to security@rust-lang.org by Sebastien Marie following
our recent [security advisory][1]. Because `/tmp` is typically globally writable
it's possible for one user to place symlinks in `/tmp` pointing to files in
another user's directories, causing `rustc` to overwrite the contents of
innocent files by accident.

This patch instead defaults the output path here to the cwd which should avoid
this issue.

[1]: https://blog.rust-lang.org/2018/07/06/security-advisory-for-rustdoc.html
2018-07-09 15:26:57 -07:00
Simon Sapin
239ec7d2dc Implement #[alloc_error_handler]
This to-be-stable attribute is equivalent to `#[lang = "oom"]`.
It is required when using the alloc crate without the std crate.
It is called by `handle_alloc_error`, which is in turned called
by "infallible" allocations APIs such as `Vec::push`.
2018-07-09 23:13:24 +02:00
Simon Sapin
872effa118 Add a test for the default allocation error hook 2018-07-09 23:13:24 +02:00
Simon Sapin
620599e886 Remove extern on the pub fn rust_oom lang item in libstd, to match ABI of the declaration in liballoc
This turned out to be important on Windows.
Calling `handle_alloc_error(Layout:🆕:<[u8; 42]>())` caused:

```
Exception thrown at 0x00007FF7C70DC399 in a.exe: 0xC0000005:
Access violation reading location 0x000000000000002A.
```

0x2A equals 42, so it looks like the `Layout::size` field of type `usize`
was interpreted as a pointer to read from.
2018-07-09 23:13:24 +02:00
bors
9bd8458c92 Auto merge of #50250 - csmoe:wf_traitref, r=scalexm
Chalk lowering rule: WellFormed-TraitRef

Address chalk lowering "Implemented-From-Env" as part of #49177.
r? @nikomatsakis
2018-07-09 21:01:58 +00:00
ashtneoi
dc8ae26c1e Fix issue #51515 and update test 2018-07-09 13:33:57 -07:00
ashtneoi
a49b75d2f3 Add test case from issue #51515 2018-07-09 13:16:02 -07:00
ljedrz
232e77e007 Change gcc warning file name, remove unnecessary reference 2018-07-09 21:25:16 +02:00
scalexm
37c5c0bf9c Change wording 2018-07-09 21:20:26 +02:00
bors
bdd185c897 Auto merge of #51956 - GuillaumeGomez:shutdown-doc-lints, r=oli-obk
Fix rustdoc run failures by shutting down definitely some lints

Fixes #51661.

cc @oli-obk @arielb1 @eddyb
2018-07-09 18:50:37 +00:00
Guillaume Gomez
66beb4e5b4 add comment about lints whitelisting 2018-07-09 18:10:08 +02:00
gnzlbg
3b36ce64a5 revert travis-ci changes 2018-07-09 17:25:00 +02:00
bors
c6807bb1b2 Auto merge of #52159 - SimonSapin:alloc-prelude, r=alexcrichton
Add the `alloc::prelude` module

It contains the re-exports that are in `std::prelude::v1` but not in `core::prelude::v1`.

Calling it prelude is somewhat of a misnomer since (unlike those modules in `std` or `core`) its contents are never implicitly imported in modules. Rather it is intended to be used with an explicit glob import like `use alloc::prelude::*;`. However there is precedent for the same misnomer with `std::io::prelude`, for example.

This new module is unstable with the same feature name as the `alloc` care. They are proposed for stabilization together in RFC https://github.com/rust-lang/rfcs/pull/2480.
2018-07-09 14:29:59 +00:00
ljedrz
6b6a7a4691 Warn windows-gnu users that the bundled gcc can't compile 2018-07-09 15:28:12 +02:00
gnzlbg
fe75f617c3 run asmjs and emscripten builds on CI (temporary) 2018-07-09 11:35:53 +02:00
gnzlbg
23dfb42ab3 still support LLVM4 for emscripten 2018-07-09 11:35:53 +02:00
gnzlbg
52d7740277 bump llvm version of failing codegen test 2018-07-09 11:35:53 +02:00
gnzlbg
4ff90c7e0a bump minimum LLVM version to 5.0 2018-07-09 11:35:52 +02:00
bors
c30acc7187 Auto merge of #52160 - euclio:include-macros, r=oli-obk
add regression test for #48835

Fixes #48835.

The underlying issue was fixed in #51978.
2018-07-09 08:41:43 +00:00
Ben Harris
aac0d914b2 Correct some codegen stats counters 2018-07-09 09:40:16 +02:00
bors
ec039c7cb1 Auto merge of #52066 - benjaminp:obligation-select, r=Mark-Simulacrum
Remove obsolete documentation from FufillmentContext::select comment.

The `only_new_obligations` parameter has not existed since 43756934d255603a0fb7a871f2a145380e488b71.
2018-07-09 06:38:47 +00:00
bors
a80a610a4c Auto merge of #52166 - orlp:master, r=joshtriplett
Performance improvement of Vec's swap_remove.

The old implementation *literally* swapped and then removed, which resulted in unnecessary move instructions. The new implementation does use unsafe code, but is easy to see that it is correct.

Fixes https://github.com/rust-lang/rust/issues/52150.
2018-07-09 04:42:27 +00:00
Orson Peters
e529dfd590 Removed a single trailing space. Oops. 2018-07-09 06:31:24 +02:00
Niko Matsakis
a6adb1ebff find and highlight the & or '_ in region_name 2018-07-09 00:20:36 -04:00