]> git.lizzy.rs Git - rust.git/log
rust.git
4 years agoRollup merge of #66148 - oli-obk:it_must_be_a_sign, r=RalfJung
Mazdak Farrokhzad [Tue, 3 Dec 2019 10:06:57 +0000 (11:06 +0100)]
Rollup merge of #66148 - oli-obk:it_must_be_a_sign, r=RalfJung

Show the sign for signed ops on `exact_div`

r? @RalfJung Cc https://github.com/rust-lang/miri/pull/961/files#r341842128

I'm fairly unhappy with the duplication and the general effort required for this.

Maybe it would be better to add a `display` impl for `ImmTy`?

4 years agoAuto merge of #66256 - CAD97:patch-2, r=RalfJung
bors [Tue, 3 Dec 2019 01:50:33 +0000 (01:50 +0000)]
Auto merge of #66256 - CAD97:patch-2, r=RalfJung

Layout::pad_to_align is infallible

As per [this comment](https://github.com/rust-lang/rust/issues/55724#issuecomment-441421651) (cc @glandium).

> Per https://github.com/rust-lang/rust/blob/eb981a1/src/libcore/alloc.rs#L63-L65, `layout.size()` is always <= `usize::MAX - (layout.align() - 1)`.
>
> Which means:
>
> * The maximum value `layout.size()` can have is already aligned for `layout.align()` (`layout.align()` being a power of two, `usize::MAX - (layout.align() - 1)` is a multiple of `layout.align()`)
> * Incidentally, any value smaller than that maximum value will align at most to that maximum value.
>
> IOW, `pad_to_align` can not return `Err(LayoutErr)`, except for the layout not respecting its invariants, but we shouldn't care about that.

This PR makes `pad_to_align` return `Layout` directly, representing the fact that it cannot fail.

4 years agoAuto merge of #64736 - Nashenas88:mir_predecessors_cache_cleanup, r=oli-obk
bors [Mon, 2 Dec 2019 14:51:02 +0000 (14:51 +0000)]
Auto merge of #64736 - Nashenas88:mir_predecessors_cache_cleanup, r=oli-obk

Remove interior mutability in mir predecessors cache

4 years agoFix issues caused during rebasing
Paul Daniel Faria [Mon, 2 Dec 2019 14:40:03 +0000 (09:40 -0500)]
Fix issues caused during rebasing

4 years agoFix issues caused during rebasing
Paul Daniel Faria [Fri, 29 Nov 2019 23:36:16 +0000 (18:36 -0500)]
Fix issues caused during rebasing

4 years agoUse new HashStable proc macro
Paul Daniel Faria [Wed, 27 Nov 2019 15:54:49 +0000 (10:54 -0500)]
Use new HashStable proc macro

4 years agoFix tidy issues
Paul Daniel Faria [Mon, 25 Nov 2019 05:28:24 +0000 (00:28 -0500)]
Fix tidy issues

4 years agoFix rebasing errors, convert some BodyCache::body() calls to reborrows
Paul Daniel Faria [Mon, 25 Nov 2019 04:39:22 +0000 (23:39 -0500)]
Fix rebasing errors, convert some BodyCache::body() calls to reborrows

4 years agoFix type errors created during rebasing
Paul Daniel Faria [Thu, 21 Nov 2019 15:50:52 +0000 (10:50 -0500)]
Fix type errors created during rebasing

4 years agoRemove unchecked inline attribute, remove unused functions, make chache mod private...
Paul Daniel Faria [Wed, 20 Nov 2019 16:53:34 +0000 (11:53 -0500)]
Remove unchecked inline attribute, remove unused functions, make chache mod private again

4 years agoRemove inline attributes that hadn't been profiled, unexport Cache since it no longer...
Paul Daniel Faria [Wed, 20 Nov 2019 14:58:31 +0000 (09:58 -0500)]
Remove inline attributes that hadn't been profiled, unexport Cache since it no longer needs to be public

4 years agoFix type errors cause during rebasing
Paul Daniel Faria [Wed, 13 Nov 2019 05:35:45 +0000 (00:35 -0500)]
Fix type errors cause during rebasing

4 years agoCompute predecessors in mir_build query and use existing cache for generating ReadOnl...
Paul Daniel Faria [Wed, 13 Nov 2019 04:41:43 +0000 (23:41 -0500)]
Compute predecessors in mir_build query and use existing cache for generating ReadOnlyBodyCache, remove unneeded fns

4 years agoRemove files created during conflict resolution
Paul Daniel Faria [Wed, 6 Nov 2019 17:34:16 +0000 (12:34 -0500)]
Remove files created during conflict resolution

4 years agoFix typos caused during rebase
Paul Daniel Faria [Wed, 6 Nov 2019 17:29:09 +0000 (12:29 -0500)]
Fix typos caused during rebase

4 years agoRemove HasLocalDecls impl from BodyCache's, properly reborrow to Body, rename all...
Paul Daniel Faria [Wed, 6 Nov 2019 17:00:46 +0000 (12:00 -0500)]
Remove HasLocalDecls impl from BodyCache's, properly reborrow to Body, rename all body_cache back to body

4 years agoRemove BodyCache.body and rely on Deref as much as possible for ReadOnlyBodyCache
Paul Daniel Faria [Wed, 6 Nov 2019 05:04:53 +0000 (00:04 -0500)]
Remove BodyCache.body and rely on Deref as much as possible for ReadOnlyBodyCache

4 years agoUndo minor changes that weren't needed, fix one lifetime typo
Paul Daniel Faria [Tue, 5 Nov 2019 00:52:19 +0000 (19:52 -0500)]
Undo minor changes that weren't needed, fix one lifetime typo

4 years agoFix compilation errors created during rebase
Paul Daniel Faria [Mon, 4 Nov 2019 14:03:02 +0000 (09:03 -0500)]
Fix compilation errors created during rebase

4 years agoFix typo
Paul Daniel Faria [Mon, 28 Oct 2019 23:32:56 +0000 (19:32 -0400)]
Fix typo

4 years agoFix tidy errors
Paul Daniel Faria [Mon, 28 Oct 2019 22:16:25 +0000 (18:16 -0400)]
Fix tidy errors

4 years agoFix typos caused during rebase
Paul Daniel Faria [Mon, 28 Oct 2019 02:45:02 +0000 (22:45 -0400)]
Fix typos caused during rebase

4 years agoFix remaining compilation issues
Paul Daniel Faria [Mon, 28 Oct 2019 01:15:02 +0000 (21:15 -0400)]
Fix remaining compilation issues

4 years agoSimplify BodyCache impl and fix all remaining type errors in librustc_mir (lifetime...
Paul Daniel Faria [Sat, 26 Oct 2019 05:41:17 +0000 (01:41 -0400)]
Simplify BodyCache impl and fix all remaining type errors in librustc_mir (lifetime errors still exist)

4 years agoFix remaining Body -> (ReadOnly)BodyCache type errors in librustc_mir outside of...
Paul Daniel Faria [Fri, 25 Oct 2019 14:01:08 +0000 (10:01 -0400)]
Fix remaining Body -> (ReadOnly)BodyCache type errors in librustc_mir outside of librustc_mir/transform

4 years agoFix typo caused by rebasing
Paul Daniel Faria [Fri, 25 Oct 2019 13:53:59 +0000 (09:53 -0400)]
Fix typo caused by rebasing

4 years agoAdd predecessors fn to ReadOnlyBodyCache, fix more Body -> (ReadOnly)BodyCache type...
Paul Daniel Faria [Fri, 25 Oct 2019 13:36:59 +0000 (09:36 -0400)]
Add predecessors fn to ReadOnlyBodyCache, fix more Body -> (ReadOnly)BodyCache type errors

4 years agoAdd read_only fn to BodyCache<&mut...> impl, fix more Body -> (ReadOnly)BodyCache...
Paul Daniel Faria [Thu, 24 Oct 2019 13:18:04 +0000 (09:18 -0400)]
Add read_only fn to BodyCache<&mut...> impl, fix more Body -> (ReadOnly)BodyCache type errors

4 years agoFix a large number of Body -> (ReadOnly)BodyCache type errors, add predecessor_locati...
Paul Daniel Faria [Thu, 24 Oct 2019 04:38:01 +0000 (00:38 -0400)]
Fix a large number of Body -> (ReadOnly)BodyCache type errors, add predecessor_locations fn to ReadOnlyBodyCache

4 years agoAccount for new maybe_sideeffect helper that requires predecessors
Paul Daniel Faria [Wed, 23 Oct 2019 17:46:23 +0000 (13:46 -0400)]
Account for new maybe_sideeffect helper that requires predecessors

4 years agoConvert &mut to & since the reference didn't need to be mutable
Paul Daniel Faria [Mon, 14 Oct 2019 05:48:32 +0000 (01:48 -0400)]
Convert &mut to & since the reference didn't need to be mutable

4 years agoRevert back to using FunctionCx's Body
Paul Daniel Faria [Mon, 14 Oct 2019 05:38:38 +0000 (01:38 -0400)]
Revert back to using FunctionCx's Body

4 years agoAdd Body back as field of FunctionCx, but under a different lifetime
Paul Daniel Faria [Mon, 14 Oct 2019 05:12:48 +0000 (01:12 -0400)]
Add Body back as field of FunctionCx, but under a different lifetime

4 years agoImproved BodyCache body impl so it only returns a sharable ref, add new body_mut...
Paul Daniel Faria [Mon, 14 Oct 2019 04:46:56 +0000 (00:46 -0400)]
Improved BodyCache body impl so it only returns a sharable ref, add new body_mut method, fix visit macros, simplify usage in codegen_ssa analyzer

4 years agoRemove Body from FunctionCx, pass it along during librustc_codegen_ssa
Paul Daniel Faria [Sat, 12 Oct 2019 20:51:05 +0000 (16:51 -0400)]
Remove Body from FunctionCx, pass it along during librustc_codegen_ssa

4 years agoSimplify Cache wrapper to single type, impl Deref on it, fix all compilation errors...
Paul Daniel Faria [Fri, 11 Oct 2019 03:16:44 +0000 (23:16 -0400)]
Simplify Cache wrapper to single type, impl Deref on it, fix all compilation errors in librustc_codegen_ssa

4 years agoMove predecessor cache outside of Body, use wrapper types to manage Cache and Body...
Paul Daniel Faria [Thu, 10 Oct 2019 03:22:58 +0000 (23:22 -0400)]
Move predecessor cache outside of Body, use wrapper types to manage Cache and Body (WIP, amend this commit)

4 years agoMove predecessors cache back to its own type
Paul Daniel Faria [Mon, 7 Oct 2019 20:08:57 +0000 (16:08 -0400)]
Move predecessors cache back to its own type

This ensures that the cache can be properly ignored during encoding and decoding.
Fix panics that arose due to lack of encoding

4 years agoAdd back cache invalidation to basic_blocks_and_local_decls_mut
Paul Daniel Faria [Fri, 4 Oct 2019 15:46:01 +0000 (11:46 -0400)]
Add back cache invalidation to basic_blocks_and_local_decls_mut

4 years agoAddress nits and remove unneeded pass
Paul Daniel Faria [Fri, 4 Oct 2019 13:44:24 +0000 (09:44 -0400)]
Address nits and remove unneeded pass

4 years agoAddress excessive line length that was triggering warning during linting
Paul Daniel Faria [Fri, 4 Oct 2019 05:01:01 +0000 (01:01 -0400)]
Address excessive line length that was triggering warning during linting

4 years agoMove predecessors cache invalidation back to basic_blocks_mut, add a couple more...
Paul Daniel Faria [Fri, 4 Oct 2019 04:55:28 +0000 (00:55 -0400)]
Move predecessors cache invalidation back to basic_blocks_mut, add a couple more ensure_predecessors to prevent panics

4 years agoEnsure predecessors are recomputed at critical points, fixes panics
Paul Daniel Faria [Thu, 3 Oct 2019 03:49:04 +0000 (23:49 -0400)]
Ensure predecessors are recomputed at critical points, fixes panics

4 years agoAddress linting errors caught by CI
Paul Daniel Faria [Sat, 28 Sep 2019 18:23:42 +0000 (14:23 -0400)]
Address linting errors caught by CI

4 years agoFix Mir visitor macro to ensure it calls the proper method to invalidate the predeces...
Paul Daniel Faria [Sat, 28 Sep 2019 17:49:48 +0000 (13:49 -0400)]
Fix Mir visitor macro to ensure it calls the proper method to invalidate the predecessors cache

4 years agoAdd pass to ensure predecessors cache is generated after optimization
Paul Daniel Faria [Sat, 28 Sep 2019 14:47:41 +0000 (10:47 -0400)]
Add pass to ensure predecessors cache is generated after optimization

4 years agoStop invalidating predecessors cache when accessing unique basic block, invalidate...
Paul Daniel Faria [Fri, 27 Sep 2019 13:19:52 +0000 (09:19 -0400)]
Stop invalidating predecessors cache when accessing unique basic block, invalidate cache when accessing unique terminator

4 years agoGet rid of old comment
Paul Daniel Faria [Wed, 25 Sep 2019 01:29:52 +0000 (21:29 -0400)]
Get rid of old comment

4 years agoInline cache impl into Body, rename predecessor fns, change output of predecessors_fo...
Paul Daniel Faria [Wed, 25 Sep 2019 01:27:00 +0000 (21:27 -0400)]
Inline cache impl into Body, rename predecessor fns, change output of predecessors_for to slice

4 years agoRemove interior mutability in mir predecessors cache
Paul Daniel Faria [Tue, 24 Sep 2019 13:09:15 +0000 (09:09 -0400)]
Remove interior mutability in mir predecessors cache

4 years agoAuto merge of #66874 - RalfJung:miri-assert-panic, r=oli-obk
bors [Mon, 2 Dec 2019 11:43:50 +0000 (11:43 +0000)]
Auto merge of #66874 - RalfJung:miri-assert-panic, r=oli-obk

Miri engine: proper support for `Assert` MIR terminators

This puts down the basis for https://github.com/rust-lang/miri/issues/1070, and I also did some clean-up. The Miri side of this is at https://github.com/rust-lang/miri/pull/1084.

r? @oli-obk

4 years agoAuto merge of #66950 - RalfJung:rollup-12d0zx8, r=RalfJung
bors [Mon, 2 Dec 2019 08:35:24 +0000 (08:35 +0000)]
Auto merge of #66950 - RalfJung:rollup-12d0zx8, r=RalfJung

Rollup of 5 pull requests

Successful merges:

 - #66245 (Conditional compilation for sanitizers)
 - #66654 (Handle const-checks for `&mut` outside of `HasMutInterior`)
 - #66822 (libunwind_panic: adjust miri panic hack)
 - #66827 (handle diverging functions forwarding their return place)
 - #66834 (rustbuild fixes)

Failed merges:

r? @ghost

4 years agoRollup merge of #66834 - infinity0:master, r=Mark-Simulacrum
Ralf Jung [Mon, 2 Dec 2019 08:34:15 +0000 (09:34 +0100)]
Rollup merge of #66834 - infinity0:master, r=Mark-Simulacrum

rustbuild fixes

When upgrading Debian's rustc to 1.38 I needed these patches:

(1) In order to cross-compile rustc 1.38 and take it through the full rustbuild process including install, I needed the first patch.

(2) In order to build rustc 1.38 using rustc 1.38 itself I need to set --cap-lints warn, otherwise I get this error:

~~~~
error: unnecessary `unsafe` block
   --> src/bootstrap/builder.rs:148:19
    |
148 |             name: unsafe { ::std::intrinsics::type_name::<S>() },
    |                   ^^^^^^ unnecessary `unsafe` block
    |
note: lint level defined here
   --> src/bootstrap/lib.rs:107:9
    |
107 | #![deny(warnings, rust_2018_idioms, unused_lifetimes)]
    |         ^^^^^^^^
    = note: `#[deny(unused_unsafe)]` implied by `#[deny(warnings)]`

error: aborting due to previous error

error: could not compile `bootstrap`.

~~~~

In order to set --cap-lints warn however, I need bootstrap.py not to clobber RUSTFLAGS. (This worked previously, not sure if it was broken intentionally but we would like support for it.)

4 years agoRollup merge of #66827 - RalfJung:miri-missing-ret-place, r=oli-obk
Ralf Jung [Mon, 2 Dec 2019 08:34:14 +0000 (09:34 +0100)]
Rollup merge of #66827 - RalfJung:miri-missing-ret-place, r=oli-obk

handle diverging functions forwarding their return place

Fixes https://github.com/rust-lang/miri/issues/1075: the shim around diverging closures turned into function pointers actually "obtains" a return place inside a diverging function, but just uses it as the return place for a diverging callee. Handle this by using NULL places.

This is kind of a hack as it breaks our invariant that all places are dereferencable, but we'd eventually let raw pointers break that anyway I assume so that seems fine.

r? @oli-obk

4 years agoRollup merge of #66822 - RalfJung:miri-panic, r=oli-obk
Ralf Jung [Mon, 2 Dec 2019 08:34:12 +0000 (09:34 +0100)]
Rollup merge of #66822 - RalfJung:miri-panic, r=oli-obk

libunwind_panic: adjust miri panic hack

We adjust the Miri hack in libpanic_unwind such that even with `cfg(miri)`, we build a version of libpanic_unwind that actually works.

This is needed to resolve https://github.com/integer32llc/rust-playground/issues/548.

r? @oli-obk @alexcrichton

4 years agoRollup merge of #66654 - ecstatic-morse:check-consts-ref, r=eddyb,matthewjasper
Ralf Jung [Mon, 2 Dec 2019 08:34:10 +0000 (09:34 +0100)]
Rollup merge of #66654 - ecstatic-morse:check-consts-ref, r=eddyb,matthewjasper

Handle const-checks for `&mut` outside of `HasMutInterior`

Addresses [this comment](https://github.com/rust-lang/rust/pull/64470#discussion_r328200508).

Const-checking relied on `HasMutInterior` to forbid `&mut` in a const context. This was strange because all we needed to do was look for an `Rvalue::Ref` with a certain `BorrowKind`, whereas the `Qualif` traits are specifically meant to get the qualifs for a *value*. This PR removes that logic from `HasMutInterior` and moves it into `check_consts::Validator`.

As a result, we can now properly handle qualifications for `static`s, which had to be ignored previously since you can e.g. borrow a static `Cell` from another `static`. We also remove the `derived_from_illegal_borrow` logic, since it is no longer necessary; we give good errors for subsequent reborrows/borrows of illegal borrows.

4 years agoRollup merge of #66245 - tmiasko:cfg-sanitize, r=oli-obk
Ralf Jung [Mon, 2 Dec 2019 08:34:09 +0000 (09:34 +0100)]
Rollup merge of #66245 - tmiasko:cfg-sanitize, r=oli-obk

Conditional compilation for sanitizers

Configure sanitize option when compiling with a sanitizer to make
it possible to execute different code depending on whether given
sanitizer is enabled or not.

4 years agofix init_allocation_extra
Ralf Jung [Sun, 1 Dec 2019 09:02:41 +0000 (10:02 +0100)]
fix init_allocation_extra

4 years agoAssert terminator is never executed in ConstProp
Ralf Jung [Sat, 30 Nov 2019 13:21:41 +0000 (14:21 +0100)]
Assert terminator is never executed in ConstProp

4 years agofat -> wide
Ralf Jung [Sat, 30 Nov 2019 09:28:01 +0000 (10:28 +0100)]
fat -> wide

4 years agomake alloc_extra machine hook a bit nicer
Ralf Jung [Fri, 29 Nov 2019 18:42:37 +0000 (19:42 +0100)]
make alloc_extra machine hook a bit nicer

4 years agoadd and use helper method to get SourceInfo of current instruction in frame
Ralf Jung [Fri, 29 Nov 2019 10:48:37 +0000 (11:48 +0100)]
add and use helper method to get SourceInfo of current instruction in frame

4 years agoMiri: add helper fn to allocate string; simplify alloc_caller_location
Ralf Jung [Fri, 29 Nov 2019 10:29:30 +0000 (11:29 +0100)]
Miri: add helper fn to allocate string; simplify alloc_caller_location

4 years agoAdd From instances for Pointer -> ScalarMaybeUndef and Pointer -> Immediate
Ralf Jung [Fri, 29 Nov 2019 10:09:26 +0000 (11:09 +0100)]
Add From instances for Pointer -> ScalarMaybeUndef and Pointer -> Immediate

4 years agoexpose span to M::assert_panic, and provide helper to turn that into CallerLocation
Ralf Jung [Fri, 29 Nov 2019 09:13:40 +0000 (10:13 +0100)]
expose span to M::assert_panic, and provide helper to turn that into CallerLocation

4 years agoMiri: add machine hook for MIR-level assertion panics
Ralf Jung [Fri, 29 Nov 2019 08:59:52 +0000 (09:59 +0100)]
Miri: add machine hook for MIR-level assertion panics

4 years agoAuto merge of #66944 - Centril:rollup-ojsszx6, r=Centril
bors [Mon, 2 Dec 2019 03:09:36 +0000 (03:09 +0000)]
Auto merge of #66944 - Centril:rollup-ojsszx6, r=Centril

Rollup of 7 pull requests

Successful merges:

 - #66346 (Replace .unwrap() with ? in std::os::unix::net)
 - #66789 (rustc: move mir::SourceScopeLocalData to a field of SourceScopeData.)
 - #66850 (rustc: hide HirId's fmt::Debug output from -Z span_free_formats.)
 - #66905 (rustc_plugin: Remove some remaining plugin features)
 - #66907 (rustc: don't just show raw DefIndex's in BrNamed's fmt::Debug impl.)
 - #66918 (Add crc and crypto to target feature whitelist on arm)
 - #66926 (add reusable MachineStop variant to Miri engine error enum)

Failed merges:

r? @ghost

4 years agoRollup merge of #66926 - RalfJung:miri-stop, r=oli-obk
Mazdak Farrokhzad [Mon, 2 Dec 2019 03:09:07 +0000 (04:09 +0100)]
Rollup merge of #66926 - RalfJung:miri-stop, r=oli-obk

add reusable MachineStop variant to Miri engine error enum

Replace the Miri-tool-specific `Exit` error variant with something dynamically typed that all clients of the Miri engine can use.

r? @oli-obk
Cc https://github.com/rust-lang/rust/issues/66902

4 years agoRollup merge of #66918 - makotokato:aarch32-crc-crypto, r=petrochenkov
Mazdak Farrokhzad [Mon, 2 Dec 2019 03:09:06 +0000 (04:09 +0100)]
Rollup merge of #66918 - makotokato:aarch32-crc-crypto, r=petrochenkov

Add crc and crypto to target feature whitelist on arm

aarch32 (ARMv8 32-bit) supports crc and crypto.

4 years agoRollup merge of #66907 - eddyb:br-nicer-named, r=oli-obk
Mazdak Farrokhzad [Mon, 2 Dec 2019 03:09:04 +0000 (04:09 +0100)]
Rollup merge of #66907 - eddyb:br-nicer-named, r=oli-obk

rustc: don't just show raw DefIndex's in BrNamed's fmt::Debug impl.

Context: these `fmt::Debug` impls only get used with `-Z verbose` (which some tests use).

I was going to print the path like in #66850 (or rather, use `DefId`'s `fmt::Debug`, which is close but not as nice), but then I realized that most of the `DefId`s were `crate0:DefIndex(0)`, i.e. the crate root.
As the crate root is not a lifetime, they're clearly dummies of some sort, and we don't have to print anything other than the name for them.

This means that out of all the tests, there's only 5 instances of `BrNamed` that now print the full path to the lifetime parameter, and everything else is shorter instead, which doesn't feel too bad.

cc @nikomatsakis

4 years agoRollup merge of #66905 - petrochenkov:rmplugin2, r=Centril
Mazdak Farrokhzad [Mon, 2 Dec 2019 03:09:03 +0000 (04:09 +0100)]
Rollup merge of #66905 - petrochenkov:rmplugin2, r=Centril

rustc_plugin: Remove some remaining plugin features

- Plugin arguments (`#![plugin(my_plugin(args))]`) are no longer supported.
- Registering additional plugins from command line (`-Z extra-plugins=my_plugin`) is no longer supported, `-Z crate-attr=plugin(my_plugin)` can be used instead.
- Lint `plugin_as_library` is removed as mostly useless now, when plugins exist as a compatibility feature with greatly reduced functionality.
- Plugins registering additional LLVM passes (`Registry::register_llvm_pass`) are no longer supported, `-C                   passes=my_passes` can be used instead.

r? @Centril

4 years agoRollup merge of #66850 - eddyb:span-free-formats, r=oli-obk
Mazdak Farrokhzad [Mon, 2 Dec 2019 03:09:01 +0000 (04:09 +0100)]
Rollup merge of #66850 - eddyb:span-free-formats, r=oli-obk

rustc: hide HirId's fmt::Debug output from -Z span_free_formats.

This replaces the only occurrences of `HirId {...}` from tests with paths, i.e.:
```rust
[closure@HirId { owner: DefIndex(4), local_id: 15 } q:&i32, t:&T]
```
becomes, after this PR:
```rust
[closure@foo<T>::{{closure}}#0 q:&i32, t:&T]
```

r? @oli-obk cc @michaelwoerister

4 years agoRollup merge of #66789 - eddyb:mir-source-scope-local-data, r=oli-obk
Mazdak Farrokhzad [Mon, 2 Dec 2019 03:09:00 +0000 (04:09 +0100)]
Rollup merge of #66789 - eddyb:mir-source-scope-local-data, r=oli-obk

rustc: move mir::SourceScopeLocalData to a field of SourceScopeData.

By having one `ClearCrossCrate<SourceScopeLocalData>` for each scope, as opposed to a single `ClearCrossCrate` for all the `SourceScopeLocalData`s, we can represent the fact that some scopes have `SourceScopeLocalData` associated with them, and some don't.

This is useful when doing MIR inlining across crates, because the `ClearCrossCrate` will be `Clear` for the cross-crate MIR scopes and `Set` for the local ones.

Also see https://github.com/rust-lang/rust/pull/66203#issuecomment-555589574 for some context around this approach.

Fixes #51314.

4 years agoRollup merge of #66346 - linkmauve:try-in-docstring, r=Dylan-DPC
Mazdak Farrokhzad [Mon, 2 Dec 2019 03:08:55 +0000 (04:08 +0100)]
Rollup merge of #66346 - linkmauve:try-in-docstring, r=Dylan-DPC

Replace .unwrap() with ? in std::os::unix::net

As people like to copy examples, this gives them good habits.

4 years agoIncorporate fixes from review
Dylan MacKenzie [Sun, 1 Dec 2019 19:43:19 +0000 (11:43 -0800)]
Incorporate fixes from review

4 years agorustc_plugin: Some further cleanup
Vadim Petrochenkov [Sat, 30 Nov 2019 12:35:25 +0000 (15:35 +0300)]
rustc_plugin: Some further cleanup

Remove a useless test

4 years agorustc_plugin: Remove support for plugins adding LLVM passes
Vadim Petrochenkov [Sat, 30 Nov 2019 11:50:04 +0000 (14:50 +0300)]
rustc_plugin: Remove support for plugins adding LLVM passes

4 years agorustc_lint: Remove lint `plugin_as_library`
Vadim Petrochenkov [Sat, 30 Nov 2019 11:08:39 +0000 (14:08 +0300)]
rustc_lint: Remove lint `plugin_as_library`

4 years agorustc_plugin: Remove support for adding plugins from command line
Vadim Petrochenkov [Sat, 30 Nov 2019 08:31:25 +0000 (11:31 +0300)]
rustc_plugin: Remove support for adding plugins from command line

4 years agorustc_plugin: Remove support for plugin arguments
Vadim Petrochenkov [Fri, 29 Nov 2019 22:20:06 +0000 (01:20 +0300)]
rustc_plugin: Remove support for plugin arguments

4 years agoadd reusable MachineStop variant to Miri engine error enum
Ralf Jung [Sun, 1 Dec 2019 10:42:19 +0000 (11:42 +0100)]
add reusable MachineStop variant to Miri engine error enum

4 years agoConditional compilation for sanitizers
Tomasz Miąsko [Tue, 22 Oct 2019 00:00:00 +0000 (00:00 +0000)]
Conditional compilation for sanitizers

Configure sanitize option when compiling with a sanitizer to make
it possible to execute different code depending on whether given
sanitizer is enabled or not.

4 years agoAuto merge of #66917 - Centril:rollup-xj2enik, r=Centril
bors [Sun, 1 Dec 2019 06:00:33 +0000 (06:00 +0000)]
Auto merge of #66917 - Centril:rollup-xj2enik, r=Centril

Rollup of 9 pull requests

Successful merges:

 - #66503 (More useful test error messages on should_panic(expected=...) mismatch)
 - #66662 (Miri: run panic-catching tests in liballoc)
 - #66679 (Improve lifetime errors with implicit trait object lifetimes)
 - #66726 (Use recursion_limit for const eval stack limit)
 - #66790 (Do `min_const_fn` checks for `SetDiscriminant`s target)
 - #66832 (const_prop: detect and avoid catching Miri errors that require allocation)
 - #66880 (Add long error code explanation message for E0203)
 - #66890 (Format liballoc with rustfmt)
 - #66896 (pass Queries to compiler callbacks)

Failed merges:

r? @ghost

4 years agoRollup merge of #66896 - RalfJung:queries, r=Zoxc
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:32 +0000 (04:49 +0100)]
Rollup merge of #66896 - RalfJung:queries, r=Zoxc

pass Queries to compiler callbacks

https://github.com/rust-lang/rust/pull/66791 made it impossible to access the tcx in the callbacks; this should fix that.

r? @Zoxc

4 years agoRollup merge of #66890 - dtolnay:fmt4, r=Dylan-DPC
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:31 +0000 (04:49 +0100)]
Rollup merge of #66890 - dtolnay:fmt4, r=Dylan-DPC

Format liballoc with rustfmt

Same strategy as #66691 -- as with my previous formatting PRs, I am avoiding causing merge conflicts in other PRs by only touches those files that are not involved in any currently open PR. Files that appear in new PRs between when this PR is opened and when it makes it to the top of the bors queue will be reverted from this PR.

The list of files involved in open PRs is determined by querying GitHub's GraphQL API [with this script](https://gist.github.com/dtolnay/aa9c34993dc051a4f344d1b10e4487e8).

With the list of files from the script in outstanding_files, the relevant commands were:

```
$ find src/liballoc -name '*.rs' \
    | xargs rustfmt --edition=2018 --unstable-features --skip-children
$ rg liballoc outstanding_files | xargs git checkout --
```

To confirm no funny business:

```
$ git checkout $THIS_COMMIT^
$ git show --pretty= --name-only $THIS_COMMIT \
    | xargs rustfmt --edition=2018 --unstable-features --skip-children
$ git diff $THIS_COMMIT  # there should be no difference
```

r? @Dylan-DPC

4 years agoRollup merge of #66880 - aDotInTheVoid:add-E0203-long, r=GuillaumeGomez
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:29 +0000 (04:49 +0100)]
Rollup merge of #66880 - aDotInTheVoid:add-E0203-long, r=GuillaumeGomez

