]> git.lizzy.rs Git - rust.git/log
rust.git
5 years agoRemove support for building against LLVM 4
Nikita Popov [Mon, 5 Nov 2018 13:52:08 +0000 (14:52 +0100)]
Remove support for building against LLVM 4

With emscripten removed in #55626, we no longer need to support
building against LLVM 4.

5 years agoAuto merge of #55515 - QuietMisdreavus:rustdoc-config, r=GuillaumeGomez
bors [Mon, 5 Nov 2018 09:48:46 +0000 (09:48 +0000)]
Auto merge of #55515 - QuietMisdreavus:rustdoc-config, r=GuillaumeGomez

rustdoc: refactor: centralize all command-line argument parsing

This is something i've wanted to do for a while, since we keep having to add new arguments to places like `rust_input` or `core::run_core` whenever we add a new CLI flag or the like. Those functions have inflated up to 11-19, and in some cases hiding away the locations where some CLI flags were being parsed, obscuring their use. Now, we have a central place where all command-line configuration occurs, including argument validation.

One note about the design: i grouped together all the arguments that `html::render::run` needed, so that i could pass them on from compilation in one lump instead of trying to thread through individual items or clone the entire blob ahead of time.

One other thing this adds is that rustdoc also now recognizes all the `-Z` options that rustc does, since we were manually grabbing a few previously. Now we parse a full `DebuggingOptions` struct and hand it directly to rustc when scraping docs.

5 years agoAuto merge of #55681 - matthiaskrgr:clippy, r=oli-obk
bors [Mon, 5 Nov 2018 06:58:10 +0000 (06:58 +0000)]
Auto merge of #55681 - matthiaskrgr:clippy, r=oli-obk

submodules: update clippy from 71ec4ff6 to d8b42690

Fixes clippy toolstate.

Changes:

````
rustup https://github.com/rust-lang/rust/pull/55665 (pass contexts by reference)
Fix typo
Improve clippy_dev help text
RIIR update lints: Generate lint group registrations
Test clippy_dev on CI and fix test
RIIR update lints: Generate modules section
````

5 years agoAuto merge of #55593 - nikic:remove-llvm-4-checks, r=rkruppe
bors [Mon, 5 Nov 2018 01:41:55 +0000 (01:41 +0000)]
Auto merge of #55593 - nikic:remove-llvm-4-checks, r=rkruppe

Remove checks for LLVM < 4.0

While we still have to support LLVM 4.0 for Emscripten, we can drop checks for LLVM >= 4.0 and < 4.0.

5 years agoAuto merge of #55569 - durka:must-use-external-macro, r=alexcrichton
bors [Sun, 4 Nov 2018 22:56:23 +0000 (22:56 +0000)]
Auto merge of #55569 - durka:must-use-external-macro, r=alexcrichton

enforce unused-must-use lint in macros

Fixes #55516 by turning on the UNUSED_MUST_USE lint within macros.

5 years agosubmodules: update clippy from 71ec4ff6 to d8b42690
Matthias Krüger [Sun, 4 Nov 2018 22:49:42 +0000 (23:49 +0100)]
submodules: update clippy from 71ec4ff6 to d8b42690

Fixes clippy toolstate.

Changes:

````
rustup https://github.com/rust-lang/rust/pull/55665 (pass contexts by reference)
Fix typo
Improve clippy_dev help text
RIIR update lints: Generate lint group registrations
Test clippy_dev on CI and fix test
RIIR update lints: Generate modules section
````

5 years agofix formatting
QuietMisdreavus [Sun, 4 Nov 2018 22:44:28 +0000 (16:44 -0600)]
fix formatting

5 years agoadd Debug impls for the Options structs
QuietMisdreavus [Sun, 4 Nov 2018 22:39:24 +0000 (16:39 -0600)]
add Debug impls for the Options structs

5 years agoAuto merge of #55665 - eddyb:by-ref-layout-of, r=oli-obk
bors [Sun, 4 Nov 2018 18:56:43 +0000 (18:56 +0000)]
Auto merge of #55665 - eddyb:by-ref-layout-of, r=oli-obk

rustc_target: pass contexts by reference, not value.

`LayoutOf` now takes `&self` instead of `self`, and so does every method generic over a context that implements `LayoutOf` and/or other traits, like `HasDataLayout`, `HasTyCtxt`, etc.

Originally using by-value `Copy` types was relevant because `TyCtxt` was one of those types, but now `TyCtxt::layout_of` is separate from `LayoutOf`, and `TyCtxt` is not an often used layout context.

Passing these context by reference is a lot nicer for miri, which has `self: &mut EvalContext`, and needed `f(&self)` (that is, creating `&&mut EvalContext` references) for layout purposes.
Now, the `&mut EvalContext` can be passed to a function expecting `&C`, directly.

This should help with #54012 / #55627 (to not need `where &'a T::Cx: LayoutOf` bounds).

r? @nikomatsakis or @oli-obk or @nagisa cc @sunfishcode

5 years agorustc_target: pass contexts by reference, not value.
Eduard-Mihai Burtescu [Sat, 3 Nov 2018 20:57:53 +0000 (22:57 +0200)]
rustc_target: pass contexts by reference, not value.

