Commit Graph

80427 Commits

Author SHA1 Message Date
Mike Hommey 5336df7e3c Add UI tests for diagnostics comparing types
They highlight how types are displayed in those cases, and will show
how the current output is altered by the next patch.
2018-07-12 17:06:03 +09:00
bors c946c2539e Auto merge of #52194 - steveklabnik:remove-plugins, r=QuietMisdreavus,GuillaumeGomez
Remove rustdoc's plugins feature

This fixes CVE-2018-1000622.

https://cve.mitre.org/cgi-bin/cvename.cgi?name=%20CVE-2018-1000622

r? @QuietMisdreavus @GuillaumeGomez
2018-07-12 04:12:19 +00:00
bors 3244d53c79 Auto merge of #52089 - eddyb:issue-51907, r=nagisa
rustc_codegen_llvm: replace the first argument early in FnType::new_vtable.

Fixes #51907 by removing the vtable pointer before the `ArgType` is even created.
This allows any ABI to support trait object method calls, regardless of how it passes `*dyn Trait`.

r? @nikomatsakis
2018-07-12 01:20:19 +00:00
bors 4ba5ff4d30 Auto merge of #52172 - oli-obk:clippy_in_rls, r=nrc
Inject clippy into the rls again

Also makes sure we actually point to the local rustfmt

r? @nrc

cc @Manishearth
2018-07-11 21:54:44 +00:00
bors 704af2d7e1 Auto merge of #52268 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
Rollup of 14 pull requests

Successful merges:

 - #51614 (Correct suggestion for println)
 - #51952 ( hygiene: Decouple transparencies from expansion IDs)
 - #52193 (step_by: leave time of item skip unspecified)
 - #52207 (improve error message shown for unsafe operations)
 - #52223 (Deny bare trait objects in in src/liballoc)
 - #52224 (Deny bare trait objects in in src/libsyntax)
 - #52239 (Remove sync::Once::call_once 'static bound)
 - #52247 (Deny bare trait objects in in src/librustc)
 - #52248 (Deny bare trait objects in in src/librustc_allocator)
 - #52252 (Deny bare trait objects in in src/librustc_codegen_llvm)
 - #52253 (Deny bare trait objects in in src/librustc_data_structures)
 - #52254 (Deny bare trait objects in in src/librustc_metadata)
 - #52261 (Deny bare trait objects in in src/libpanic_unwind)
 - #52265 (Deny bare trait objects in in src/librustc_codegen_utils)

Failed merges:

r? @ghost
2018-07-11 19:50:14 +00:00
Mark Rousskov a0b288e1b8
Rollup merge of #52265 - ljedrz:dyn_librustc_codegen_utils, r=oli-obk
Deny bare trait objects in in src/librustc_codegen_utils

Enforce `#![deny(bare_trait_objects)]` in `src/librustc_codegen_utils`.
2018-07-11 12:38:49 -06:00
Mark Rousskov 7585bd5b39
Rollup merge of #52261 - ljedrz:dyn_libpanic_unwind, r=alexcrichton
Deny bare trait objects in in src/libpanic_unwind

Enforce `#![deny(bare_trait_objects)]` in `src/libpanic_unwind`.
2018-07-11 12:38:47 -06:00
Mark Rousskov e6f6608b84
Rollup merge of #52254 - ljedrz:dyn_librustc_metadata, r=cramertj
Deny bare trait objects in in src/librustc_metadata

Enforce `#![deny(bare_trait_objects)]` in `src/librustc_metadata`.
2018-07-11 12:38:46 -06:00
Mark Rousskov 59fb178ad9
Rollup merge of #52253 - ljedrz:dyn_librustc_data_structures, r=cramertj
Deny bare trait objects in in src/librustc_data_structures

Enforce `#![deny(bare_trait_objects)]` in `src/librustc_data_structures`.
2018-07-11 12:38:45 -06:00
Mark Rousskov dcc536fc14
Rollup merge of #52252 - ljedrz:dyn_librustc_codegen_llvm, r=varkor
Deny bare trait objects in in src/librustc_codegen_llvm

Enforce `#![deny(bare_trait_objects)]` in `src/librustc_codegen_llvm`.
2018-07-11 12:38:44 -06:00
Mark Rousskov 8d9a6a7edd
Rollup merge of #52248 - ljedrz:dyn_librustc_allocator, r=oli-obk
Deny bare trait objects in in src/librustc_allocator

Enforce `#![deny(bare_trait_objects)]` in `src/librustc_allocator`.
2018-07-11 12:38:42 -06:00
Mark Rousskov 2774179f70
Rollup merge of #52247 - ljedrz:dyn_librustc, r=oli-obk
Deny bare trait objects in in src/librustc

