]> git.lizzy.rs Git - rust.git/log
rust.git
5 years agoRollup merge of #54422 - ljedrz:simplify_first_last, r=Mark-Simulacrum
Pietro Albini [Sat, 22 Sep 2018 07:56:43 +0000 (09:56 +0200)]
Rollup merge of #54422 - ljedrz:simplify_first_last, r=Mark-Simulacrum

Simplify slice's first(_mut) and last(_mut) with get

This change makes these functions easier to read and interpret. I haven't detected any difference in performance locally.

r? @Mark-Simulacrum

5 years agoRollup merge of #54420 - nnethercote:PackedRWU-Vec, r=nikomatsakis
Pietro Albini [Sat, 22 Sep 2018 07:56:41 +0000 (09:56 +0200)]
Rollup merge of #54420 - nnethercote:PackedRWU-Vec, r=nikomatsakis

Compress `Liveness` data some more.

Profiling shows that the `(reader, writer, used)` triples used by
liveness analysis almost always have invalid `reader` and `writer`
fields. We can take advantage of this knowledge to use a compressed
representation for them, falling back to a secondary table for the
uncommon cases.

This change reduces instruction counts on numerous benchmarks, the best
by 16%. It also reduces max-rss on numerous benchmarks, the best by 38%.

The patch also renames these triples from `Users` to `RWU`, because it's
confusing having a type whose name is plural and then used within
vectors whose names are also plural.

r? @nikomatsakis

5 years agoRollup merge of #54415 - petrochenkov:norollback, r=estebank
Pietro Albini [Sat, 22 Sep 2018 07:56:40 +0000 (09:56 +0200)]
Rollup merge of #54415 - petrochenkov:norollback, r=estebank

parser: Tweak function parameter parsing to avoid rollback on succesfull path

Since rollback is not perfect and may e.g. leave non-fatal errors after it, we need to make sure compilation fails if it happens.
So in particular case of `fn parse_arg_general` we need to parse the "good" `TYPE` first and only then rollback and recover erroneous `PAT: TYPE` if necessary.
Found when working on https://github.com/rust-lang/rfcs/pull/2544#issuecomment-423293222.

r? @ghost

5 years agoRollup merge of #54413 - memoryruins:deref-error-twice, r=estebank
Pietro Albini [Sat, 22 Sep 2018 07:56:39 +0000 (09:56 +0200)]
Rollup merge of #54413 - memoryruins:deref-error-twice, r=estebank

Add UI test for deref recursion limit printing twice

Closes #38940

Does ``NOTE`` in the test need to be changed to ``HELP`` if its in the stderr?
``help: consider adding a `#![recursion_limit="20"]` attribute to your crate``

It doesn't appear to complaining locally that the line isn't set to ``HELP`` in the test, and the guide says
 > HELP and SUGGESTION*
> * Note: SUGGESTION must follow immediately after HELP.

yet there's no concrete suggestion emitted.

r? @estebank

5 years agoRollup merge of #54412 - jcpst:replace_span_suggestion, r=estebank
Pietro Albini [Sat, 22 Sep 2018 07:56:38 +0000 (09:56 +0200)]
Rollup merge of #54412 - jcpst:replace_span_suggestion, r=estebank

add applicability to span_suggestion call

Found another `span_suggestion` call. Issue #50723

r? @estebank

5 years agoRollup merge of #54409 - estebank:remove-in, r=pnkfelix
Pietro Albini [Sat, 22 Sep 2018 07:56:37 +0000 (09:56 +0200)]
Rollup merge of #54409 - estebank:remove-in, r=pnkfelix

Detect `for _ in in bar {}` typo

Fix #36611, #52964, without modifying the parsing of emplacement `in` to avoid further problems like #50832.

5 years agoRollup merge of #54402 - bgermann:master, r=alexcrichton
Pietro Albini [Sat, 22 Sep 2018 07:56:35 +0000 (09:56 +0200)]
Rollup merge of #54402 - bgermann:master, r=alexcrichton

Use no_default_libraries for all NetBSD flavors

The no_default_libraries was introduced in #28578 because the
NetBSD-based rumprun needed to disable the link flag.
This moves the definition to be used by all NetBSD linker flavors to
close #49627.

A different solution would be adding -lc but as there is no platform
with explicit -lc, this approach is used.

5 years agoRollup merge of #54374 - SergioBenitez:pub-multispan, r=alexcrichton
Pietro Albini [Sat, 22 Sep 2018 07:56:34 +0000 (09:56 +0200)]
Rollup merge of #54374 - SergioBenitez:pub-multispan, r=alexcrichton

Make 'proc_macro::MultiSpan' public.

Oversight from #52896.

5 years agoRollup merge of #54371 - QuietMisdreavus:rustdoc-ui-testing, r=GuillaumeGomez
Pietro Albini [Sat, 22 Sep 2018 07:56:33 +0000 (09:56 +0200)]
Rollup merge of #54371 - QuietMisdreavus:rustdoc-ui-testing, r=GuillaumeGomez

add -Zui-testing to rustdoc

Before we depend on the `rustdoc-ui` tests some more, let's make rustdoc act the same as the compiler when they're actually being executed.

5 years agoRollup merge of #54370 - nnethercote:better-domain_size, r=nikomatsakis
Pietro Albini [Sat, 22 Sep 2018 07:56:32 +0000 (09:56 +0200)]
Rollup merge of #54370 - nnethercote:better-domain_size, r=nikomatsakis

Improve handling of type bounds in `bit_set.rs`.

Currently, `BitSet` doesn't actually know its own domain size; it just
knows how many words it contains. We can make it better.

5 years agoRollup merge of #54350 - Munksgaard:support-edition-in-doc-test, r=steveklabnik
Pietro Albini [Sat, 22 Sep 2018 07:56:30 +0000 (09:56 +0200)]
Rollup merge of #54350 - Munksgaard:support-edition-in-doc-test, r=steveklabnik

Support specifying edition in doc test

Fixes #52623