5 years agoAuto merge of #55393 - oli-obk:immediate_immediately, r=RalfJung
bors [Sun, 4 Nov 2018 15:06:32 +0000 (15:06 +0000)]
Auto merge of #55393 - oli-obk:immediate_immediately, r=RalfJung

Rename `Value` to `Immediate` for miri

r? @RalfJung

5 years agoAuto merge of #55349 - bjorn3:rustc_mir_collect_and_partition_mono_items, r=oli-obk
bors [Sun, 4 Nov 2018 12:20:55 +0000 (12:20 +0000)]
Auto merge of #55349 - bjorn3:rustc_mir_collect_and_partition_mono_items, r=oli-obk

Move collect_and_partition_mono_items to rustc_mir

Most of the logic of it is inside rustc_mir anyway.

Also removes the single function crate rustc_metadata_utils. Based on #55225

5 years agoAuto merge of #55432 - zackmdavis:single_life, r=nikomatsakis
bors [Sun, 4 Nov 2018 09:45:49 +0000 (09:45 +0000)]
Auto merge of #55432 - zackmdavis:single_life, r=nikomatsakis

single life

 * structured ~~autofixable~~ (well, pending #53934 and rust-lang-nursery/rustfix#141) suggestions for the single-use-lifetimes lint in the case of function and method reference args
 * don't consider the anonymous lifetime `'_` as "single-use" (it's intended for exactly this sort of thing)

![single_life](https://user-images.githubusercontent.com/1076988/47613227-3b2b6400-da48-11e8-8efd-cb975ddf537d.png)

r? @nikomatsakis

5 years agoAuto merge of #55455 - estebank:expected-descr, r=michaelwoerister
bors [Sun, 4 Nov 2018 06:56:11 +0000 (06:56 +0000)]
Auto merge of #55455 - estebank:expected-descr, r=michaelwoerister

Use token description in "expected/found" parse messages

Fix #54309.

5 years agoAuto merge of #54861 - rep-nop:find_main_in_doctest, r=estebank
bors [Sun, 4 Nov 2018 01:43:40 +0000 (01:43 +0000)]
Auto merge of #54861 - rep-nop:find_main_in_doctest, r=estebank

rustdoc: Replaces fn main search and extern crate search with proper parsing during doctests.

Fixes #21299.
Fixes #33731.

Let me know if there's any additional changes you'd like made!

5 years agoAuto merge of #55662 - matthiaskrgr:clippy_update, r=oli-obk
bors [Sat, 3 Nov 2018 23:02:04 +0000 (23:02 +0000)]
Auto merge of #55662 - matthiaskrgr:clippy_update, r=oli-obk

submodules: update clippy from a20599ab to 71ec4ff6

Should fix clippy toolstat.

Changes:

````
rustup https://github.com/rust-lang/rust/pull/55330/
Update stderr
Rename test files
Also lint cfg_attr(.., rustfmt::skip)
Add tests from rustfmt::skip test file
Run update_lints.py script
Add test for non-crate-level inner attributes
Differ between inner and outer attributes
Add tests
Add cfg_attr(rustfmt) lint
Addressed comments.
Fix dogfood error.
Added lints `into_iter_on_ref` and `into_iter_on_array`. Fix #1565.
Allow single_match_else
Update stderr
Add copyright statement©
Fix typos
Fix dogfood error
Fix typo and indentation
run update_lints script
Add tests for unknwon_clippy_lints lint
Add new lint: unknwon_clippy_lintsg
clippy: fix pedantic warnings and run clippy::pedantic lints on the codebase.
Fix a false-positive of needless_borrow
UI test cleanup: Extract match_overlapping_arm tests
UI test cleanup: Extract expect_fun_call tests
Add missing code of conduct file
Use slice patterns instead of padding
Fix dogfood and pedantic lints
ci: when installing rust-toolchain-installer-master, install it in debug mode to save some time in ci.
RIIR update lints: Generate deprecated lints
Replace big if/else expression with match
````

5 years agoAuto merge of #55661 - kennytm:fix-exclude, r=alexcrichton
bors [Sat, 3 Nov 2018 20:13:47 +0000 (20:13 +0000)]
Auto merge of #55661 - kennytm:fix-exclude, r=alexcrichton

Fixed the bug in bootstrap where --exclude was ignored for run-pass test

This should fix the 3 hour timeout on AppVeyor which happened a lot recently.

Additionally, further rebalanced the AppVeyor subsets by moving "ui" and "linkchecker" into Set 2.

5 years agosubmodules: update clippy from a20599ab to 71ec4ff6
Matthias Krüger [Sat, 3 Nov 2018 19:13:53 +0000 (20:13 +0100)]
submodules: update clippy from a20599ab to 71ec4ff6

Should fix clippy toolstat.

Changes:

````
rustup https://github.com/rust-lang/rust/pull/55330/
Update stderr
Rename test files
Also lint cfg_attr(.., rustfmt::skip)
Add tests from rustfmt::skip test file
Run update_lints.py script
Add test for non-crate-level inner attributes
Differ between inner and outer attributes
Add tests
Add cfg_attr(rustfmt) lint
Addressed comments.
Fix dogfood error.
Added lints `into_iter_on_ref` and `into_iter_on_array`. Fix #1565.
Allow single_match_else
Update stderr
Add copyright statement©
Fix typos
Fix dogfood error
Fix typo and indentation
run update_lints script
Add tests for unknwon_clippy_lints lint
Add new lint: unknwon_clippy_lintsg
clippy: fix pedantic warnings and run clippy::pedantic lints on the codebase.
Fix a false-positive of needless_borrow
UI test cleanup: Extract match_overlapping_arm tests
UI test cleanup: Extract expect_fun_call tests
Add missing code of conduct file
Use slice patterns instead of padding
Fix dogfood and pedantic lints
ci: when installing rust-toolchain-installer-master, install it in debug mode to save some time in ci.
RIIR update lints: Generate deprecated lints
Replace big if/else expression with match
````

5 years agoMove a few more tests into the appveyor-subset-2.
kennytm [Sat, 3 Nov 2018 18:33:38 +0000 (02:33 +0800)]
Move a few more tests into the appveyor-subset-2.

This should allow the timings be more balanced.

5 years agoEnsure --exclude is checked against PathSet::Suite
kennytm [Sat, 3 Nov 2018 18:32:53 +0000 (02:32 +0800)]
Ensure --exclude is checked against PathSet::Suite

Fix the recent spurious 3 hour timeouts.

5 years agoAuto merge of #55101 - alexreg:trait-aliases, r=nikomatsakis
bors [Sat, 3 Nov 2018 17:30:37 +0000 (17:30 +0000)]
Auto merge of #55101 - alexreg:trait-aliases, r=nikomatsakis

Implement trait aliases (RFC 1733)

Extends groundwork done in https://github.com/rust-lang/rust/pull/45047, and fully implements https://github.com/rust-lang/rfcs/pull/1733.

CC @durka @nikomatsakis

5 years agoAuto merge of #55646 - GuillaumeGomez:rollup, r=GuillaumeGomez
bors [Sat, 3 Nov 2018 14:51:05 +0000 (14:51 +0000)]
Auto merge of #55646 - GuillaumeGomez:rollup, r=GuillaumeGomez

Rollup of 5 pull requests

Successful merges:

 - #54162 (Hide default impls items)
 - #55555 (Make `-Z ls` list the actual filename of external dependencies)
 - #55567 (add test for deriving Debug on uninhabited enum)
 - #55568 (test that rustdoc doesn't overflow on a big enum)
 - #55598 (publish-toolstate: ping maintainers when a tool builds again)

Failed merges:

r? @ghost

5 years agoUpdate src/librustc_mir/monomorphize/partitioning.rs
Oliver S̶c̶h̶n̶e̶i̶d̶e̶r Scherer [Sat, 3 Nov 2018 13:45:50 +0000 (14:45 +0100)]
Update src/librustc_mir/monomorphize/partitioning.rs

Co-Authored-By: bjorn3 <bjorn3@users.noreply.github.com>
5 years agoRemove rustc_metadata_utils, which contains only one function
bjorn3 [Thu, 25 Oct 2018 13:11:59 +0000 (15:11 +0200)]
Remove rustc_metadata_utils, which contains only one function

5 years agoMove collect_and_partition_mono_items to rustc_mir
bjorn3 [Thu, 25 Oct 2018 12:49:51 +0000 (14:49 +0200)]
Move collect_and_partition_mono_items to rustc_mir

5 years agoRollup merge of #55598 - nrc:tool-bot, r=kennytm
Guillaume Gomez [Sat, 3 Nov 2018 12:40:39 +0000 (13:40 +0100)]
Rollup merge of #55598 - nrc:tool-bot, r=kennytm

publish-toolstate: ping maintainers when a tool builds again

And add @Xanewok as an RLS maintainer

r? @kennytm

Motivation is that I see when the RLS gets broken, but have to poll the website to see when it is fixed, I'd prefer to get pinged.

5 years agoRollup merge of #55568 - durka:rustdoc-big-enum, r=nikomatsakis
Guillaume Gomez [Sat, 3 Nov 2018 12:40:37 +0000 (13:40 +0100)]
Rollup merge of #55568 - durka:rustdoc-big-enum, r=nikomatsakis

test that rustdoc doesn't overflow on a big enum

Adds a test to close #25295. The test case depended on `enum_primitive` so I just basically pulled its source into an auxiliary file, is that the right way to do it?

5 years agoRollup merge of #55567 - durka:derive-debug-uninhabited, r=nikomatsakis
Guillaume Gomez [Sat, 3 Nov 2018 12:40:35 +0000 (13:40 +0100)]
Rollup merge of #55567 - durka:derive-debug-uninhabited, r=nikomatsakis

add test for deriving Debug on uninhabited enum

Adds a test to close #38885.

5 years agoRollup merge of #55555 - aidanhs:aphs-better-z-ls, r=alexcrichton
Guillaume Gomez [Sat, 3 Nov 2018 12:40:34 +0000 (13:40 +0100)]
Rollup merge of #55555 - aidanhs:aphs-better-z-ls, r=alexcrichton

Make `-Z ls` list the actual filename of external dependencies

The hash is pointless for external consumers - extra_filename is the thing that actually gets used, per https://github.com/rust-lang/rust/blob/ca2639e/src/librustc_metadata/locator.rs#L312-L313

5 years agoRollup merge of #54162 - GuillaumeGomez:hide-default-impls-items, r=QuietMisdreavus
Guillaume Gomez [Sat, 3 Nov 2018 12:40:32 +0000 (13:40 +0100)]
Rollup merge of #54162 - GuillaumeGomez:hide-default-impls-items, r=QuietMisdreavus

Hide default impls items

Follow up of #51885.
Fixes #54025.

cc @Mark-Simulacrum

r? @QuietMisdreavus

And screenshots of course:

<img width="1440" alt="screen shot 2018-09-12 at 23 30 35" src="https://user-images.githubusercontent.com/3050060/45454424-1ff8d500-b6e4-11e8-9257-030322495d58.png">

<img width="1440" alt="screen shot 2018-09-12 at 23 30 42" src="https://user-images.githubusercontent.com/3050060/45454431-2424f280-b6e4-11e8-8d65-db0d85ac18f0.png">

5 years agoMove cg_llvm::back::linker to cg_utils
bjorn3 [Sat, 20 Oct 2018 12:45:08 +0000 (14:45 +0200)]
Move cg_llvm::back::linker to cg_utils

5 years agoAuto merge of #55330 - scalexm:bound-ty, r=nikomatsakis
bors [Sat, 3 Nov 2018 12:11:23 +0000 (12:11 +0000)]
Auto merge of #55330 - scalexm:bound-ty, r=nikomatsakis

Add support for bound types

This PR may have some slight performance impacts, I don't know how hot is the code I touched.

Also, this breaks clippy and miri.

r? @nikomatsakis

5 years agoSubstitute binders directly
scalexm [Thu, 25 Oct 2018 14:01:10 +0000 (16:01 +0200)]
Substitute binders directly

5 years agoRename `as_bound_var` to `assert_bound_var`
scalexm [Thu, 25 Oct 2018 13:40:06 +0000 (15:40 +0200)]
Rename `as_bound_var` to `assert_bound_var`

5 years agoFix doc comment
scalexm [Thu, 25 Oct 2018 12:13:24 +0000 (14:13 +0200)]
Fix doc comment

5 years agoExtend `ty::fold::RegionReplacer` to `ty::fold::BoundVarReplacer`
scalexm [Wed, 24 Oct 2018 21:41:40 +0000 (23:41 +0200)]
Extend `ty::fold::RegionReplacer` to `ty::fold::BoundVarReplacer`
Use the new `BoundVarReplacer` to perform canonical substitutions.

5 years agoRename `Binder::no_late_bound_regions` to `Binder::no_bound_vars`
scalexm [Wed, 24 Oct 2018 20:30:34 +0000 (22:30 +0200)]
Rename `Binder::no_late_bound_regions` to `Binder::no_bound_vars`

5 years agoRemove `ReCanonical` in favor of `ReLateBound`
scalexm [Wed, 24 Oct 2018 08:29:42 +0000 (10:29 +0200)]
Remove `ReCanonical` in favor of `ReLateBound`

5 years agoAdjust bound tys indices in canonicalization
scalexm [Tue, 23 Oct 2018 17:47:53 +0000 (19:47 +0200)]
Adjust bound tys indices in canonicalization

5 years agoRename `BoundTy` field `level` -> `index`
scalexm [Tue, 23 Oct 2018 14:28:53 +0000 (16:28 +0200)]
Rename `BoundTy` field `level` -> `index`

5 years agoRename `BoundTyIndex` to `BoundVar`
scalexm [Tue, 23 Oct 2018 11:42:23 +0000 (13:42 +0200)]
Rename `BoundTyIndex` to `BoundVar`

5 years agoShift both late bound regions and bound types
scalexm [Mon, 22 Oct 2018 20:38:51 +0000 (22:38 +0200)]
Shift both late bound regions and bound types

5 years agoMove `BoundTy` to `ty::TyKind`
scalexm [Mon, 22 Oct 2018 18:37:56 +0000 (20:37 +0200)]
Move `BoundTy` to `ty::TyKind`

5 years agoAuto merge of #55238 - alexcrichton:rm-jemalloc, r=estebank
bors [Sat, 3 Nov 2018 09:33:10 +0000 (09:33 +0000)]
Auto merge of #55238 - alexcrichton:rm-jemalloc, r=estebank

Remove the `alloc_jemalloc` crate

This commit removes the `alloc_jemalloc` crate from the standard library and all related configuration. We will no longer be shipping this unstable crate. Rationale for this is provided on https://github.com/rust-lang/rust/issues/36963 and the many linked issues, but I can inline rationale here if desired!

We currently rely on jemalloc for increased perf in the Rust compiler, however. [This perf run shows](https://perf.rust-lang.org/compare.html?start=74ff7dcb1388e60a613cd6050bcd372a3cc4998b&end=7e7928dc0340d79b404e93f0c79eb4b946c1d669&stat=wall-time) that if we switch to glibc 2.23's allocator that it's slower than jemalloc across many benchmarks. [This perf run, however](https://perf.rust-lang.org/compare.html?start=22cc2ae8057d14e980b7c784e1eb2eee26b59e7d&end=10c95ccfa7a7adc12f4e608621ca29f9b98eed29), shows that if we use `jemalloc-sys` from crates.io then rustc actually gets faster across all benchmarks! (presumably because it has a more recent version of jemalloc than our submodule).

As a result, it's expected that this doesn't regress any code (as it's just removing an unstable crate) and it should actually improve rustc performance because it updates jemalloc.

Closes #36963

5 years agoAuto merge of #55363 - pietroalbini:update-cargo-vendor, r=Mark-Simulacrum
bors [Sat, 3 Nov 2018 06:50:19 +0000 (06:50 +0000)]
Auto merge of #55363 - pietroalbini:update-cargo-vendor, r=Mark-Simulacrum

Bump cargo-vendor version

Currently we pin `cargo-vendor` to 0.1.4, which doesn't set the `User-Agent` HTTP header. crates.io is going to require that header in the near future, so this PR bumps the pinned version of the crate to the latest one (which correctly sets the header).

r? @Mark-Simulacrum
cc @sgrif

5 years agofix test fallout
Alex Burka [Sat, 3 Nov 2018 05:03:30 +0000 (05:03 +0000)]
fix test fallout

5 years agoFixed bug with Self type param coming before lifetimes.
Alexander Regueiro [Thu, 1 Nov 2018 21:52:56 +0000 (21:52 +0000)]
Fixed bug with Self type param coming before lifetimes.

5 years agoAdded WF checking for trait alias definitions.
Alexander Regueiro [Thu, 1 Nov 2018 18:17:58 +0000 (18:17 +0000)]
Added WF checking for trait alias definitions.

5 years agoFixed unsoundness hole.
Alexander Regueiro [Thu, 1 Nov 2018 03:08:04 +0000 (03:08 +0000)]
Fixed unsoundness hole.

5 years agoResolve nits brought up in review.
Alexander Regueiro [Thu, 1 Nov 2018 02:00:32 +0000 (02:00 +0000)]
Resolve nits brought up in review.

5 years agoExtended elaboration for trait aliases to include arbitrary bounds.
Alexander Regueiro [Fri, 26 Oct 2018 22:13:12 +0000 (23:13 +0100)]
Extended elaboration for trait aliases to include arbitrary bounds.

5 years agoAdd more tests.
Alexander Regueiro [Thu, 25 Oct 2018 00:03:25 +0000 (01:03 +0100)]
Add more tests.

5 years agoAdded section to Unstable Book.
Alexander Regueiro [Mon, 22 Oct 2018 01:55:01 +0000 (02:55 +0100)]
Added section to Unstable Book.

5 years agoAdded tests.
Alexander Regueiro [Mon, 22 Oct 2018 00:58:34 +0000 (01:58 +0100)]
Added tests.

5 years agoAdded support for trait aliases as object types.
Alexander Regueiro [Sun, 21 Oct 2018 23:45:24 +0000 (00:45 +0100)]
Added support for trait aliases as object types.

5 years agoAdded support for trait aliases as bounds.
Alexander Regueiro [Fri, 12 Oct 2018 00:50:03 +0000 (01:50 +0100)]
Added support for trait aliases as bounds.

5 years agoAuto merge of #54383 - mikeyhew:custom-receivers-object-safety, r=nikomatsakis
bors [Sat, 3 Nov 2018 02:37:29 +0000 (02:37 +0000)]
Auto merge of #54383 - mikeyhew:custom-receivers-object-safety, r=nikomatsakis

Take 2: Implement object-safety and dynamic dispatch for arbitrary_self_types

This replaces #50173. Over the months that that PR was open, we made a lot of changes to the way this was going to be implemented, and the long, meandering comment thread and commit history would have been confusing to people reading it in the future. So I decided to package everything up with new, straighforward commits and open a new PR.

Here are the main points. Please read the commit messages for details.

- To simplify codegen, we only support receivers that have the ABI of a pointer. That means they are builtin pointer types, or newtypes thereof.
- We introduce a new trait: `DispatchFromDyn<T>`, similar to `CoerceUnsized<T>`. `DispatchFromDyn` has extra requirements that `CoerceUnsized` does not: when you implement `DispatchFromDyn` for a struct, there cannot be any extra fields besides the field being coerced and `PhantomData` fields. This ensures that the struct's ABI is the same as a pointer.
- For a method's receiver (e.g. `self: Rc<Self>`) to be object-safe, it needs to have the following property:
    - let `DynReceiver` be the receiver when `Self = dyn Trait`
    - let `ConcreteReceiver` be the receiver when `Self = T`, where `T` is some unknown `Sized` type that implements `Trait`, and is the erased type of the trait object.
    - `ConcreteReceiver` must implement `DispatchFromDyn<DynReceiver>`

In the case of `Rc<Self>`, this requires `Rc<T>: DispatchFromDyn<Rc<dyn Trait>>`

These rules are explained more thoroughly in the doc comment on `receiver_is_dispatchable` in object_safety.rs.

r? @nikomatsakis and @eddyb

cc @arielb1 @cramertj @withoutboats

Special thanks to @nikomatsakis for getting me un-stuck when implementing the object-safety checks, and @eddyb for helping with the codegen parts.

EDIT 2018-11-01: updated because CoerceSized has been replaced with DispatchFromDyn

5 years agoupdate rustdoc-ui/failed-doctest-output test
QuietMisdreavus [Wed, 31 Oct 2018 14:17:09 +0000 (09:17 -0500)]
update rustdoc-ui/failed-doctest-output test

5 years agopass the Options struct instead of individual args
QuietMisdreavus [Tue, 30 Oct 2018 18:35:10 +0000 (13:35 -0500)]
pass the Options struct instead of individual args

5 years agoDon't show associated const items by default
Guillaume Gomez [Thu, 1 Nov 2018 22:57:17 +0000 (23:57 +0100)]
Don't show associated const items by default

5 years agoimplement existing parser fns in terms of fallible fns
QuietMisdreavus [Thu, 1 Nov 2018 21:01:38 +0000 (16:01 -0500)]
implement existing parser fns in terms of fallible fns

5 years agosplit off a separate RenderOptions struct
QuietMisdreavus [Tue, 30 Oct 2018 15:53:46 +0000 (10:53 -0500)]
split off a separate RenderOptions struct

5 years agoswap uses of Matches with pre-parsed args
QuietMisdreavus [Tue, 30 Oct 2018 15:20:58 +0000 (10:20 -0500)]
swap uses of Matches with pre-parsed args

5 years agoparse command-line into a central Options struct
QuietMisdreavus [Tue, 30 Oct 2018 13:47:54 +0000 (08:47 -0500)]
parse command-line into a central Options struct

5 years agoAuto merge of #55087 - levex:e0669-improve-span, r=nagisa
bors [Fri, 2 Nov 2018 18:28:51 +0000 (18:28 +0000)]
Auto merge of #55087 - levex:e0669-improve-span, r=nagisa

rustc: improve E0669 span

E0669 refers to an operand that cannot be coerced into a single LLVM
value, unfortunately right now this uses the Span for the entire inline
assembly statement, which is less than ideal.

This commit preserves the Span from HIR, which lets us emit the error
using the Span for the operand itself in MIR.

r? @nagisa
cc/ @parched

5 years agoRebase fallout
Oliver Scherer [Fri, 2 Nov 2018 12:06:45 +0000 (13:06 +0100)]
Rebase fallout

5 years agoRename `Value` to `Immediate` in docs
Ralf Jung [Fri, 2 Nov 2018 11:51:26 +0000 (12:51 +0100)]
Rename `Value` to `Immediate` in docs

Co-Authored-By: oli-obk <github35764891676564198441@oli-obk.de>
5 years agoSatsify tidy
Oliver S̶c̶h̶n̶e̶i̶d̶e̶r Scherer [Fri, 26 Oct 2018 17:05:43 +0000 (19:05 +0200)]
Satsify tidy

5 years agoRename `Value` to `Immediate` for miri
Oliver Scherer [Fri, 26 Oct 2018 10:33:26 +0000 (12:33 +0200)]
Rename `Value` to `Immediate` for miri

5 years agoAuto merge of #54543 - GuillaumeGomez:top-level-index, r=QuietMisdreavus
bors [Fri, 2 Nov 2018 15:39:25 +0000 (15:39 +0000)]
Auto merge of #54543 - GuillaumeGomez:top-level-index, r=QuietMisdreavus

Add index page argument

@Mark-Simulacrum: I might need some help from you: in bootstrap, I want to add an argument (a new flag added into `rustdoc`) in order to generate the current index directly when `rustdoc` is documenting the `std` lib. However, my change in `bootstrap` didn't do it and I assume it must be moved inside the `Std` struct. But there, I don't see how to pass it to `rustdoc` through `cargo`. Did I miss anything?

r? @QuietMisdreavus

5 years agorustc: Wait for all codegen threads to exit
Alex Crichton [Wed, 31 Oct 2018 18:32:27 +0000 (11:32 -0700)]
rustc: Wait for all codegen threads to exit

This commit updates rustc to wait for all codegen threads to exit before
allowing the main thread to exit. This is a stab in the dark to fix the
mysterious segfaults appearing on #55238, and hopefully we'll see
whether this actually fixes things in practice...

5 years agoUse `jemalloc-sys` on Linux and OSX compilers
Alex Crichton [Sun, 21 Oct 2018 02:15:06 +0000 (19:15 -0700)]
Use `jemalloc-sys` on Linux and OSX compilers

This commit adds opt-in support to the compiler to link to `jemalloc` in
the compiler. When activated the compiler will depend on `jemalloc-sys`,
instruct jemalloc to unprefix its symbols, and then link to it. The
feature is activated by default on Linux/OSX compilers for x86_64/i686
platforms, and it's not enabled anywhere else for now. We may be able to
opt-in other platforms in the future! Also note that the opt-in only
happens on CI, it's otherwise unconditionally turned off by default.

Closes #36963

5 years agoRemove all jemalloc-related content
Alex Crichton [Sun, 21 Oct 2018 02:04:42 +0000 (19:04 -0700)]
Remove all jemalloc-related content

This commit removes all jemalloc related submodules, configuration, etc,
from the bootstrap, from the standard library, and from the compiler.
This will be followed up with a change to use jemalloc specifically as
part of rustc on blessed platforms.

5 years agoAuto merge of #55316 - RalfJung:retagging, r=oli-obk
bors [Fri, 2 Nov 2018 12:45:03 +0000 (12:45 +0000)]
Auto merge of #55316 - RalfJung:retagging, r=oli-obk

Add Retagging statements

This adds a `Retag` statement kind to MIR, used to perform the retagging operation from [Stacked Borrows](https://www.ralfj.de/blog/2018/08/07/stacked-borrows.html). It also kills the old `Validate` statements that I added last year.

NOTE: This includes https://github.com/rust-lang/rust/pull/55270. Only [these commits are new](https://github.com/RalfJung/rust/compare/stacked-borrows-ng...RalfJung:retagging).

5 years agoAuto merge of #54718 - froydnj:aarch64-ci, r=alexcrichton
bors [Fri, 2 Nov 2018 09:46:11 +0000 (09:46 +0000)]
Auto merge of #54718 - froydnj:aarch64-ci, r=alexcrichton

add an appveyor config for aarch64-pc-windows-msvc

This is purely a cargo-cult of things to solicit feedback from humans and/or automation failures.  Not sure that the build artifacts would get packaged properly to start providing nightly tarballs for `libstd`, but this is at least a start.

Fixes #53864.

5 years agoAuto merge of #54043 - fintelia:raw_entry, r=alexcrichton
bors [Fri, 2 Nov 2018 07:04:07 +0000 (07:04 +0000)]
Auto merge of #54043 - fintelia:raw_entry, r=alexcrichton

Add raw_entry API to HashMap

This is a continuation of #50821.

5 years agoAuto merge of #55359 - alex:command-exec-uaf, r=alexcrichton
bors [Fri, 2 Nov 2018 04:20:36 +0000 (04:20 +0000)]
Auto merge of #55359 - alex:command-exec-uaf, r=alexcrichton

Fixes #46775 -- don't mutate the process's environment in Command::exec

Instead, pass the environment to execvpe, so the kernel can apply it directly to the new process. This avoids a use-after-free in the case where exec'ing the new process fails for any reason, as well as a race condition if there are other threads alive during the exec.

Fixes #46775

5 years agoremove unused result in resolve
Alex Burka [Fri, 2 Nov 2018 03:26:31 +0000 (03:26 +0000)]
remove unused result in resolve

5 years agoadd test for deriving Debug on uninhabited enum
Alex Burka [Thu, 1 Nov 2018 02:57:37 +0000 (02:57 +0000)]
add test for deriving Debug on uninhabited enum

5 years agoAuto merge of #55305 - nikomatsakis:universes-refactor-3, r=scalexm
bors [Fri, 2 Nov 2018 01:19:17 +0000 (01:19 +0000)]
Auto merge of #55305 - nikomatsakis:universes-refactor-3, r=scalexm

universes refactor 3

Some more refactorings from my universe branch. These are getting a bit more "invasive" -- they start to plumb the universe information through the canonicalization process. As of yet though I don't **believe** this branch changes our behavior in any notable way, though I'm marking the branch as `WIP` to give myself a chance to verify this.

r? @scalexm

5 years agoMove doc_alias doc
Guillaume Gomez [Thu, 1 Nov 2018 23:04:56 +0000 (00:04 +0100)]
Move doc_alias doc

5 years agoAdd test for index-page
Guillaume Gomez [Sat, 20 Oct 2018 23:13:33 +0000 (01:13 +0200)]
Add test for index-page

5 years agoAdd documentation for index-page features
Guillaume Gomez [Sat, 13 Oct 2018 12:42:33 +0000 (14:42 +0200)]
Add documentation for index-page features

5 years agoAdd comments explaining how codegen works for `dyn Trait` methods
Michael Hewson [Thu, 1 Nov 2018 22:28:52 +0000 (18:28 -0400)]
Add comments explaining how codegen works for `dyn Trait` methods

5 years agoAuto merge of #55595 - Manishearth:clippyup, r=oli-obk
bors [Thu, 1 Nov 2018 22:18:16 +0000 (22:18 +0000)]
Auto merge of #55595 - Manishearth:clippyup, r=oli-obk

Update clippy

r? @kennytm @oli-obk

5 years agoAdd a check for reprs that could change the ABI
Michael Hewson [Fri, 26 Oct 2018 05:09:33 +0000 (01:09 -0400)]
Add a check for reprs that could change the ABI

disallow `#[repr(C)] and `#[repr(packed)]` on structs implementing DispatchFromDyn because they will change the ABI from Scalar/ScalarPair to Aggregrate, resulting in an ICE during object-safety checks or codegen

5 years agoRemove this check for object-safety during selection of trait object candidates
Michael Hewson [Wed, 17 Oct 2018 22:54:13 +0000 (18:54 -0400)]
Remove this check for object-safety during selection of trait object candidates

I don't really understand what it's for, but see the comment here:
https://github.com/rust-lang/rust/pull/50173#discussion_r204222336

where arielb1 said

> Does this check do anything these days? I think `$0: Trait` is always considered ambiguous

and nikomatsakis agreed we may be able to get rid of it

5 years agoadd `U: Trait` to the param env during DispatchFromDyn check
Michael Hewson [Fri, 12 Oct 2018 04:12:56 +0000 (00:12 -0400)]
add `U: Trait` to the param env during DispatchFromDyn check
also updated the doc on `receiver_is_dispatchable` to reflect current state of the implementation

5 years agoPut backticks around field names, types and paths in error messages
Michael Hewson [Tue, 9 Oct 2018 05:13:07 +0000 (01:13 -0400)]
Put backticks around field names, types and paths in error messages

Added to `DispatchFromDyn` and `CoerceUnsized` error messages

5 years agoAdd layout sanity checks in object safety
Michael Hewson [Tue, 9 Oct 2018 00:40:57 +0000 (20:40 -0400)]
Add layout sanity checks in object safety

If object-safety checks succeed for a receiver type, make sure the
receiver’s abi is
a) a Scalar, when Self = ()
b) a ScalarPair, when Self = dyn Trait