Add long error code explanation message for E0203

Addressed some of #61137

r? @GuillaumeGomez

4 years agoRollup merge of #66832 - RalfJung:const-prop-no-alloc, r=oli-obk
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:27 +0000 (04:49 +0100)]
Rollup merge of #66832 - RalfJung:const-prop-no-alloc, r=oli-obk

const_prop: detect and avoid catching Miri errors that require allocation

r? @wesleywiser @oli-obk

4 years agoRollup merge of #66790 - christianpoveda:check-set-discriminant, r=oli-obk
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:26 +0000 (04:49 +0100)]
Rollup merge of #66790 - christianpoveda:check-set-discriminant, r=oli-obk

Do `min_const_fn` checks for `SetDiscriminant`s target

Fixes https://github.com/rust-lang/rust/issues/66556

r? @oli-obk @ecstatic-morse

4 years agoRollup merge of #66726 - CAD97:miri-recursion-limit, r=RalfJung
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:24 +0000 (04:49 +0100)]
Rollup merge of #66726 - CAD97:miri-recursion-limit, r=RalfJung

Use recursion_limit for const eval stack limit

cc https://github.com/rust-lang/miri/issues/643 @orium @RalfJung

I'm really not certain how exactly to handle this change, but it looks like it's that simple.

Reuse `recursion_limit` ("The maximum recursion limit for potentially infinitely recursive operations such as auto-dereference and monomorphization") which is configurable by the user for the const evaluation stack frame limit.