r? @QuietMisdreavus

5 years agoRollup merge of #54323 - Keruspe:rustc-color, r=Mark-Simulacrum
Pietro Albini [Sat, 22 Sep 2018 07:56:29 +0000 (09:56 +0200)]
Rollup merge of #54323 - Keruspe:rustc-color, r=Mark-Simulacrum

rustbuild: drop color handling

Let cargo handle that for us

Fixes #54322

Needs a beta backport

5 years agoRollup merge of #54280 - japaric:no-cas-for-thumbv6, r=alexcrichton
Pietro Albini [Sat, 22 Sep 2018 07:56:28 +0000 (09:56 +0200)]
Rollup merge of #54280 - japaric:no-cas-for-thumbv6, r=alexcrichton

remove (more) CAS API from Atomic* types where not natively supported

closes #54276

In PR #51953 I made the Atomic* types available on targets like thumbv6m and
msp430 with the intention of *only* exposing the load and store API on those
types -- the rest of the API doesn't work on those targets because the are no
native instructions to implement CAS loops.

Unfortunately, it seems I didn't properly cfg away all the CAS API on those
targets, as evidenced in #54276. This PR amends the issue by removing the rest
of the CAS API.

This is technically a breaking change because *libraries* that were using this
API and were being compiled for e.g. thumbv6m-none-eabi will stop compiling.
However, using those libraries (before this change) in programs (binaries) would
lead to linking errors when compiled for e.g. thumbv6m so this change
effectively shifts a linker error in binaries to a compiler error in libraries.

On a side note: extending the Atomic API is a bit error prone because of these
non-cas targets. Unless the author of the change is aware of these targets and
properly uses `#[cfg(atomic = "cas")]` they could end up exposing new CAS API on
these targets. I can't think of a test to check that an API is not present on
some target, but we could extend the `tidy` tool to check that *all* newly added
atomic API has the `#[cfg(atomic = "cas")]` attribute unless it's whitelisted in
`tidy` then the author of the change would have to verify if the API can be used
on non-cas targets.

In any case, I'd like to plug this hole ASAP. We can revisit testing in a
follow-up issue / PR.

r? @alexcrichton
cc @mvirkkunen

5 years agoRollup merge of #54261 - varkor:dyn-keyword-2018, r=petrochenkov
Pietro Albini [Sat, 22 Sep 2018 07:56:27 +0000 (09:56 +0200)]
Rollup merge of #54261 - varkor:dyn-keyword-2018, r=petrochenkov

Make `dyn` a keyword in the 2018 edition

Proposed in https://github.com/rust-lang/rust/issues/44662#issuecomment-421596088.

5 years agoRollup merge of #53652 - oconnor663:copy_in_place, r=alexcrichton
Pietro Albini [Sat, 22 Sep 2018 07:56:24 +0000 (09:56 +0200)]
Rollup merge of #53652 - oconnor663:copy_in_place, r=alexcrichton

define copy_within on slices

This is a safe wrapper around `ptr::copy`, for regions within a single slice. Previously, safe in-place copying was only available as a side effect of `Vec::drain`.

I've wanted this API a couple times in the past, and I figured I'd just whip up a PR to help discuss it. It's possible something like this exists elsewhere and I just missed it. It might also be a big enough addition to warrant an RFC, I'm not sure.

5 years agoAuto merge of #54334 - steveklabnik:update-cargo, r=alexcrichton
bors [Sat, 22 Sep 2018 02:18:17 +0000 (02:18 +0000)]
Auto merge of #54334 - steveklabnik:update-cargo, r=alexcrichton

update cargo

This pulls in https://github.com/rust-lang/cargo/pull/6052, which is needed for the edition preview, and will be backported to beta as well.

5 years agoAuto merge of #54223 - pnkfelix:issue-53764-uiify-run-pass, r=nikomatsakis
bors [Fri, 21 Sep 2018 20:54:57 +0000 (20:54 +0000)]
Auto merge of #54223 - pnkfelix:issue-53764-uiify-run-pass, r=nikomatsakis

`ui`ify run-pass

This addresses the remainder of #53764 by first converting `src/test/run-pass` into another `ui`-style test suite, and then turning on `compare-mode=nll` for that new suite.

After this lands, we can address #54047 for the short term by moving all the `src/test/ui/run-pass` tests back to `src/test/run-pass`.