5 years agoReplace UncoeribleReceiver error message with UndispatchableReceiver
Michael Hewson [Tue, 9 Oct 2018 00:37:58 +0000 (20:37 -0400)]
Replace UncoeribleReceiver error message with UndispatchableReceiver

5 years agofix error-index test
Michael Hewson [Fri, 5 Oct 2018 20:35:42 +0000 (16:35 -0400)]
fix error-index test

5 years agoupdate DispatchFromDyn doctest
Michael Hewson [Fri, 5 Oct 2018 06:09:06 +0000 (02:09 -0400)]
update DispatchFromDyn doctest

5 years agoReplace CoerceSized trait with DispatchFromDyn
Michael Hewson [Thu, 4 Oct 2018 03:40:21 +0000 (23:40 -0400)]
Replace CoerceSized trait with DispatchFromDyn

Rename `CoerceSized` to `DispatchFromDyn`, and reverse the direction so that, for example, you write

```
impl<T: Unsize<U>, U> DispatchFromDyn<*const U> for *const T {}
```

instead of

```
impl<T: Unsize<U>, U> DispatchFromDyn<*const T> for *const U {}
```

this way the trait is really just a subset of `CoerceUnsized`.

The checks in object_safety.rs are updated for the new trait, and some documentation and method names in there are updated for the new trait name — e.g. `receiver_is_coercible` is now called `receiver_is_dispatchable`. Since the trait now works in the opposite direction, some code had to updated here for that too.