Enforce `#![deny(bare_trait_objects)]` in `src/librustc`.
2018-07-11 12:38:41 -06:00
Mark Rousskov b41105ba26
Rollup merge of #52239 - CAD97:patch-1, r=alexcrichton
Remove sync::Once::call_once 'static bound

See https://internals.rust-lang.org/t/sync-once-per-instance/7918 for more context.

Suggested r is @alexcrichton, the one who added the `'static` bound back in 2014. I don't want to officially r? though, if the system would even let me. I'd rather let the system choose the appropriate member since it knows more than I do.

`git blame` history for `sync::Once::call_once`'s signature:

- [std: Second pass stabilization of sync](f3a7ec7028) (Dec 2014)

    ```diff
    -    pub fn doit<F>(&'static self, f: F) where F: FnOnce() {
    +    #[stable]
    +    pub fn call_once<F>(&'static self, f: F) where F: FnOnce() {
    ```

- [libstd: use unboxed closures](cdbb3ca9b7) (Dec 2014)

    ```diff
    -    pub fn doit(&'static self, f: ||) {
    +    pub fn doit<F>(&'static self, f: F) where F: FnOnce() {
    ```

- [std: Rewrite the `sync` module](71d4e77db8) (Nov 2014)

    ```diff
    -    pub fn doit(&self, f: ||) {
    +    pub fn doit(&'static self, f: ||) {
    ```

    > ```text
    >  The second layer is the layer provided by `std::sync` which is intended to be
    >  the thinnest possible layer on top of `sys_common` which is entirely safe to
    >  use. There are a few concerns which need to be addressed when making these
    >  system primitives safe:
    >
    >    * Once used, the OS primitives can never be **moved**. This means that they
    >      essentially need to have a stable address. The static primitives use
    >      `&'static self` to enforce this, and the non-static primitives all use a
    >      `Box` to provide this guarantee.
    > ```

The author of this diff is @alexcrichton. `sync::Once` now contains only a pointer to (privately hidden) `Waiter`s, which are all stack-allocated. The `'static` bound to `sync::Once` is thus unnecessary to guarantee that any OS primitives are non-relocatable.

As the `'static` bound is not required for `sync::Once`'s operation, removing it is strictly more useful. As an example, it allows attaching a one-time operation to instances rather than only to global singletons.
2018-07-11 12:38:40 -06:00
Mark Rousskov 2d49909f45
Rollup merge of #52224 - ljedrz:dyn_libsyntax, r=oli-obk
Deny bare trait objects in in src/libsyntax

Enforce `#![deny(bare_trait_objects)]` in `src/libsyntax`.
2018-07-11 12:38:39 -06:00
Mark Rousskov d096f6ae85
Rollup merge of #52223 - ljedrz:dyn_liballoc, r=cramertj
Deny bare trait objects in in src/liballoc

Enforce #![deny(bare_trait_objects)] in src/liballoc.
2018-07-11 12:38:37 -06:00
Mark Rousskov 7897ee4d42
Rollup merge of #52207 - RalfJung:unsafety-errors, r=estebank
improve error message shown for unsafe operations

Add a short explanation saying why undefined behavior could arise. In particular, the error many people got for "creating a pointer to a packed field requires unsafe block" was not worded great -- it lead to people just adding the unsafe block without considering if what they are doing follows the rules.

I am not sure if a "note" is the right thing, but that was the easiest thing to add...

Inspired by @gnzlbg at https://github.com/rust-lang/rust/issues/46043#issuecomment-381544673
2018-07-11 12:38:36 -06:00
Mark Rousskov 74cc821fd5
Rollup merge of #52193 - Emerentius:step_by_note, r=alexcrichton
step_by: leave time of item skip unspecified

This gives us some leeway when optimizing. `StepBy<RangeFrom<_>>` is one case where this is needed.
2018-07-11 12:38:34 -06:00
Mark Rousskov 322632ac10
Rollup merge of #51952 - petrochenkov:transmark, r=alexcrichton
hygiene: Decouple transparencies from expansion IDs

And remove fallback to parent modules during resolution of names in scope.

This is a breaking change for users of unstable macros 2.0 (both procedural and declarative), code like this:
```rust
#![feature(decl_macro)]

macro m($S: ident) {
    struct $S;
    mod m {
        type A = $S;
    }
}

fn main() {
    m!(S);
}
```
or equivalent
```rust
#![feature(decl_macro)]

macro m($S: ident) {
    mod m {
        type A = $S;
    }
}

fn main() {
    struct S;
    m!(S);
}
```
stops working due to module boundaries being properly enforced.