The other option is to make `const_eval_stack_frame_limit` configurable in the same way as `recursion_limit` (but I'm not sure how to do that and it'd be a bigger change).

Fixes https://github.com/rust-lang/miri/issues/643.

4 years agoRollup merge of #66679 - mark-i-m:fix-anon-lifetime-errors, r=matthewjasper
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:23 +0000 (04:49 +0100)]
Rollup merge of #66679 - mark-i-m:fix-anon-lifetime-errors, r=matthewjasper

Improve lifetime errors with implicit trait object lifetimes

r? @matthewjasper

cc @estebank

I still think the ideal solution would be to construct a `BrAnon`, but that seems like a more invasive change, and can be done later. This at least gets rid of the hack in `OutliveSuggestion` and is slightly more principled.

4 years agoRollup merge of #66662 - RalfJung:miri-test-liballoc, r=dtolnay
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:21 +0000 (04:49 +0100)]
Rollup merge of #66662 - RalfJung:miri-test-liballoc, r=dtolnay

Miri: run panic-catching tests in liballoc

I also converted two tests from using `thread::spawn(...).join()` just for catching panics, to `catch_panic`, so that Miri can run them.

4 years agoRollup merge of #66503 - thomasetter:panic-error-msg, r=joshtriplett
Mazdak Farrokhzad [Sun, 1 Dec 2019 03:49:19 +0000 (04:49 +0100)]
Rollup merge of #66503 - thomasetter:panic-error-msg, r=joshtriplett