I did not update the error messages for invalid `CoerceSized` (now `DispatchFromDyn`) implementations, except to find/replace `CoerceSized` with `DispatchFromDyn`. Will ask for suggestions in the PR thread.

5 years agofix docs on trait
Michael Hewson [Fri, 21 Sep 2018 06:16:29 +0000 (02:16 -0400)]
fix docs on  trait
tests were failing because I didn't wrap code snippets like  in backticks. fixed that now, so hopefully tests will pass on travis

5 years agoAdd new tests and update existing for object-safe custom receivers
Michael Hewson [Thu, 20 Sep 2018 07:28:57 +0000 (03:28 -0400)]
Add new tests and update existing for object-safe custom receivers

5 years agoupdate tests that have changed output
Michael Hewson [Thu, 20 Sep 2018 07:21:29 +0000 (03:21 -0400)]
update tests that have changed output

 I’m not sure why these tests have different output now, but they do.
In all cases, the error message that is missing looks like this: “the
trait bound `dyn Trait: Trait` is not satisfied”

My guess is that the error message is going away because object-safety
now involves trait solving, and these extra error messages are no
longer leaking out.

5 years agoAdd CoerceSized impls throughout libstd
Michael Hewson [Thu, 20 Sep 2018 07:18:00 +0000 (03:18 -0400)]
Add CoerceSized impls throughout libstd

