Commit Graph

80458 Commits

Author SHA1 Message Date
bors e92e9ce0d8 Auto merge of #52046 - cramertj:fix-generator-mir, r=eddyb
Ensure StorageDead is created even if variable initialization fails

Rebase and slight cleanup of https://github.com/rust-lang/rust/pull/51109
Fixes https://github.com/rust-lang/rust/issues/49232

r? @eddyb
2018-07-13 00:38:17 +00:00
bors 64f7de9216 Auto merge of #51339 - sdroege:exact-chunks-remainder, r=alexcrichton
Add ExactChunks::remainder and ExactChunks::into_remainder

These allow to get the leftover items of the slice that are not being
iterated as part of the iterator due to not filling a complete chunk.

The mutable version consumes the slice because otherwise we would either
a) have to borrow the iterator instead of taking the lifetime of
the underlying slice, which is not what *any* of the other iterator
functions is doing, or
b) would allow returning multiple mutable references to the same data

The current behaviour of consuming the iterator is consistent with
IterMut::into_slice for the normal iterator.

----

This is related to https://github.com/rust-lang/rust/issues/47115#issuecomment-392685177 and the following comments.

While there the discussion was first about a way to get the "tail" of the iterator (everything from the slice that is still not iterated yet), this gives kind of unintuitive behaviour and is inconsistent with how the other slice iterators work.

Unintuitive because the `next_back` would have no effect on the tail (or otherwise the tail could not include the remainder items), inconsistent because a) generally the idea of the slice iterators seems to be to only ever return items that were not iterated yet (and don't provide a way to access the same item twice) and b) we would return a "flat" `&[T]` slice but the iterator's shape is `&[[T]]` instead, c) the mutable variant would have to borrow from the iterator instead of the underlying slice (all other iterator functions borrow from the underlying slice!)

As such, I've only implemented functions to get the remainder. This also allows the implementation to be completely safe still (and around slices instead of raw pointers), while getting the tail would either be inefficient or would have to be implemented around raw pointers.