For proc macro derives this is still reported as a compatibility warning to give `actix_derive`, `diesel_derives` and `palette_derive` time to fix their issues.

Fixes https://github.com/rust-lang/rust/issues/50504 in accordance with [this comment](https://github.com/rust-lang/rust/issues/50504#issuecomment-399764767).
2018-07-11 12:38:33 -06:00
Mark Rousskov d2a8a2b34a
Rollup merge of #51614 - csmoe:lit_sugg, r=estebank
Correct suggestion for println

Closes https://github.com/rust-lang/rust/issues/51585
r? @estebank
2018-07-11 12:38:32 -06:00
bors d573fe1778 Auto merge of #51702 - ecstatic-morse:infinite-loop-detection, r=oli-obk
Infinite loop detection for const evaluation

Resolves #50637.

An `EvalContext` stores the transient state (stack, heap, etc.) of the MIRI virtual machine while it executing code. As long as MIRI only executes pure functions, we can detect if a program is in a state where it will never terminate by periodically taking a "snapshot" of this transient state and comparing it to previous ones. If any two states are exactly equal, the machine must be in an infinite loop.

Instead of fully cloning a snapshot every time the detector is run, we store a snapshot's hash. Only when a hash collision occurs do we fully clone the interpreter state. Future snapshots which cause a collision will be compared against this clone, causing the interpreter to abort if they are equal.

At the moment, snapshots are not taken until MIRI has progressed a certain amount. After this threshold, snapshots are taken every `DETECTOR_SNAPSHOT_PERIOD` steps. This means that an infinite loop with period `P` will be detected after a maximum of `2 * P * DETECTOR_SNAPSHOT_PERIOD` interpreter steps. The factor of 2 arises because we only clone a snapshot after it causes a hash collision.
2018-07-11 16:24:46 +00:00
ljedrz 715b8852e4 Deny bare trait objects in in src/librustc_codegen_utils 2018-07-11 17:39:49 +02:00
ljedrz dbab06dd85 Deny bare trait objects in in src/libpanic_unwind 2018-07-11 17:11:08 +02:00
bors 66787e0524 Auto merge of #51553 - jD91mZM2:uds, r=sfackler
Unix sockets on redox

This is done using the ipcd daemon. It's not exactly like unix sockets because there is not actually a physical file for the path, but it's close enough for a basic implementation :)
This allows mio-uds and tokio-uds to work with a few modifications as well, which is exciting!
2018-07-11 14:15:01 +00:00
ljedrz 6cfd49e8dd add a missing `dyn` 2018-07-11 16:08:38 +02:00
ljedrz 9cffe90fd0 Deny bare trait objects in in src/librustc_metadata 2018-07-11 14:49:00 +02:00
ljedrz bbaf45d0f5 Enforce #![deny(bare_trait_objects)] in src/librustc_data_structures tests 2018-07-11 14:21:26 +02:00
bors 11432ba980 Auto merge of #51230 - nikic:no-verify-lto, r=pnkfelix
Disable LLVM verification by default

Currently -Z no-verify only controls IR verification prior to LLVM codegen, while verification is performed unconditionally both before and after linking with (Thin)LTO.

Also wondering what the sentiment is on disabling verification by default (and e.g. only enabling it on ALT builds with assertions). This does not seem terribly useful outside of rustc development and it does seem to show up in profiles (at something like 3%).

**EDIT:** A table showing the various configurations and what is enabled when.

| Configuration | Dynamic verification performed | LLVM static assertions compiled in |
| --- | --- | --- |
| alt builds | | yes |
| nightly builds | | no |
| stable builds | | no |
| CI builds | | |
| dev builds in a checkout | | |
2018-07-11 12:12:13 +00:00
ljedrz ff65bbe96a Deny bare trait objects in in src/librustc_data_structures 2018-07-11 13:58:27 +02:00
csmoe 790c09e849 suggest on new snippet 2018-07-11 18:53:37 +08:00
ljedrz ea473502f3 Deny bare trait objects in in src/librustc_codegen_llvm 2018-07-11 12:49:11 +02:00
ljedrz 5ccaaa80d0 Deny bare trait objects in in src/librustc_allocator 2018-07-11 12:08:49 +02:00
ljedrz 48e501f378 Deny bare trait objects in in src/librustc 2018-07-11 12:05:10 +02:00
bors 989fa05389 Auto merge of #52245 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 5 pull requests