This will make receiver types like `Rc<Self>` and `Pin<&mut Self>`
object-safe.

5 years agoImplement object-safety for arbitrary_self_types: part 2
Michael Hewson [Thu, 20 Sep 2018 07:16:10 +0000 (03:16 -0400)]
Implement object-safety for arbitrary_self_types: part 2

For now, all of the receivers that we care about are just a newtyped
pointer — i.e. `Box<Self>`, `Rc<Self>`, `Pin<Box<Self>>`, `Pin<&mut
Self>`. This is much simpler to implement in codeine than the more
general case, because the ABI is the same as a pointer. So we add some
checks in typeck/coherence/builtin.rs to make sure that implementors of
CoerceSized are just newtyped pointers. In this commit, we also
implement the codegen bits.

5 years agoImplement the object-safety checks for arbitrary_self_types: part 1
Michael Hewson [Thu, 20 Sep 2018 07:12:00 +0000 (03:12 -0400)]
Implement the object-safety checks for arbitrary_self_types: part 1

For a trait method to be considered object-safe, the receiver type must
satisfy certain properties: first, we need to be able to get the vtable
to so we can look up the method, and second, we need to convert the
receiver from the version where `Self=dyn Trait`, to the version where
`Self=T`, `T` being some unknown, `Sized` type that implements `Trait`.

To check that the receiver satisfies those properties, we use the
following query:

forall (U) {
if (Self: Unsize<U>) {
Receiver[Self => U]: CoerceSized<Receiver>
}
}

where `Receiver` is the receiver type of the method (e.g. `Rc<Self>`),
and `Receiver[Self => U]` is the receiver type where `Self = U`, e.g.
`Rc<U>`.

forall queries like this aren’t implemented in the trait system yet, so
for now we are using a bit of a hack — see the code for explanation.