CC @kerollmops
2018-07-12 19:39:04 +00:00
Taylor Cramer 9c15a6606e Ensure StorageDead is created even if variable initialization fails 2018-07-12 10:13:41 -07:00
bors 6cc42a4488 Auto merge of #52256 - tinco:issue_52255, r=sanxiyn
make pretty source comparison check be fatal (fixes #52255)

This is not ready for merging because it reveals (at least) two regressions in the pretty suite. Should I attempt to fix those in this PR also?
2018-07-12 15:12:37 +00:00
bors 7db82ccd76 Auto merge of #52303 - kennytm:rollup, r=kennytm
Rollup of 9 pull requests

Successful merges:

 - #51816 (bootstrap: write texts to a .tmp file first for atomicity)
 - #51912 (impl Clone for Box<CStr>, Box<OsStr>, Box<Path>)
 - #52164 (use proper footnote syntax for references)
 - #52220 (Deny bare trait objects in `src/bootstrap`)
 - #52276 (rustc: Verify #[proc_macro] is only a word)
 - #52277 (Uncapitalize "If")
 - #52287 (Deny bare trait objects in src/librustc_resolve)
 - #52295 (Deny bare trait objects in src/libsyntax_ext)
 - #52298 (make reference to dirs crate clickable in terminals)

Failed merges:

r? @ghost
2018-07-12 12:50:13 +00:00
kennytm a7c2c68b13
Rollup merge of #52298 - RalfJung:dirs, r=Mark-Simulacrum
make reference to dirs crate clickable in terminals

Currently I have to copy-paste the link; with this change I can just click it right in my terminal window.
2018-07-12 20:25:33 +08:00
kennytm 019dc2a357
Rollup merge of #52295 - ljedrz:dyn_libsyntax_ext, r=petrochenkov
Deny bare trait objects in src/libsyntax_ext

Enforce `#![deny(bare_trait_objects)]` in `src/libsyntax_ext`.
2018-07-12 20:25:32 +08:00
kennytm 9fc126c375
Rollup merge of #52287 - ljedrz:dyn_librustc_resolve, r=petrochenkov
Deny bare trait objects in src/librustc_resolve

Enforce `#![deny(bare_trait_objects)]` in `src/librustc_resolve`.
2018-07-12 20:25:30 +08:00
kennytm eb1728b585
Rollup merge of #52277 - kraai:patch-2, r=kennytm
Uncapitalize "If"
2018-07-12 20:25:29 +08:00
kennytm 63cc55b2ec
Rollup merge of #52276 - alexcrichton:validate-proc-macro-attr, r=petrochenkov
rustc: Verify #[proc_macro] is only a word

... and perform the same verification for #[proc_macro_attribute], currently
neither of these attributes take any arguments.

Closes #52273
2018-07-12 20:25:28 +08:00
kennytm c2c6986733
Rollup merge of #52220 - ljedrz:dyn_bootstrap, r=kennytm
Deny bare trait objects in `src/bootstrap`

Enforce `#![deny(bare_trait_objects)]` in `src/bootstrap`.
2018-07-12 20:25:27 +08:00
kennytm 8fba84fe0a
Rollup merge of #52164 - euclio:references, r=TimNN
use proper footnote syntax for references

The previous syntax was causing rustdoc to interpret them as links.
2018-07-12 20:25:26 +08:00
kennytm b317ab1bc5
Rollup merge of #51912 - mbrubeck:more_box_slice_clone, r=alexcrichton
impl Clone for Box<CStr>, Box<OsStr>, Box<Path>

Implements #51908.
2018-07-12 20:25:25 +08:00
kennytm c87e3feaee
Rollup merge of #51816 - nodakai:conf-py-tmpfile, r=kennytm
bootstrap: write texts to a .tmp file first for atomicity

If you are using a hard-linked file as your config.toml, this change will affect the way other instances of the file is modified.
The original version would modify all other instances whereas the new version will leave others unchanged, reducing the ref count by one.
2018-07-12 20:25:23 +08:00
Ralf Jung e9a88eaaf9 make reference to dirs crate clickable in terminals 2018-07-12 12:48:10 +02:00
bors d334027c58 Auto merge of #52230 - alexcrichton:attr-and-derive, r=petrochenkov
rustc: Search all derives for inert attributes

This commit fixes an apparent mistake in librustc_resolve where when the
`proc_macro` feature is enabled (or `rust_2018_preview`) the resolution of
custom attributes for custom derive was tweaked. Previously when an attribute
failed to resolve it was attempted to locate if there is a custom derive also in
scope which declares the attribute, but only the first custom derive directive
was search.

Instead this commit fixes the loop to search all custom derive invocations
looking for any which register the attribute in question.

Closes #52219
2018-07-12 10:16:19 +00:00
ljedrz 08c113abef Deny bare trait objects in src/libsyntax_ext 2018-07-12 11:58:16 +02:00
ljedrz 8fecbe3e78 Deny bare trait objects in src/librustc_resolve 2018-07-12 10:15:35 +02:00
bors de857bbcf0 Auto merge of #52282 - kennytm:fix-rls-break, r=oli-obk
Patch clippy_lints to use the in-tree clippy as well.

Should fix the most recent RLS build break.
2018-07-12 08:12:18 +00: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
kennytm 6aab3d0ca1
Update [patch] section of clippy to include clippy_lints. 2018-07-12 11:01:59 +08: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
Matt Kraai e488cba678
Uncapitalize "If" 2018-07-11 17:19:41 -07:00
Tinco Andringa b96deed121 fix expected output of pretty/cast-lt and issue-4264 tests 2018-07-12 01:19:27 +02:00
Alex Crichton 7735f45eab rustc: Verify #[proc_macro] is only a word
... and perform the same verification for #[proc_macro_attribute], currently
neither of these attributes take any arguments.

Closes #52273
2018-07-11 15:49:23 -07: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
Andy Russell f5f21aa9d6
use proper footnote syntax for references
The previous syntax was causing rustdoc to interpret them as links.
2018-07-11 13:26:56 -04: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
Tinco Andringa f0b1a781ac make pretty source comparison check be fatal (fixes #52255) 2018-07-11 15:21:14 +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