Successful merges:

 - #51701 (Better docs for copy_from_slice & clone_from_slice)
 - #52231 (Fix typo in error message E0277)
 - #52233 (Improve lint handling in rustdoc)
 - #52238 (Avoid unwrapping in PanicInfo doc example.)
 - #52241 (Fix typo in E0433 docs)

Failed merges:

r? @ghost
2018-07-11 10:00:30 +00:00
Ralf Jung f68323b28a fix typo 2018-07-11 12:00:05 +02:00
Oliver Schneider 0fc61be68e
Remove unused variable 2018-07-11 10:35:49 +02:00
Oliver Schneider 5254343f1f
Hitchhike with rls into stable 2018-07-11 10:35:09 +02:00
ljedrz 217f8fbd45 Revert borked changes in last commit. 2018-07-11 10:19:54 +02:00
Guillaume Gomez 985c5a708e
Rollup merge of #52241 - felixrabe:patch-1, r=oli-obk
Fix typo in E0433 docs
2018-07-11 10:02:04 +02:00
Guillaume Gomez c3d8236f8d
Rollup merge of #52238 - frewsxcv:frewsxcv-unwrap, r=GuillaumeGomez
Avoid unwrapping in PanicInfo doc example.

Fixes https://github.com/rust-lang/rust/issues/51768.
2018-07-11 10:02:03 +02:00
Guillaume Gomez c202dfea9b
Rollup merge of #52233 - GuillaumeGomez:rustdoc-lint-handling, r=oli-obk
Improve lint handling in rustdoc

r? @oli-obk
2018-07-11 10:02:01 +02:00
Guillaume Gomez c606ed74c3
Rollup merge of #52231 - lqd:error_mesg, r=GuillaumeGomez
Fix typo in error message E0277

Fix a typo we stumbled upon by accident :)

r? @estebank
2018-07-11 10:02:00 +02:00
Guillaume Gomez 13c5f606c6
Rollup merge of #51701 - anirudhb:master, r=frewsxcv
Better docs for copy_from_slice & clone_from_slice

I copy-pasted the text from clone_from_slice to copy_from_slice 😄

@steveklabnik feel free to suggest changes.

edit: closes #49769
2018-07-11 10:01:58 +02:00
bors ae5b629efd Auto merge of #51966 - alexcrichton:llvm7, r=michaelwoerister
Upgrade to LLVM's master branch (LLVM 7)

### Current status

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

Ready to merge!

---

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

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

Some other miscellaneous changes are:

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

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

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

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

cc #50543
2018-07-11 07:20:14 +00:00
Felix Rabe 299ee4798c
Fix typo in E0433 docs 2018-07-11 07:43:10 +02:00
Christopher Durham 0f3f292b4c
remove sync::Once::call_once 'static
- [std: Rewrite the `sync` module71d4e77db8) (Nov 2014)

    ```diff
    -    pub fn doit(&self, f: ||) {
    +    pub fn doit(&'static self, f: ||) {
    ```

    > ```text
    >  The second layer is the layer provided by `std::sync` which is intended to be
    >  the thinnest possible layer on top of `sys_common` which is entirely safe to
    >  use. There are a few concerns which need to be addressed when making these
    >  system primitives safe:
    >
    >    * Once used, the OS primitives can never be **moved**. This means that they
    >      essentially need to have a stable address. The static primitives use
    >      `&'static self` to enforce this, and the non-static primitives all use a
    >      `Box` to provide this guarantee.
    > ```

The author of this diff is @alexcrichton. `sync::Once` contains only a pointer to (privately hidden) `Waiter`s, which are all stack-allocated. The `'static` bound to `sync::Once` is thus unnecessary to guarantee that any OS primitives are non-relocatable.

See https://internals.rust-lang.org/t/sync-once-per-instance/7918 for more context.
2018-07-10 22:47:59 -04:00
Corey Farwell d2fb2fb2a5 Avoid unwrapping in PanicInfo doc example.
Fixes https://github.com/rust-lang/rust/issues/51768.
2018-07-10 22:25:38 -04:00
bors 4700e1188f Auto merge of #52232 - arielb1:ill-adjusted-tuples, r=pnkfelix
use the adjusted type for cat_pattern in tuple patterns

This looks like a typo introduced in #51686.

Fixes #52213.

r? @pnkfelix

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

Successful merges:

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

Failed merges:

 - #52164 (use proper footnote syntax for references)

r? @ghost
2018-07-10 22:40:17 +00:00
Guillaume Gomez 90b3e2c1c8 Improve lint handling in rustdoc 2018-07-11 00:36:31 +02:00
Ariel Ben-Yehuda 4c044537ce add test for #52213 2018-07-11 01:11:59 +03:00