Commit Graph

85798 Commits

Author SHA1 Message Date
Pietro Albini d2aeef06f2 Rollup merge of #55764 - murarth:fix-rc-alloc, r=RalfJung
Fix Rc/Arc allocation layout

* Rounds allocation layout up to a multiple of alignment
* Adds a convenience method `Layout::pad_to_align` to perform rounding

Closes #55747

cc #55724
2018-11-11 00:21:13 +01:00
Pietro Albini f0a6e3a583 Rollup merge of #55745 - nnethercote:outlives_components-SmallVec, r=matthewjasper
Convert `outlives_components`' return value to a `SmallVec` outparam.

This avoids some allocations, reducing instruction counts by 1% on a
couple of benchmarks.
2018-11-11 00:21:12 +01:00
Pietro Albini 0e912b2c17 Rollup merge of #55687 - alexreg:fix-24010, r=scalexm
Take supertraits into account when calculating associated types

Fixes #24010 and #23856. Applies to trait aliases too.

As a by-product, this PR also makes repeated bindings of the same associated item in the same definition a hard error. This was previously a warning with a note about it becoming a hard error in the future. See #50589 for more info.

I talked about this with @nikomatsakis recently, but only very superficially, so this shouldn't stop anyone from assigning it to themself to review and r+.

N.B. The "WIP" commits represent imperfect attempts to solve the problem just for trait objects, but I've left them in for reference for the sake of whomever is reviewing this.

CC @carllerche @theemathas @durka @mbrubeck
2018-11-11 00:21:11 +01:00
bors 6e9b842962 Auto merge of #55650 - nikic:funnel-shift, r=nagisa
Implement rotate using funnel shift on LLVM >= 7

Implement the rotate_left and rotate_right operations using
llvm.fshl and llvm.fshr if they are available (LLVM >= 7).

Originally I wanted to expose the funnel_shift_left and
funnel_shift_right intrinsics and implement rotate_left and
rotate_right on top of them. However, emulation of funnel
shifts requires emitting a conditional to check for zero shift
amount, which is not necessary for rotates. I was uncomfortable
doing that here, as I don't want to rely on LLVM to optimize
away that conditional (and for variable rotates, I'm not sure it
can). We should revisit that question when we raise our minimum
version requirement to LLVM 7 and don't need emulation code
anymore.

Fixes #52457.
2018-11-10 19:58:14 +00:00
bors 42959a24a1 Auto merge of #55830 - alexcrichton:update-cargo, r=alexcrichton
Update Cargo submodule

Hopefully a relatively routine update!
2018-11-10 12:21:58 +00:00
bors 4cd3294a1d Auto merge of #55637 - pnkfelix:issue-55552-dont-attempt-to-ascribe-projections-out-of-a-ty-var, r=nikomatsakis
Do not attempt to ascribe projections out of a ty var

If we encounter `_` ascribed to structural pattern like `(a, b)`, just skip relate_types.

Fix #55552
2018-11-10 09:38:10 +00:00
bors 0366ccafa6 Auto merge of #55717 - oli-obk:rustdoc_overflow, r=pnkfelix
Bubble up an overflow error so that rustdoc can ignore it

fixes #54524

Idk how to write a test for this, other than trying to minimize the entire diesel crate. If desirable I will do that.

Note that there are many other such overflow errors hiding out there. Should we try to proactively eliminate them or do we just whack-a-mole them?

cc @GuillaumeGomez

r? @nikomatsakis
2018-11-10 07:03:04 +00:00
bors 06118eac4c Auto merge of #55626 - nikic:update-emscripten, r=alexcrichton
Update emscripten

This updates emscripten to 1.38.15, which is based on LLVM 6.0.1 and would allow us to drop code for handling LLVM 4.

The main issue I ran into is that exporting statics through `EXPORTED_FUNCTIONS` no longer works. As far as I understand exporting non-functions doesn't really make sense under emscripten anyway, so I've modified the symbol export code to not even try.

Closes #52323.
2018-11-10 01:16:02 +00:00
Alex Crichton 62d78010a9 Update Cargo submodule
Hopefully a relatively routine update!
2018-11-09 12:59:05 -08:00
Nikita Popov 82574e9ec8 Pull in fix for dist-i686-linux build 2018-11-09 16:59:45 +01:00
bors 36a50c29f6 Auto merge of #55803 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 17 pull requests