More useful test error messages on should_panic(expected=...) mismatch

Fixes  #66304
r? @gilescope

Shows both the actual as well as the expected panic value when a test with `should_panic(expected=...)` fails.
This makes `should_panic` more consistent with `assert_eq`.

I am not sure whether printing the `Any::type_id()` is useful, is there something better that we could print for non-string panic values?

4 years agorustbuild: don't clobber RUSTFLAGS, append to it
Ximin Luo [Thu, 28 Nov 2019 10:11:02 +0000 (10:11 +0000)]
rustbuild: don't clobber RUSTFLAGS, append to it

4 years agorustbuild: fix cross-compile install
Ximin Luo [Thu, 28 Nov 2019 10:11:48 +0000 (10:11 +0000)]
rustbuild: fix cross-compile install

although, not sure why this works - it wasn't needed before

4 years agoAuto merge of #66908 - Centril:rollup-26givp6, r=Centril
bors [Sun, 1 Dec 2019 00:39:18 +0000 (00:39 +0000)]
Auto merge of #66908 - Centril:rollup-26givp6, r=Centril

Rollup of 9 pull requests

Successful merges:

 - #66612 (Initial implementation of or-pattern usefulness checking)
 - #66705 (Atomic as_mut_ptr)
 - #66759 (impl TrustedLen for vec::Drain)
 - #66858 (Use LLVMAddAnalysisPasses instead of Rust's wrapper)
 - #66870 (SimplifyArmIdentity only for locals with the same type)
 - #66883 (rustc_typeck: gate AnonConst's generics on feature(const_generics).)
 - #66889 (Make python-generated source files compatible with rustfmt)
 - #66894 (Remove unneeded prelude imports in libcore tests)
 - #66895 (Feature gating *declarations* => new crate `rustc_feature`)