(Longer term, the compiler team's current (hypothetical sketch of a) plan (see [1][], [2][]) is unify all the tests by embedding these meta-properties like "// run-pass` into their headers explicitly and dropping the significance of their location on the file system.)

[1]: https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/subject/weekly.20meeting.202018-09-13/near/133889370
[2]: https://github.com/rust-lang/rust/issues/54047#issuecomment-421030356

5 years agoUpdate Cargo
Alex Crichton [Thu, 20 Sep 2018 21:37:53 +0000 (14:37 -0700)]
Update Cargo

This commit brings in a few Cargo updates

* Updates Cargo with experimental HTTP/2 support - a post on the forums
  will be made about testing this when available.
* Bumps Cargo's own version number

5 years agoAllow unused_imports lint on test where lint only fires on non-linux targets...
Felix S. Klock II [Fri, 21 Sep 2018 10:45:23 +0000 (12:45 +0200)]
Allow unused_imports lint on test where lint only fires on non-linux targets...

5 years agoAllow dead_code lint on some tests where the lint only fires on non-x86 targets...
Felix S. Klock II [Wed, 19 Sep 2018 14:28:06 +0000 (16:28 +0200)]
Allow dead_code lint on some tests where the lint only fires on non-x86 targets...

5 years agoAdded comment above `Mode::RunPass` noting that it now behaves like `Mode::Ui`.
Felix S. Klock II [Wed, 19 Sep 2018 09:21:28 +0000 (11:21 +0200)]
Added comment above `Mode::RunPass` noting that it now behaves like `Mode::Ui`.

5 years agoMake the `// skip-codegen` property apply to ui tests too.
Felix S. Klock II [Wed, 19 Sep 2018 09:17:43 +0000 (11:17 +0200)]
Make the `// skip-codegen` property apply to ui tests too.

5 years agoAdded expected (compile-time) outputs.
Felix S. Klock II [Mon, 17 Sep 2018 09:54:33 +0000 (11:54 +0200)]
Added expected (compile-time) outputs.

* In the case of `derive-same-struct`, it seemed cleaner to add the
  output than to try to modify the macro itself (which is where the
  output is coming from).

* In the case of `custom-derive-partial-eq`, it was just easier to add
  the output than to attempt to port the test to use a procedural
  macro.

5 years agoAdd `Rustc` prefixes to `derive(Decodable, Encodable)`.
Felix S. Klock II [Mon, 17 Sep 2018 09:48:20 +0000 (11:48 +0200)]
Add `Rustc` prefixes to `derive(Decodable, Encodable)`.

As a bit of a hack, make `rustc_serialize` an alias of the private
`serialize` crate, just so the new derive continues working.

Fix #54287.

5 years agoAllow various lints in `src/test/run-pass-fulldeps/` so that it can continue under...
Felix S. Klock II [Mon, 17 Sep 2018 09:18:35 +0000 (11:18 +0200)]
Allow various lints in `src/test/run-pass-fulldeps/` so that it can continue under ui test mode.

(One of them led me to file rust-lang/rust#54288.)

5 years agoyou can have `// compile-pass` markers in headers of `compile-fail/` tests.
Felix S. Klock II [Mon, 17 Sep 2018 08:43:05 +0000 (10:43 +0200)]
you can have `// compile-pass` markers in headers of `compile-fail/` tests.

(It seems only `compile-fail-fulldeps/` exercises this functionality,
unfortunately.)

5 years agoSimilar to above, failed to notice that `Mode::Incremental` delegates to `run_{rpass...
Felix S. Klock II [Sat, 15 Sep 2018 05:01:47 +0000 (07:01 +0200)]
Similar to above, failed to notice that `Mode::Incremental` delegates to `run_{rpass,rfail,cfail}_test`.

(Also, maybe we should revise the names to make it clear that sometimes "cfail" means "cpass"...)

5 years agoMark `ParseFail` as tests that are not expected to compile.
Felix S. Klock II [Sat, 15 Sep 2018 04:52:18 +0000 (06:52 +0200)]
Mark `ParseFail` as tests that are not expected to compile.

(I did not notice earlier that `ParseFail` delegates to `fn run_cfail_test`.)

5 years agoRun the newly `ui`-ified run-pass tests under `compare-mode=nll` as well.
Felix S. Klock II [Fri, 14 Sep 2018 11:18:02 +0000 (13:18 +0200)]
Run the newly `ui`-ified run-pass tests under `compare-mode=nll` as well.

Fix #53764.

5 years agoAdd expected output for compiler to tests of optimization-fuel-{0,1}.rs.
Felix S. Klock II [Fri, 14 Sep 2018 11:11:14 +0000 (13:11 +0200)]
Add expected output for compiler to tests of optimization-fuel-{0,1}.rs.

5 years agoIgnore the output itself on `rustc-rust-log.rs` (added in rust-lang/rust#42737).
Felix S. Klock II [Fri, 14 Sep 2018 11:10:36 +0000 (13:10 +0200)]
Ignore the output itself on `rustc-rust-log.rs` (added in rust-lang/rust#42737).

5 years agoWorkaround rust-lang/rust#54222 by just ignoring the warning about the linker flag.
Felix S. Klock II [Fri, 14 Sep 2018 10:57:42 +0000 (12:57 +0200)]
Workaround rust-lang/rust#54222 by just ignoring the warning about the linker flag.

5 years agoAllow various lints as part of ui-ifying `src/test/run-pass` suite.
Felix S. Klock II [Fri, 14 Sep 2018 10:20:28 +0000 (12:20 +0200)]
Allow various lints as part of ui-ifying `src/test/run-pass` suite.

5 years agoProvide way for ui tests to opt out of having their output checked.
Felix S. Klock II [Fri, 14 Sep 2018 10:18:02 +0000 (12:18 +0200)]
Provide way for ui tests to opt out of having their output checked.

Namely, this adds support for:

 * `// dont-check-compiler-stdout`, and
 * `// dont-check-compiler-stderr`.

Obviously almost all ui tests wont want to opt into these, since the whole point
of a ui test is to check the compiler ui. However, since this PR is converting
run-pass into (another set of) ui tests, these header options make sense in that
context.

(Also this puts us into a better position for eventually turning
*every* test suite into a ui test suite, by making ui-ness the default
and forcing tests to opt out explicitly.)

5 years agoSupport `// skip-codegen` in header of ui tests
Felix S. Klock II [Fri, 14 Sep 2018 10:17:30 +0000 (12:17 +0200)]
Support `// skip-codegen` in header of ui tests

(just like how they behaved under previous run-pass semantics)

5 years agoMake `src/test/run-pass/` act like an alternative `ui` test suite.
Felix S. Klock II [Fri, 14 Sep 2018 09:42:32 +0000 (11:42 +0200)]
Make `src/test/run-pass/` act like an alternative `ui` test suite.

5 years agoSimplify slice's first(_mut) and last(_mut) with get
ljedrz [Fri, 21 Sep 2018 11:06:44 +0000 (13:06 +0200)]
Simplify slice's first(_mut) and last(_mut) with get

5 years agoCompress `Liveness` data some more.
Nicholas Nethercote [Fri, 21 Sep 2018 10:42:49 +0000 (20:42 +1000)]
Compress `Liveness` data some more.

Profiling shows that the `(reader, writer, used)` triples used by
liveness analysis almost always have invalid `reader` and `writer`
fields. We can take advantage of this knowledge to use a compressed
representation for them, falling back to a secondary table for the
uncommon cases.

This change reduces instruction counts on numerous benchmarks, the best
by 16%. It also reduces max-rss on numerous benchmarks, the best by 38%.

The patch also renames these triples from `Users` to `RWU`, because it's
confusing having a type whose name is plural and then used within
vectors whose names are also plural.

5 years agoAuto merge of #54399 - alexcrichton:fix-bug, r=steveklabnik
bors [Fri, 21 Sep 2018 10:30:24 +0000 (10:30 +0000)]
Auto merge of #54399 - alexcrichton:fix-bug, r=steveklabnik

std: Check for overflow in `str::repeat`

This commit fixes a buffer overflow issue in the standard library
discovered by Scott McMurray where if a large number was passed to
`str::repeat` it may cause and out of bounds write to the buffer of a `Vec`.
This bug was accidentally introduced in #48657 when optimizing the
`str::repeat` function. The bug affects stable Rust releases 1.26.0 to
1.29.0. We plan on backporting this fix to create a 1.29.1 release, and
the 1.30.0 release onwards will include this fix.

The fix in this commit is to introduce a deterministic panic in the case of
capacity overflow. When repeating a slice where the resulting length is larger
than the address space, there’s no way it can succeed anyway!

The standard library and surrounding libraries were briefly checked to see if
there were othere instances of preallocating a vector with a calculation that
may overflow. No instances of this bug (out of bounds write due to a calculation
overflow) were found at this time.

Note that this commit is the first steps towards fixing this issue,
we'll be making a formal post to the Rust security list once these
commits have been merged.

5 years agoDetect `for _ in in bar {}` typo
Esteban Küber [Wed, 19 Sep 2018 23:23:21 +0000 (16:23 -0700)]
Detect `for _ in in bar {}` typo

5 years agoadd applicability to span suggestion call
Joseph Post [Fri, 21 Sep 2018 01:06:03 +0000 (20:06 -0500)]
add applicability to span suggestion call

5 years agoRemove incidental notes
memoryruins [Fri, 21 Sep 2018 02:07:57 +0000 (22:07 -0400)]
Remove incidental notes

5 years agoparser: Tweak function parameter parsing to avoid rollback on succesfull path
Vadim Petrochenkov [Fri, 21 Sep 2018 01:26:36 +0000 (04:26 +0300)]
parser: Tweak function parameter parsing to avoid rollback on succesfull path

5 years agoAdd test for deref recursion limit printing twice
memoryruins [Fri, 21 Sep 2018 01:14:05 +0000 (21:14 -0400)]
Add test for deref recursion limit printing twice

5 years agoAuto merge of #54389 - kennytm:rollup, r=kennytm
bors [Thu, 20 Sep 2018 22:47:34 +0000 (22:47 +0000)]
Auto merge of #54389 - kennytm:rollup, r=kennytm

Rollup of 15 pull requests

Successful merges:

 - #52813 (Duration div mul extras)
 - #53470 (Warn about metadata loader errors)
 - #54233 (Remove LLVM 3.9 workaround.)
 - #54257 (Switch wasm math symbols to their original names)
 - #54258 (Enable fatal warnings for the wasm32 linker)
 - #54266 (Update LLVM to fix "bool" arguments on PPC32)
 - #54290 (Switch linker for aarch64-pc-windows-msvc from LLD to MSVC)
 - #54292 (Suggest array indexing when tuple indexing on an array)
 - #54295 (A few cleanups and minor improvements to rustc/traits)
 - #54298 (miri: correctly compute expected alignment for field)
 - #54333 (Update The Book to latest)
 - #54337 (Remove unneeded clone() from tests in librustdoc)
 - #54346 (rustc: future-proof error reporting for polymorphic constants in types.)
 - #54362 (Pass --batch to gdb)
 - #54367 (Add regression test for thread local static mut borrows)

5 years agoUse no_default_libraries for all NetBSD flavors
bgermann [Thu, 20 Sep 2018 18:00:02 +0000 (20:00 +0200)]
Use no_default_libraries for all NetBSD flavors

The no_default_libraries was introduced in #28578 because the
NetBSD-based rumprun needed to disable the link flag.
This moves the definition to be used by all NetBSD linker flavors to
close #49627.

A different solution would be adding -lc but as there is no platform
with explicit -lc, this approach is used.

5 years agostd: Check for overflow in `str::repeat`
Alex Crichton [Thu, 20 Sep 2018 16:31:14 +0000 (09:31 -0700)]
std: Check for overflow in `str::repeat`

This commit fixes a buffer overflow issue in the standard library
discovered by Scott McMurray where if a large number was passed to
`str::repeat` it may cause and out of bounds write to the buffer of a `Vec`.
This bug was accidentally introduced in #48657 when optimizing the
`str::repeat` function. The bug affects stable Rust releases 1.26.0 to
1.29.0. We plan on backporting this fix to create a 1.29.1 release, and
the 1.30.0 release onwards will include this fix.

The fix in this commit is to introduce a deterministic panic in the case of
capacity overflow. When repeating a slice where the resulting length is larger
than the address space, there’s no way it can succeed anyway!

The standard library and surrounding libraries were briefly checked to see if
there were othere instances of preallocating a vector with a calculation that
may overflow. No instances of this bug (out of bounds write due to a calculation
overflow) were found at this time.

Note that this commit is the first steps towards fixing this issue,
we'll be making a formal post to the Rust security list once these
commits have been merged.

5 years agoRollup merge of #54367 - spastorino:add-thread-local-static-borrow-test, r=pnkfelix
kennytm [Thu, 20 Sep 2018 13:36:36 +0000 (21:36 +0800)]
Rollup merge of #54367 - spastorino:add-thread-local-static-borrow-test, r=pnkfelix

Add regression test for thread local static mut borrows

FIXME(#54366) - We probably shouldn't allow `#[thread_local] static mut` to get a `'static` lifetime, but for now, we should at least test the behavior that `rustc` currently has.

5 years agoRollup merge of #54362 - tromey:travis-gdb-batch-mode, r=nikomatsakis
kennytm [Thu, 20 Sep 2018 13:36:35 +0000 (21:36 +0800)]
Rollup merge of #54362 - tromey:travis-gdb-batch-mode, r=nikomatsakis

Pass --batch to gdb

In one of my travis builds, I was surprised to find that the gdb
pager was in use and caused travis to time out.  Adding `--batch`
to the gdb invocation will disable the pager.  Note that the
`-ex q` is retained, to make sure gdb exits with status 0, just in
case `set -e` is in effect somehow.

5 years agoRollup merge of #54346 - eddyb:constant-horror, r=nikomatsakis
kennytm [Thu, 20 Sep 2018 13:36:34 +0000 (21:36 +0800)]
Rollup merge of #54346 - eddyb:constant-horror, r=nikomatsakis

rustc: future-proof error reporting for polymorphic constants in types.

Currently, we have 3 categories of positions where a constant can be used (`const` and associated `const` can be considered "aliases" for an expression):
* runtime - if the function is polymorphic, we could even just warn and emit a panic
* `static` - always monomorphic, so we can error at definition site
* type-system - **must** *enforce* evaluation success where it was written

That last one is the tricky one, because we can't easily turn *the presence* a type with an erroring const into a runtime panic, and we'd have to do post-monomorphization errors (which we'd rather avoid).

<hr/>

The solution we came up with, as part of the plans for const generics, is to require successful evaluation wherever a constant shows up in a type (currently in array lengths, and values for const parameters in the future), *through* the WF system, which means that in certain situations (e.g. function signatures) we can assume evaluation *will* succeed, and require it of users (e.g. callers) instead (we've been doing this for lifetime bounds, for a long time now, and it's pretty ergonomic).

So once we do sth about #43408, this example *should* work, by propagating the responsability, to callers of `foo::<X>`, of proving `std::mem::size_of::<X>()` succeeds (and those callers can do the same).
```rust
pub fn foo<T>(_: [u8; std::mem::size_of::<T>()]) {}
```
But this one *shouldn't*, as there is nothing in the signature/bounds to indicate it:
```rust
pub fn bar<T>() {
    let _: [u8; std::mem::size_of::<T>()];
}
```

<hr/>

I've come across some bit of code in the compiler that ignores const-evaluation errors *even when* they come from a constant in a type, and I've added an ICE *only when* there are no other reported errors (e.g. it's fine to ignore evaluation errors if the constant doesn't even type-check).

r? @nikomatsakis cc @oli-obk @RalfJung @Centril

5 years agoRollup merge of #54337 - ericho:remove_clone_tests, r=Mark-Simulacrum
kennytm [Thu, 20 Sep 2018 13:36:32 +0000 (21:36 +0800)]
Rollup merge of #54337 - ericho:remove_clone_tests, r=Mark-Simulacrum

Remove unneeded clone() from tests in librustdoc

The expected.clone() calls were not needed for the tests. This is
just to keep consistency between the test cases.

5 years agoRollup merge of #54333 - steveklabnik:update-book, r=frewsxcv
kennytm [Thu, 20 Sep 2018 13:36:31 +0000 (21:36 +0800)]
Rollup merge of #54333 - steveklabnik:update-book, r=frewsxcv

Update The Book to latest

Let's check out https://github.com/rust-lang/book/pull/1505 on nightly.

5 years agoAuto merge of #53162 - QuietMisdreavus:crouching-impl-hidden-trait, r=GuillaumeGomez
bors [Thu, 20 Sep 2018 14:32:26 +0000 (14:32 +0000)]
Auto merge of #53162 - QuietMisdreavus:crouching-impl-hidden-trait, r=GuillaumeGomez

rustdoc: collect trait impls as an early pass

Fixes https://github.com/rust-lang/rust/issues/52545, fixes https://github.com/rust-lang/rust/issues/41480, fixes https://github.com/rust-lang/rust/issues/36922

Right now, rustdoc pulls all its impl information by scanning a crate's HIR for any items it finds. However, it doesn't recurse into anything other than modules, preventing it from seeing trait impls that may be inside things like functions or consts. Thanks to https://github.com/rust-lang/rust/pull/53002, now these items actually *exist* for rustdoc to see, but they still weren't getting collected for display.

But there was a secret. Whenever we pull in an item from another crate, we don't have any of its impls in the local HIR, so instead we ask the compiler for *everything* and filter out after the fact. This process is only triggered if there's a cross-crate re-export in the crate being documented, which can sometimes leave this info out of the docs. This PR instead moves this collection into an early pass, which occurs immediately after crate cleaning, so that that collection occurs regardless. In addition, by including the HIR's own `trait_impls` in addition to the existing `all_trait_implementations` calls, we can collect all these tricky trait impls without having to scan for them!

5 years agoRollup merge of #54298 - RalfJung:miri-field-align, r=eddyb
kennytm [Thu, 20 Sep 2018 13:36:29 +0000 (21:36 +0800)]
Rollup merge of #54298 - RalfJung:miri-field-align, r=eddyb

miri: correctly compute expected alignment for field

This is the miri version of https://github.com/rust-lang/rust/pull/53998. A test is added by https://github.com/solson/miri/pull/457.

r? @eddyb

5 years agoRollup merge of #54295 - ljedrz:cleanups_rustc_traits, r=nikomatsakis
kennytm [Thu, 20 Sep 2018 13:36:27 +0000 (21:36 +0800)]
Rollup merge of #54295 - ljedrz:cleanups_rustc_traits, r=nikomatsakis

A few cleanups and minor improvements to rustc/traits

It's a little bigger than usual, so bear with me ^^:

- introduce `TyCtxt::all_impls` and use it to avoid inefficiently allocating push loops
- modify `ArgKind::from_expected_ty` to take an `Option<Span>` argument to make it more versatile
- replace `ArgKind::Arg("_".to_owned(), "_".to_owned())` with `ArgKind::empty`
- move early `return`s earlier where possible
- if all branches of a `match` end with the same expression, move it after it
- change a hacky `match` expression to an `if else` chain
- move the `push` out from a push loop closure to reduce the number of allocations
- correct the vector size for `pretty_predicates` (under `specialize`)
- take advantage of the fact that `if else` is an expression
- prefer `cloned()` to `map(|&x| x)` and `map(|x| *x)`
- prefer `vec![x; y.len()]` to `y.map(|_| x).collect()`
- use `unwrap_or_else` instead of `match` where applicable
- use `if let` instead of `match` when only one branch matters
- prefer `to_owned` to `to_string` for string literals
- remove explicit `return`s
- remove superfluous braces
- whitespace fixes
- several other minor improvements

5 years agoRollup merge of #54292 - memoryruins:issue-53712, r=estebank
kennytm [Thu, 20 Sep 2018 13:36:26 +0000 (21:36 +0800)]
Rollup merge of #54292 - memoryruins:issue-53712, r=estebank

Suggest array indexing when tuple indexing on an array

Closes #53712

r? @varkor
cc @estebank

5 years agoRollup merge of #54290 - michaelwoerister:aarch64-back-to-msvc, r=alexcrichton
kennytm [Thu, 20 Sep 2018 13:36:25 +0000 (21:36 +0800)]
Rollup merge of #54290 - michaelwoerister:aarch64-back-to-msvc, r=alexcrichton

Switch linker for aarch64-pc-windows-msvc from LLD to MSVC

The MSVC linker does not seem to have the same problems with Rust symbols that LLD currently has on Windows (see https://github.com/rust-lang/rust/issues/54190#issuecomment-421288625). This PR makes MSVC the default linker for `aarch64-pc-windows-msvc`.

r? @alexcrichton

5 years agoRollup merge of #54266 - LionNatsu:master, r=nikomatsakis
kennytm [Thu, 20 Sep 2018 13:36:23 +0000 (21:36 +0800)]
Rollup merge of #54266 - LionNatsu:master, r=nikomatsakis

Update LLVM to fix "bool" arguments on PPC32

Fixes #50960.

5 years agoRollup merge of #54258 - alexcrichton:lld-fatal-warnings, r=eddyb
kennytm [Thu, 20 Sep 2018 13:36:22 +0000 (21:36 +0800)]
Rollup merge of #54258 - alexcrichton:lld-fatal-warnings, r=eddyb

Enable fatal warnings for the wasm32 linker

Historically LLD has emitted warnings for various reasons but all the bugs have
since been fixed (yay!) and by enabling fatal warnings we should be able to head
off bugs like #53390 sooner.

5 years agoRollup merge of #54257 - alexcrichton:wasm-math-symbols, r=TimNN
kennytm [Thu, 20 Sep 2018 13:36:21 +0000 (21:36 +0800)]
Rollup merge of #54257 - alexcrichton:wasm-math-symbols, r=TimNN

Switch wasm math symbols to their original names

The names `Math_*` were given to help undefined symbol messages indicate how to
implement them, but these are all implemented in compiler-rt now so there's no
need to rename them! This change should make it so wasm binaries by default, no
matter the math symbols used, will not have unresolved symbols.

5 years agoRollup merge of #54233 - irinagpopa:llvm-3.9, r=tromey
kennytm [Thu, 20 Sep 2018 13:36:19 +0000 (21:36 +0800)]
Rollup merge of #54233 - irinagpopa:llvm-3.9, r=tromey

Remove LLVM 3.9 workaround.

5 years agoRollup merge of #53470 - bjorn3:warn_metadata_errors, r=alexcrichton
kennytm [Thu, 20 Sep 2018 13:36:18 +0000 (21:36 +0800)]
Rollup merge of #53470 - bjorn3:warn_metadata_errors, r=alexcrichton

Warn about metadata loader errors

Output when writing corrupting to libcore.rlib

```
warning: no metadata found: failed to read rlib metadata in '/Users/bjorn/Documents/rust_fork/build/x86_64-apple-darwin/stage1-std/x86_64-apple-darwin/release/deps/libcore-857d662d379c5d0c.rlib': File too small to be an archive

error[E0463]: can't find crate for `core`

error: aborting due to previous error
```

Fixes #53381

5 years agoRollup merge of #52813 - newpavlov:duration_mul_div_extras, r=alexcrichton
kennytm [Thu, 20 Sep 2018 13:36:16 +0000 (21:36 +0800)]
Rollup merge of #52813 - newpavlov:duration_mul_div_extras, r=alexcrichton

Duration div mul extras

Successor of #52556.

This PR adds the following `impl`s:
- `impl Mul<Duration> for u32` (to allow `10*SECOND` in addition to `SECOND*10`)
- `impl Mul<f64> for Duration` (to allow `2.5*SECOND` vs `2*SECOND + 500*MILLISECOND`)
- `impl Mul<Duration> for f64`
- `impl MulAssign<f64> for Duration`
- `impl Div<f64> for Duration`
- `impl DivAssign<f64> for Duration`
- `impl Div<Duration> for Duration` (`Output = f64`, can be useful e.g. for `duration/MINUTE`)

`f64` is chosen over `f32` to minimize rounding errors. (52 bits fraction precision vs `Duration`'s ~94 bit)

5 years agofix intra-links for trait impls
QuietMisdreavus [Wed, 19 Sep 2018 14:28:49 +0000 (09:28 -0500)]
fix intra-links for trait impls

5 years agofilter collected trait impls against items in the crate
QuietMisdreavus [Tue, 18 Sep 2018 20:42:35 +0000 (15:42 -0500)]
filter collected trait impls against items in the crate

5 years agoshuffle ownership of `external_traits`
QuietMisdreavus [Sun, 2 Sep 2018 02:20:39 +0000 (21:20 -0500)]
shuffle ownership of `external_traits`

constraints:

- clean/inline.rs needs this map to fill in traits when inlining
- fold.rs needs this map to allow passes to fold trait items
- html/render.rs needs this map to seed the Cache.traits map of all
  known traits

The first two are the real problem, since `DocFolder` only operates on
`clean::Crate` but `clean/inline.rs` only sees the `DocContext`. The
introduction of early passes means that these two now exist at the same
time, so they need to share ownership of the map. Even better, the use
of `Crate` in a rustc thread pool means that it needs to be Sync, so it
can't use `Lrc<Lock>` to manually activate thread-safety.

`parking_lot` is reused from elsewhere in the tree to allow use of its
`ReentrantMutex`, as the relevant parts of rustdoc are still
single-threaded and this allows for easier use in that context.

5 years agorefactor: move `access_levels` into RenderInfo
QuietMisdreavus [Thu, 30 Aug 2018 21:46:10 +0000 (16:46 -0500)]
refactor: move `access_levels` into RenderInfo

5 years agocollect auto-/blanket-impls during collect-trait-impls
QuietMisdreavus [Thu, 30 Aug 2018 17:10:15 +0000 (12:10 -0500)]
collect auto-/blanket-impls during collect-trait-impls

5 years agodon't index trait impls if the trait isn't also documented
QuietMisdreavus [Tue, 28 Aug 2018 16:33:45 +0000 (11:33 -0500)]
don't index trait impls if the trait isn't also documented

5 years agoadd more tests for traits-in-non-module-scope
QuietMisdreavus [Mon, 27 Aug 2018 17:42:43 +0000 (12:42 -0500)]
add more tests for traits-in-non-module-scope

5 years agodon't check visibility when inlining local impls
QuietMisdreavus [Tue, 21 Aug 2018 21:22:20 +0000 (16:22 -0500)]
don't check visibility when inlining local impls

those get handled properly in strip-hidden anyway

5 years agoswap external_traits into the crate before running strip_hidden
QuietMisdreavus [Wed, 15 Aug 2018 15:41:15 +0000 (10:41 -0500)]
swap external_traits into the crate before running strip_hidden

5 years agopull impl generics from HIR if available
QuietMisdreavus [Tue, 14 Aug 2018 22:38:41 +0000 (17:38 -0500)]
pull impl generics from HIR if available

5 years agocollect impl items from the HIR if available
QuietMisdreavus [Tue, 14 Aug 2018 21:42:34 +0000 (16:42 -0500)]
collect impl items from the HIR if available

5 years agopull local types from the HIR instead of tcx
QuietMisdreavus [Tue, 14 Aug 2018 20:19:15 +0000 (15:19 -0500)]
pull local types from the HIR instead of tcx

5 years agohandle local names when registering FQNs
QuietMisdreavus [Tue, 14 Aug 2018 19:44:45 +0000 (14:44 -0500)]
handle local names when registering FQNs

5 years agoadd a bunch of debug prints
QuietMisdreavus [Tue, 14 Aug 2018 19:43:03 +0000 (14:43 -0500)]
add a bunch of debug prints

5 years agoundo some tweaks to build_impl
QuietMisdreavus [Tue, 14 Aug 2018 19:41:07 +0000 (14:41 -0500)]
undo some tweaks to build_impl

5 years agodon't record an external trait if it's not external
QuietMisdreavus [Tue, 14 Aug 2018 17:08:12 +0000 (12:08 -0500)]
don't record an external trait if it's not external

5 years agoonly move access_levels/external_traits after early passes
QuietMisdreavus [Fri, 10 Aug 2018 22:24:40 +0000 (17:24 -0500)]
only move access_levels/external_traits after early passes

5 years agoignore rustdoc/doc-proc-macro on stage1
QuietMisdreavus [Tue, 7 Aug 2018 20:17:27 +0000 (15:17 -0500)]
ignore rustdoc/doc-proc-macro on stage1

5 years agoprint local inlined consts via the HIR map
QuietMisdreavus [Tue, 7 Aug 2018 16:30:57 +0000 (11:30 -0500)]
print local inlined consts via the HIR map

5 years agorustdoc: collect trait impls as an early pass
QuietMisdreavus [Tue, 7 Aug 2018 15:10:05 +0000 (10:10 -0500)]
rustdoc: collect trait impls as an early pass

5 years agoAuto merge of #54255 - spastorino:use-of-moved-value-error, r=nikomatsakis
bors [Thu, 20 Sep 2018 09:02:46 +0000 (09:02 +0000)]
Auto merge of #54255 - spastorino:use-of-moved-value-error, r=nikomatsakis

Inspect parents paths when checking for moves

Closes #52669

5 years agoAdd documentation about the edition flag
Philip Munksgaard [Wed, 19 Sep 2018 14:35:25 +0000 (16:35 +0200)]
Add documentation about the edition flag

5 years agoAdd a documentation banner for edition specific code
Philip Munksgaard [Wed, 19 Sep 2018 09:27:36 +0000 (11:27 +0200)]
Add a documentation banner for edition specific code

5 years agoAdd test for doctest edition support
Philip Munksgaard [Tue, 18 Sep 2018 09:44:28 +0000 (11:44 +0200)]
Add test for doctest edition support

5 years agoadd tests for copy_within
Jack O'Connor [Wed, 19 Sep 2018 16:03:16 +0000 (12:03 -0400)]
add tests for copy_within

5 years agoAuto merge of #54241 - vi:suggest_with_applicability, r=estebank
bors [Thu, 20 Sep 2018 06:34:22 +0000 (06:34 +0000)]
Auto merge of #54241 - vi:suggest_with_applicability, r=estebank

Remove usages of span_suggestion without Applicability

Use `Applicability::Unspecified` for all of them instead.

Shall deprecations for the non-`_with_applicability` functions be added?

Shall clippy be addressed somehow?

r? @estebank

5 years agodefine copy_within on slices
Jack O'Connor [Thu, 23 Aug 2018 22:22:53 +0000 (18:22 -0400)]
define copy_within on slices

This is a safe wrapper around ptr::copy, for regions within a single
slice. Previously, safe in-place copying was only available as a side
effect of Vec::drain.

5 years agoAuto merge of #54301 - alexcrichton:update-curl, r=Mark-Simulacrum
bors [Thu, 20 Sep 2018 02:51:56 +0000 (02:51 +0000)]
Auto merge of #54301 - alexcrichton:update-curl, r=Mark-Simulacrum

Update some `*-sys` dependencies of Cargo/RLS

This is intended to help solve #54206 on nightly where the RLS on MinGW is
having build issues with accidentally building a `curl` library which links to
pthread symbols on Windows (where it should use native mutex locking instead).
The build system for these `*-sys` crates have all been rewritten to be based on
`cc` to bypass native build systems and platform detection to make sure we
configure them correctly.

5 years agoMake 'proc_macro::MultiSpan' public.
Sergio Benitez [Thu, 20 Sep 2018 02:22:21 +0000 (19:22 -0700)]
Make 'proc_macro::MultiSpan' public.

5 years agoUpdate some `*-sys` dependencies of Cargo/RLS
Alex Crichton [Mon, 17 Sep 2018 16:52:02 +0000 (09:52 -0700)]
Update some `*-sys` dependencies of Cargo/RLS

This is intended to help solve #54206 on nightly where the RLS on MinGW is
having build issues with accidentally building a `curl` library which links to
pthread symbols on Windows (where it should use native mutex locking instead).
The build system for these `*-sys` crates have all been rewritten to be based on
`cc` to bypass native build systems and platform detection to make sure we
configure them correctly.

5 years agoAuto merge of #54211 - nnethercote:keccak-Liveness-memory, r=nikomatsakis
bors [Thu, 20 Sep 2018 00:16:46 +0000 (00:16 +0000)]
Auto merge of #54211 - nnethercote:keccak-Liveness-memory, r=nikomatsakis

Split `Liveness::users` into three.

This reduces memory usage on some benchmarks because no space is wasted
for padding. For a `check-clean` build of `keccak` it reduces `max-rss`
by 20%.

r? @nikomatsakis, but I want to do a perf run. Locally, I had these results:
- instructions: slight regression
- max-rss: big win on "Clean" builds
- faults: big win on "Clean" and "Nll" builds
- wall-time: small win on "Clean" and "Nll" builds

So I want to see how a different machine compares.

5 years agoadd -Zui-testing to rustdoc
QuietMisdreavus [Wed, 19 Sep 2018 23:39:39 +0000 (18:39 -0500)]
add -Zui-testing to rustdoc

5 years agoImprove handling of type bounds in `bit_set.rs`.
Nicholas Nethercote [Tue, 18 Sep 2018 07:03:24 +0000 (17:03 +1000)]
Improve handling of type bounds in `bit_set.rs`.

Currently, `BitSet` doesn't actually know its own domain size; it just
knows how many words it contains. To improve things, this commit makes
the following changes.

- It changes `BitSet` and `SparseBitSet` to store their own domain size,
  and do more precise bounds and same-size checks with it. It also
  changes the signature of `BitSet::to_string()` (and puts it within
  `impl ToString`) now that the domain size need not be passed in from
  outside.

- It uses `derive(RustcDecodable, RustcEncodable)` for `BitSet`. This
  required adding code to handle `PhantomData` in `libserialize`.

- As a result, it removes the domain size from `HybridBitSet`, making a
  lot of that code nicer.

- Both set_up_to() and clear_above() were overly general, working with
  arbitrary sizes when they are only needed for the domain size. The
  commit removes the former, degeneralizes the latter, and removes the
  (overly general) tests.

- Changes `GrowableBitSet::grow()` to `ensure()`, fixing a bug where a
  (1-based) domain size was confused with a (0-based) element index.

- Changes `BitMatrix` to store its row count, and do more precise bounds
  checks with it.

- Changes `ty_params` in `select.rs` from a `BitSet` to a
  `GrowableBitSet` because it repeatedly failed the new, more precise
  bounds checks. (Changing the type was simpler than computing an
  accurate domain size.)

- Various other minor improvements.

5 years agoAdd regression test for thread local static mut borrows
Santiago Pastorino [Wed, 19 Sep 2018 20:53:12 +0000 (17:53 -0300)]
Add regression test for thread local static mut borrows

5 years agoAuto merge of #54174 - parched:park, r=alexcrichton
bors [Wed, 19 Sep 2018 17:08:28 +0000 (17:08 +0000)]
Auto merge of #54174 - parched:park, r=alexcrichton

Fix `thread` `park`/`unpark` synchronization

Previously the code below would not be guaranteed to exit when the
second unpark took the `return, // already unparked` path because there
was no write to synchronize with a read in `park`.

EDIT: doesn't actually require third thread
```
use std::sync::atomic::{AtomicBool, Ordering};
use std::thread::{current, spawn, park};

static FLAG: AtomicBool = AtomicBool::new(false);

fn main() {
    let thread_0 = current();
    spawn(move || {
        thread_0.unpark();
        FLAG.store(true, Ordering::Relaxed);
        thread_0.unpark();
    });

    while !FLAG.load(Ordering::Relaxed) {
        park();
    }
}
```

I have some other ideas on how to improve the performance of `park` and `unpark` using fences, avoiding any atomic RMW when the state is already `NOTIFIED`, and also how to avoid calling `notify_one` without the mutex locked. But I need to write some micro benchmarks first, so I'll submit those changes at a later date if they prove to be faster.

Fixes https://github.com/rust-lang/rust/issues/53366 I hope.

5 years agoPass --batch to gdb
Tom Tromey [Wed, 19 Sep 2018 15:46:22 +0000 (09:46 -0600)]
Pass --batch to gdb

In one of my travis builds, I was surprised to find that the gdb
pager was in use and caused travis to time out.  Adding `--batch`
to the gdb invocation will disable the pager.  Note that the
`-ex q` is retained, to make sure gdb exits with status 0, just in
case `set -e` is in effect somehow.

5 years agoAdded tracking issue, fixed check, 1.30 -> 1.31
Artyom Pavlov [Wed, 19 Sep 2018 15:40:33 +0000 (18:40 +0300)]
Added tracking issue, fixed check, 1.30 -> 1.31