Successful merges:

 - #55576 (Clarify error message for -C opt-level)
 - #55633 (Support memcpy/memmove with differing src/dst alignment)
 - #55638 (Fix ICE in msg_span_from_free_region on ReEmpty)
 - #55659 (rustc: Delete grouping logic from the musl target)
 - #55719 (Sidestep link error from rustfix'ed code by using a *defined* static.)
 - #55736 (Elide anon lifetimes in conflicting impl note)
 - #55739 (Consume optimization fuel from the MIR inliner)
 - #55742 (Avoid panic when matching function call)
 - #55753 (borrow_set: remove a helper function and a clone it uses)
 - #55755 (Improve creation of 3 IndexVecs)
 - #55758 ([regression - rust2018]: unused_mut lint false positives on nightly)
 - #55760 (Remove intermediate font specs)
 - #55761 (mir: remove a hacky recursive helper function)
 - #55774 (wasm32-unknown-emscripten expects the rust_eh_personality symbol)
 - #55777 (Use `Lit` rather than `P<Lit>` in `ast::ExprKind`.)
 - #55783 (Deprecate mpsc channel selection)
 - #55788 (rustc: Request ansi colors if stderr isn't a tty)

Failed merges:

r? @ghost
2018-11-09 06:56:25 +00:00
Mark Rousskov d293d1eea0 Rollup merge of #55788 - alexcrichton:wincolors, r=petrochenkov
rustc: Request ansi colors if stderr isn't a tty

Currently Cargo will always capture the output of rustc meaning that
rustc is never hooked up to a tty. To retain colors Cargo uses the
`fwdansi` crate to ensure that ansi color codes are translated to
windows terminal methods (and ansi codes otherwise just go their natural
route on Unix).

Cargo passes `--color always` to rustc to ensure that using a pipe
doesn't trick it into not emitting colors at all. It turns out, however,
that `--color always` ends up still accidentally using the native shell
api on native windows shells.

The fix here is to instead pass `AlwaysAnsi` to `termcolor` instead of
`Always`, ensuring that when `--color always` is passed to rustc and its
output isn't a terminal, we're always generating ansi colors regardless
of the platform.

Closes #55769
2018-11-08 18:15:24 -07:00
Mark Rousskov 667904f049 Rollup merge of #55783 - stjepang:deprecate-select, r=SimonSapin
Deprecate mpsc channel selection

Rationale: https://github.com/rust-lang/rust/issues/27800#issuecomment-421760863

r? @SimonSapin
2018-11-08 18:15:21 -07:00
Mark Rousskov 686de87d2f Rollup merge of #55777 - nnethercote:less-P-in-ast, r=petrochenkov
Use `Lit` rather than `P<Lit>` in `ast::ExprKind`.

Because it results in fewer allocations and small speedups on some
benchmarks.
2018-11-08 18:15:19 -07:00
Mark Rousskov 7125b8fa07 Rollup merge of #55774 - CryZe:patch-5, r=alexcrichton
wasm32-unknown-emscripten expects the rust_eh_personality symbol

The `wasm32-unknown-emscripten` expects the `rust_eh_personality` symbol to be there, but a cfg checking for `target_arch = "wasm32"` which was meant to remove the symbol from the `wasm32-unknown-unknown` target, didn't check for whether `emscripten` is targeted or not, so the symbol accidentally got filtered out there as well.

Fixes #55276
2018-11-08 18:15:17 -07:00
Mark Rousskov 6117195bac Rollup merge of #55761 - ljedrz:fix_promote_candidate_hack, r=estebank
mir: remove a hacky recursive helper function

It can be replaced with a `while let` loop.
2018-11-08 18:15:14 -07:00
Mark Rousskov 2d0a697852 Rollup merge of #55760 - jonhoo:no-intermediate-fonts, r=GuillaumeGomez
Remove intermediate font specs