Failed merges:

 - #66905 (rustc_plugin: Remove some remaining plugin features)

r? @ghost

4 years agoMerge match branches
Christian Poveda [Sat, 30 Nov 2019 17:25:45 +0000 (12:25 -0500)]
Merge match branches

4 years agoRollup merge of #66895 - Centril:rustc_feature, r=oli-obk
Mazdak Farrokhzad [Sat, 30 Nov 2019 15:56:58 +0000 (16:56 +0100)]
Rollup merge of #66895 - Centril:rustc_feature, r=oli-obk

Feature gating *declarations* => new crate `rustc_feature`

This PR moves the data-oriented parts of feature gating into its own crate, `rustc_feature`.
The parts consist of some data types as well as `accepted`, `active`, `removed`, and `builtin_attrs`.

Feature gate checking itself remains in `syntax::feature_gate::check`. The parts which define how to emit feature gate errors could probably be moved to `rustc_errors` or to the new `rustc_session` crate introduced in #66878. The visitor itself could probably be moved as a pass in `rustc_passes` depending on how the dependency edges work out.

The PR also contains some drive-by cleanup of feature gate checking. As such, the PR probably best read commit-by-commit.

r? @oli-obk
cc @petrochenkov
cc @Mark-Simulacrum

4 years agoRollup merge of #66894 - dtolnay:prelude, r=Centril
Mazdak Farrokhzad [Sat, 30 Nov 2019 15:56:56 +0000 (16:56 +0100)]
Rollup merge of #66894 - dtolnay:prelude, r=Centril