This is a (much) more constrained version of #54772 that also aims at improving the situation in #34681. It removes any font specifications that are not the "official" rustdoc font, and instead relies on the browser to provide the fallback font if the official on is not available. On Linux systems, this is particularly important, as fonts like Helvetica, Arial, and Times often look pretty bad since they're pulled from extracted MS fonts. A specification like `serif` or `sans-serif` lets the browser instead choose a good font.
2018-11-08 18:15:12 -07:00
Mark Rousskov 7944075e0b Rollup merge of #55758 - davidtwco:issue-55344, r=pnkfelix
[regression - rust2018]: unused_mut lint false positives on nightly

Fixes #55344.

This commit filters out locals that have never been initialized for
consideration in the `unused_mut` lint.

This is intended to detect when the statement that would have
initialized the local was removed as unreachable code. In these cases,
we would not want to lint. This is the same behaviour as the AST borrow
checker.

This is achieved by taking advantage of an existing pass over the MIR
for the `unused_mut` lint and creating a set of those locals that were
never initialized.

r? @pnkfelix
2018-11-08 18:15:10 -07:00
Mark Rousskov 660340e4aa Rollup merge of #55755 - ljedrz:a_few_indexvec_tweaks, r=varkor
Improve creation of 3 IndexVecs

- preallocate when the minimal size is known
- use `from_elem_n` instead of `new`+`resize`
2018-11-08 18:15:08 -07:00
Mark Rousskov 7864780f9e Rollup merge of #55753 - ljedrz:borrow_set_insert_clone, r=oli-obk
borrow_set: remove a helper function and a clone it uses

This clone doesn't seem necessary.

r? @oli-obk
2018-11-08 18:15:05 -07:00
Mark Rousskov 792476516f Rollup merge of #55742 - F001:fix-55718, r=petrochenkov
Avoid panic when matching function call

Fix #55718

This bug is introduced by #53751. The original code checked `Def::AssociatedConst(..) | Def::Method(..)` before `pat_ty.no_bound_vars().expect("expected fn type")`. But somehow I exchanged the sequence carelessly. Sorry about that.

r? @petrochenkov
2018-11-08 18:15:03 -07:00
Mark Rousskov 96ee13a56d Rollup merge of #55739 - wesleywiser:mir_inline_fuel, r=nikomatsakis
Consume optimization fuel from the MIR inliner

This makes it easier to debug mis-optimizations that occur during
inlining. Thanks to @nikomatsakis for the suggestion!
2018-11-08 18:15:01 -07:00
Mark Rousskov e873984fa8 Rollup merge of #55736 - estebank:elide-anon-lt, r=petrochenkov
Elide anon lifetimes in conflicting impl note

Fix #54690.
2018-11-08 18:14:58 -07:00
Mark Rousskov 8fd4e5a467 Rollup merge of #55719 - pnkfelix:issue-54388-sidestep-link-error-from-rustfixed-code, r=alexcrichton
Sidestep link error from rustfix'ed code by using a *defined* static.

As a drive-by, added `-g` to the compile-flags so that the test more
reliably fails to compile when the extern static in question is *not*
provided. (I.e. this is making the test more robust in the face of
potential future revisions.)

Fix #54388.
2018-11-08 18:14:56 -07:00
Mark Rousskov 602a8b400f Rollup merge of #55659 - alexcrichton:musl-no-group, r=michaelwoerister
rustc: Delete grouping logic from the musl target

This commit deletes the injection of `-(` and `-)` options to the linker
for the musl targets. This actually causes problems today on nightly if
you execute:

    $ echo 'fn main() {}' >> foo.rs
    $ rustc --target x86_64-unknown-linux-musl -C panic=abort

you get a linker error about "cannot nest groups". This comes about
because rustc injects its own `--start-group` and `--end-group`
variables which clash with the outer `-(` and `-)` variables. It's not
entirely clear to me why this doesn't affect the musl target by default
(in `-C panic=unwind` mode).

The compiler's own injection of `--start-group` and `--end-group` should
solve the issues mentioned in the comment for injecting `-(` and `-)` as
well.
2018-11-08 18:14:53 -07:00
Mark Rousskov 4805a97274 Rollup merge of #55638 - pnkfelix:issue-55608-ice-reempty-msg_span_from_free_region, r=estebank
Fix ICE in msg_span_from_free_region on ReEmpty

On an example like this:

```rust
#![feature(conservative_impl_trait)]

fn server() -> impl FilterBase2 {
    segment2(|| { loop { } }).map2(|| "")
}

trait FilterBase2 {
    fn map2<F>(self, _fn: F) -> Map2<F> where Self: Sized { loop { } }
}

struct Map2<F> { _func: F }

impl<F> FilterBase2 for Map2<F> { }

fn segment2<F>(_fn: F) -> Map2<F> where F: Fn() -> Result<(), ()> {
    loop { }
}
```

we now, instead of ICE'ing, get a diagnostic like:

```
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
 --> issue-55608.rs:3:16
  |
3 | fn server() -> impl FilterBase2 {
  |                ^^^^^^^^^^^^^^^^
  |
  = note: hidden type `Map2<[closure@issue-55608.rs:4:36: 4:41]>` captures an empty lifetime
```

Fix #55608
2018-11-08 18:14:51 -07:00
Mark Rousskov 78cab36139 Rollup merge of #55633 - nikic:memcpy-align, r=nagisa
Support memcpy/memmove with differing src/dst alignment

If LLVM 7 is used, generate memcpy/memmove with differing src/dst alignment. I've added new FFI functions to construct these through the builder API, which is more convenient than dealing with differing intrinsic signatures depending on the LLVM version.

Fixes #49740.
2018-11-08 18:14:49 -07:00
Mark Rousskov 6153ce127a Rollup merge of #55576 - birkenfeld:opt-level-error-msg, r=cramertj
Clarify error message for -C opt-level

The new levels s and z are not mentioned as possible values.
2018-11-08 18:14:46 -07:00
Stjepan Glavina d75dae3069 Deprecate channel selection 2018-11-08 22:51:46 +01:00
Murarth 317f494c72 Fix Rc/Arc allocation layout
* Rounds allocation layout up to a multiple of alignment
* Adds a convenience method `Layout::pad_to_align` to perform rounding
2018-11-08 11:50:02 -07:00
Nikita Popov b1a33971ab Fix some tests for wasm32-unknown-emscripten 2018-11-08 18:17:57 +01:00
Nikita Popov 6fb701e874 Fix compiletest support for wasm32-unknown-emscripten 2018-11-08 17:04:22 +01:00
Alex Crichton 255cc1aed3 rustc: Request ansi colors if stderr isn't a tty
Currently Cargo will always capture the output of rustc meaning that
rustc is never hooked up to a tty. To retain colors Cargo uses the
`fwdansi` crate to ensure that ansi color codes are translated to
windows terminal methods (and ansi codes otherwise just go their natural
route on Unix).

Cargo passes `--color always` to rustc to ensure that using a pipe
doesn't trick it into not emitting colors at all. It turns out, however,
that `--color always` ends up still accidentally using the native shell
api on native windows shells.

The fix here is to instead pass `AlwaysAnsi` to `termcolor` instead of
`Always`, ensuring that when `--color always` is passed to rustc and its
output isn't a terminal, we're always generating ansi colors regardless
of the platform.

Closes #55769
2018-11-08 07:53:03 -08:00
Nikita Popov ffdb2bc1c5 Update the disabled wasm32 Dockerfile 2018-11-08 16:32:42 +01:00
Nikita Popov 8407612a8d Disable wasm32 features on emscripten
These are only supported by the native wasm32 backend.
2018-11-08 16:22:20 +01:00
ljedrz e3390d89ea Improve creation of 3 IndexVecs 2018-11-08 11:55:10 +01:00
bors 653da4fd00 Auto merge of #55532 - pnkfelix:rustc_error-survey, r=nikomatsakis
#[rustc_error] survey

Fix #55505
2018-11-08 09:38:49 +00:00
Nicholas Nethercote 5b2314b3ca Use SmallVec outparams in several functions.
This avoids some allocations, reducing instruction counts by 1% on a
couple of benchmarks.
2018-11-08 19:10:53 +11:00
Nicholas Nethercote 706c2ad651 Use Lit rather than P<Lit> in ast::ExprKind.
Because it results in fewer allocations and small speedups on some
benchmarks.
2018-11-08 19:00:55 +11:00
bors 1d834550d5 Auto merge of #55366 - Amanieu:stable_layout, r=Amanieu
Add tracking issue for Layout methods (and some API changes)