Remove unneeded prelude imports in libcore tests

These three lines are from c82da7a54b9efb1a0ccbe11de66c71f547bf7db9 dating back to 2015.

They cause problems when applying rustfmt to the codebase, because reordering wildcard imports can trigger new unused import warnings.

As a minimized example, the following program compiles successfully:

```rust
#![deny(unused_imports)]

use std::fmt::Debug;
use std::marker::Send;

pub mod repro {
    use std::prelude::v1::*;
    use super::*;

    pub type D = dyn Debug;
    pub type S = dyn Send;
}

pub type S = dyn Send;
```

but putting it through rustfmt produces a program that fails to compile:

```rust
#![deny(unused_imports)]

use std::fmt::Debug;
use std::marker::Send;

pub mod repro {
    use super::*;
    use std::prelude::v1::*;

    pub type D = dyn Debug;
    pub type S = dyn Send;
}

pub type S = dyn Send;
```

The error is:

```console
error: unused import: `std::prelude::v1::*`
 --> src/main.rs:8:9
  |
8 |     use std::prelude::v1::*;
  |         ^^^^^^^^^^^^^^^^^^^
```

4 years agoRollup merge of #66889 - dtolnay:fmt6, r=rkruppe
Mazdak Farrokhzad [Sat, 30 Nov 2019 15:56:55 +0000 (16:56 +0100)]
Rollup merge of #66889 - dtolnay:fmt6, r=rkruppe