These methods are already useful when used with the stable global allocator API (stabilized in #51241).

```rust
pub fn align_to(&self, align: usize) -> Result<Layout, LayoutErr>;
pub fn padding_needed_for(&self, align: usize) -> usize;
pub fn repeat(&self, n: usize) -> Result<(Layout, usize), LayoutErr>;
pub fn extend(&self, next: Layout) -> Result<(Layout, usize), LayoutErr>;
pub fn repeat_packed(&self, n: usize) -> Result<Layout, LayoutErr>;
pub fn extend_packed(&self, next: Layout) -> Result<Layout, LayoutErr>;
pub fn array<T>(n: usize) -> Result<Layout, LayoutErr>;
```

cc #32838

r? @SimonSapin
2018-11-08 06:52:27 +00:00
Christopher Serr a9b5988847 wasm32-unknown-emscripten expects the rust_eh_personality symbol
The `wasm32-unknown-emscripten` expects the `rust_eh_personality` symbol to be there, but a cfg checking for `target_arch = "wasm32"` which was meant to remove the symbol from the `wasm32-unknown-unknown` target, didn't check for whether `emscripten` is targeted or not, so the symbol accidentally got filtered out there as well.

Fixes #55276
2018-11-08 03:27:45 +01:00
bors 9c304fb0cf Auto merge of #55187 - malbarbo:fix-manifest, r=alexcrichton
Remove targets from the manifest that are not built on travis

Fixes https://github.com/rust-lang/rust/issues/55020
2018-11-08 01:10:10 +00:00
Alexander Regueiro 90a14389d1 Removed DUPLICATE_ASSOCIATED_TYPE_BINDINGS lint.
This has been replaced by the hard error E0719.
2018-11-07 21:57:45 +00:00
Alexander Regueiro 7d9ee0314a Only do check for trait objects, not trait or trait alias definitions. 2018-11-07 21:57:45 +00:00
Alexander Regueiro 6d3ee4170d Added error for duplicate bindings of associated type. 2018-11-07 21:57:45 +00:00
Alexander Regueiro 0e89f570d2 Added tests. 2018-11-07 21:57:40 +00:00
Alexander Regueiro d08a42bf2c Look at projections from supertraits when constructing trait objects. 2018-11-07 21:56:06 +00:00
Marco A L Barbosa 11637aca8c Remove targets from the manifest that are not built on travis
Fixes https://github.com/rust-lang/rust/issues/55020
2018-11-07 19:15:04 -02:00
bors 25a42b2ceb Auto merge of #55746 - kennytm:rollup, r=kennytm
Rollup of 14 pull requests

Successful merges:

 - #55377 (Slight copy-editing for `std::cell::Cell` docs)
 - #55441 (Remove unused re import in gdb_rust_pretty_printing)
 - #55453 (Choose predicates without inference variables over those with them)
 - #55495 (Don't print opt fuel messages to stdout because it breaks Rustbuild)
 - #55501 (Make `process_obligations`' computation of `completed` optional.)
 - #55510 (Fix feature gate only being checked on first repr attr.)
 - #55609 (Run name-anon-globals after LTO passes as well)
 - #55645 (do not print wrapping ranges like normal ranges in validity diagnostics)
 - #55688 (Standardised names and location of ui issue tests)
 - #55692 (-C remark: fix incorrect warning about requiring "--debuginfo" instead of "-C debuginfo=n")
 - #55702 (Add `aarch64-pc-windows-msvc` to deployed targets)
 - #55728 (Update lldb)
 - #55730 (Use trait impl method span when type param mismatch is due to impl Trait)
 - #55734 (refactor: use shorthand fields)
2018-11-07 17:14:34 +00:00
Jon Gjengset 36f815bf8d Remove intermediate font specs
This is a (much) more constrained version of #54772 that also aims at
improving the situation in #34681. It removes any font specifications
that are not the "official" rustdoc font, and instead relies on the
browser to provide the fallback font if the official on is not
available. On Linux systems, this is particularly important, as fonts
like Helvetica, Arial, and Times often look pretty bad since they're
pulled from extracted MS fonts. A specification like `serif` or
`sans-serif` lets the browser instead choose a good font.
2018-11-07 11:02:10 -05:00