Make python-generated source files compatible with rustfmt

This PR adjusts the generators for src/libcore/num/dec2flt/table.rs, src/libcore/unicode/printable.rs, and src/libcore/unicode/tables.rs to make it so running `rustfmt` on the generated files no longer needs to apply any changes.

This involves tweaking the python scripts where reasonable to better match rustfmt's style, and adding `#[rustfmt::skip]` to big constant tables that there's no point having rustfmt rewrap.

r? @Dylan-DPC

4 years agoRollup merge of #66883 - eddyb:we-cant-have-nice-things, r=oli-obk
Mazdak Farrokhzad [Sat, 30 Nov 2019 15:56:53 +0000 (16:56 +0100)]
Rollup merge of #66883 - eddyb:we-cant-have-nice-things, r=oli-obk

rustc_typeck: gate AnonConst's generics on feature(const_generics).

This PR employs the fix for #43408 when `#![feature(const_generics)]` is enabled, making the feature-gate the opt-in for all the possible breakage this may incur.

For example, if this PR lands, this will cause a cycle error (due to #60471):
```rust
#![feature(const_generics)]

fn foo<T: Into<[u8; 4]>>() {}
```
And so will anything with type-level const expressions, in its bounds.
Surprisingly, `impl`s don't seem to be affected (if they were, even libcore wouldn't compile).

One thing I'm worried about is not knowing how much unstable code out there, using const-generics, will be broken. But types like `Foo<{N+1}>` never really worked, and do after this PR, just not in bounds - so ironically, it's type-level const expressions that don't depend on generics, which will break (in bounds).

Also, if we do this, we'll have effectively blocked stabilization of const generics on #60471.

r? @oli-obk cc @varkor @yodaldevoid @nikomatsakis