102993 Commits

Author SHA1 Message Date
Oliver Scherer
735a610f47 Only memoize const fn calls during const eval
Miri and other engines may want to execute the function in order to detect UB inside of them.
2019-11-29 11:57:17 +01:00
bors
4752c05af4 Auto merge of #66246 - matthewjasper:simplify-mem-cat, r=pnkfelix
Simplify memory categorization

With AST borrowck gone, mem_categorization can be simplified, a lot.

* `cmt_` is now called `Place`. Most local variable names have been updated to reflect this, but the `cat_*` methods retain their names.
* `MemCategorizationContext` no longer needs a `ScopeTree` and always needs an `InferCtxt`.
* `Place` now uses a similar representation to `mir::Place` with a `Vec` of projections.
* `Upvar` places don't include the implicit environment and capture derefs. These are now handled by `regionck` when needed.
* Various types, methods and variants only used by AST borrowck have been removed.
* `ExprUseVisitor` now lives in `rustc_typeck::expr_use_visitor`.
* `MemCategorizationContext` and `Place` live in `rustc_typeck::mem_categorization`.
* `Place` is re-exported in `rustc_typeck::expr_use_visitor` so that Clippy can access it.

The loss of an error in `issue-4335.rs` is due to a change in capture inference in ill-formed programs. If any projection from a variable is moved from then we capture that variable by move, whether or not the place being moved from allows this.

Closes #66270
2019-11-28 10:36:56 +00:00
bors
2539b5f157 Auto merge of #66294 - davidhewitt:const_fn_memoization, r=oli-obk
Add memoization for const function evaluations

When a const function is being evaluated, as long as all its arguments are zero-sized-types (or it has no arguments) then we can trivially memoize the evaluation result using the existing query mechanism.

With thanks to @oli-obk for mentoring me through this at RustFest Barcelona.

r? @oli-obk
2019-11-28 07:06:40 +00:00
bors
96ad8e5fbc Auto merge of #65013 - petertodd:2019-maybeuninit-debug, r=sfackler
Implement Debug for MaybeUninit

Precedent: `UnsafeCell` implements `Debug` even though it can't actually display the value. I noticed this omission while writing the following:

```
#[derive(Debug)]
 pub struct SliceInitializer<'a, T> {
    marker: PhantomData<&'a mut T>,
    uninit: &'a mut [MaybeUninit<T>],
    written: usize,
}
```

...which currently unergonomically fails to compile.

`UnsafeCell` does require `T: Debug`. Because of things like the above I think it'd be better to leave that requirement off. In fact, I'd also suggest removing that requirement for `UnsafeCell` too, which again I noticed in some low-level real world code.
2019-11-28 03:41:29 +00:00
bors
42f93dedbe Auto merge of #66829 - Manishearth:clippyup, r=Manishearth
Update clippy

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

r? @ghost
2019-11-28 00:36:23 +00:00
Manish Goregaokar
9448e68480 Update clippy 2019-11-27 15:30:55 -08:00
bors
6b604a91b7 Auto merge of #66824 - tmandry:rollup-kk56bte, r=tmandry
Rollup of 17 pull requests

Successful merges:

 - #64325 (Stabilize nested self receivers in 1.41.0)
 - #66222 (Use `eq_opaque_type_and_type` when type-checking closure signatures)
 - #66305 (Add by-value arrays to `improper_ctypes` lint)
 - #66399 (rustc_metadata: simplify the interactions between Lazy and Table.)
 - #66534 (Allow global references via ForeignItem and Item for the same symbol name during LLVM codegen)
 - #66700 (Fix pointing at arg for fulfillment errors in function calls)
 - #66704 (Intra doc enum variant field)
 - #66718 (Refactor `parse_enum_item` to use `parse_delim_comma_seq`)
 - #66722 (Handle non_exhaustive in borrow checking)
 - #66744 (Fix shrink_to panic documentation)
 - #66761 (Use LLVMDisposePassManager instead of raw delete in rustllvm)
 - #66769 (Add core::{f32,f64}::consts::TAU.)
 - #66774 (Clean up error codes)
 - #66777 (Put back tidy check on error codes)
 - #66797 (Fixes small typo in array docs r? @steveklabnik)
 - #66798 (Fix spelling typos)
 - #66800 (Combine similar tests for const match)

Failed merges:

r? @ghost
2019-11-27 21:30:14 +00:00
Tyler Mandry
a40494bc50
Rollup merge of #66800 - jyn514:combine-const-match-tests, r=Dylan-DPC
Combine similar tests for const match

See https://github.com/rust-lang/rust/pull/66788#issuecomment-558799307 for context.
2019-11-27 15:28:54 -06:00
Tyler Mandry
999fd561ba
Rollup merge of #66798 - bwignall:typo, r=varkor
Fix spelling typos

Should be non-semantic.

Uses https://en.wikipedia.org/wiki/Wikipedia:Lists_of_common_misspellings/For_machines to find likely typos.
2019-11-27 15:28:53 -06:00
Tyler Mandry
d1cc4c3096
Rollup merge of #66797 - mlodato517:mlodato517-array-doc-typo, r=Dylan-DPC
Fixes small typo in array docs r? @steveklabnik

Fixes a small typo in the array documentation.

Also, wasn't sure which [message](https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#pull-requests) to put this in, and will definitely update the commit message if it is supposed to be the PR description but for "safety" - r? @steveklabnik
2019-11-27 15:28:51 -06:00
Tyler Mandry
6a1fe67cac
Rollup merge of #66777 - GuillaumeGomez:tidy-err-codes, r=Mark-Simulacrum
Put back tidy check on error codes

I just realized that the tidy checks were not run anymore on the error code long explanations. This add it back.

cc @Dylan-DPC
r? @Mark-Simulacrum
2019-11-27 15:28:50 -06:00
Tyler Mandry
ae49770918
Rollup merge of #66774 - GuillaumeGomez:cleanup-err-codes-2, r=Dylan-DPC
Clean up error codes

r? @Dylan-DPC
2019-11-27 15:28:48 -06:00
Tyler Mandry
4c51d58de0
Rollup merge of #66769 - fusion-engineering-forks:tau-constant, r=dtolnay
Add core::{f32,f64}::consts::TAU.

### **`τ`**
2019-11-27 15:28:47 -06:00
Tyler Mandry
b05f14cc40
Rollup merge of #66761 - yuyoyuppe:rust_llvm_minor_fix, r=alexcrichton
Use LLVMDisposePassManager instead of raw delete in rustllvm

LLVM has a dedicated API call which wraps the destructor invocation for the PassManager.
Rust invokes it [otherwhere](d63b24ffcc/src/librustc_codegen_llvm/back/write.rs (L446-L447)), but not in the `LLVMRustWriteOutputFile`.

Since `LLVMDisposePassManager` might be extended to perform additional cleanup actions in the future, this change replaces raw destructor invocation with that API call.
2019-11-27 15:28:45 -06:00
Tyler Mandry
a3a8ee0636
Rollup merge of #66744 - chrisduerr:master, r=Dylan-DPC
Fix shrink_to panic documentation

While the potential for panicking is already documented for the
`Vec::shrink_to` method, it is not clearly labeled with the usual
`# Panics` heading.

r? @steveklabnik
2019-11-27 15:28:44 -06:00
Tyler Mandry
61b810511c
Rollup merge of #66722 - matthewjasper:non_exhaustive_borrowck, r=varkor
Handle non_exhaustive in borrow checking

Borrow check can tell whether a pattern is exhaustive or not, make sure that `non_exhaustive` prevents this.
2019-11-27 15:28:42 -06:00
Tyler Mandry
71f20b89ef
Rollup merge of #66718 - VirrageS:use_comma, r=Centril
Refactor `parse_enum_item` to use `parse_delim_comma_seq`

Followup after https://github.com/rust-lang/rust/pull/66641

Some errors got more verbose but I think they make sense with the help message.
2019-11-27 15:28:40 -06:00
Tyler Mandry
ddb616df90
Rollup merge of #66704 - GuillaumeGomez:intra-doc-enum-variant-field, r=kinnison
Intra doc enum variant field

Part of #43466.

Add intra-doc link support for this:

```rust
enum Foo {
    X {
        y: u8, // can be found with Foo::X::y
    }
}
```

r? @kinnison
2019-11-27 15:28:39 -06:00
Tyler Mandry
48b0fd2060
Rollup merge of #66700 - VirrageS:master, r=matthewjasper
Fix pointing at arg for fulfillment errors in function calls

Closes: https://github.com/rust-lang/rust/issues/66258
2019-11-27 15:28:37 -06:00
Tyler Mandry
8a7a9f2e80
Rollup merge of #66534 - immunant:multiple_global_decls, r=eddyb
Allow global references via ForeignItem and Item for the same symbol name during LLVM codegen

Combining CGUs can result in code that references a static variable through both
an Item and a ForeignItem with the same name. We don't care that the global was
already created by a ForeignItem reference when we see the Item reference, as
long as the LLVM types of the ForeignItem and Item match.

Fixes #66464
2019-11-27 15:28:36 -06:00
Tyler Mandry
5139b53836
Rollup merge of #66399 - eddyb:rmeta-table-cleanup, r=Mark-Simulacrum
rustc_metadata: simplify the interactions between Lazy and Table.

These are small post-#59953 cleanups (including undoing some contrivances from that PR).

r? @michaelwoerister
2019-11-27 15:28:34 -06:00
Tyler Mandry
2f1a4b3748
Rollup merge of #66305 - elichai:2019-11-array_ffi, r=eddyb
Add by-value arrays to `improper_ctypes` lint

Hi,
C doesn't have a notion of passing arrays by value, only by reference/pointer.
Rust currently will pass it correctly by reference by it looks very misleading, and can confuse the borrow checker to think a move had occurred.

Fixes #58905 and fixes #24578.

We could also improve the borrow checker here but I think it's kinda a waste of work if we instead just tell the user it's an invalid FFI call.

(My first PR to `rustc` so if I missed some test or formatting guideline please tell me :) )
2019-11-27 15:28:33 -06:00
Tyler Mandry
b92b7052b7
Rollup merge of #66222 - Aaron1011:fix/opaque-closure, r=pnkfelix
Use `eq_opaque_type_and_type` when type-checking closure signatures

This handles the case where a user explicitly annotations a closure
signature with a opaque return type.

Fixes #63263
2019-11-27 15:28:31 -06:00
Tyler Mandry
cb2deb8a9f
Rollup merge of #64325 - cramertj:nested-self-types, r=mikeyhew
Stabilize nested self receivers in 1.41.0

Previously, only `Self`, `&Self`, `&mut Self`, `Arc<Self>`, `Rc<Self>`,
and `Box<Self>` were available as stable method receivers.

This commit stabilizes nested uses of all the above types.
However, nested receivers remain non-object-safe.
2019-11-27 15:28:29 -06:00
Matthew Jasper
5bc15866d7 Move ExprUseVisitor and mem_categorization to rustc_typeck
`MemCategorizationContext` is now private, the remaining types and
traits remain public for Clippy.
2019-11-27 19:47:12 +00:00
Matthew Jasper
c87de41f99 Remove remaining uses of "cmt" 2019-11-27 19:47:12 +00:00
Matthew Jasper
1d53e43744 Simplify mem_categorization
* `Place` is no longer recursive.
* The `cmt` type alias is removed
* `Upvar` places no longer include the dereferences of the environment
  closure or of by reference captures.
* All non-dereference projections are combined to a single variant.
* Various unnecessary types and methods have been removed.
2019-11-27 19:47:12 +00:00
Matthew Jasper
a5b8a3088a Simplify fields of MemCategorizationContext 2019-11-27 19:28:15 +00:00
Matthew Jasper
4195b60323 Rename cmt_ to Place 2019-11-27 19:28:15 +00:00
bors
e87a205c2e Auto merge of #56231 - eddyb:mir-debuginfo, r=oli-obk
rustc: move debug info from LocalDecl and UpvarDecl into a dedicated VarDebugInfo.

This PR introduces a MIR "user variable" debuginfo system, which amounts to mapping a variable name, in some `SourceScope`, to a `Place`, so that:

* each name can appear multiple times (e.g. due to macro hygiene), even in the same scope
* each `Place` can appear multiple times (e.g. in the future from optimizations like NRVO, which collapse multiple MIR locals into one)
* the `Place`s aren't limited to just locals, so they can describe the (right now quite ad-hoc) closure upvars and generator saved state fields, and can be properly transformed by optimizations (e.g. inlining - see `src/test/mir-opt/inline-closure-captures.rs`)

The main motivation for this was that #48300 and further optimizations were blocked on being able to describe complex debuginfo transformations (see https://github.com/rust-lang/rust/pull/48300#discussion_r170020762).

<hr/>

In the textual representation, the "user variable" debuginfo can be found in each scope, and consists of `debug NAME => PLACE;` "declarations", e.g. the MIR for `let x = ...; let y = ...; ...` is now:
```rust
    let _1: T;                           // in scope 0 at ...
    scope 1 {
        debug x => _1;                   // in scope 1 at ...
        let _2: T;                       // in scope 1 at ...
        scope 2 {
            debug y => _2;               // in scope 2 at ...
        }
    }
```
For reference, this is how the information was represented before this PR:
(notably, the scopes in which the variables are visible for debuginfo weren't even shown anywhere, making `scope 2` look pointless, and user variable names were part of MIR locals)
```rust
    let _1: T;                           // "x" in scope 0 at ...
    scope 1 {
        let _2: T;                       // "y" in scope 1 at ...
        scope 2 {
        }
    }
```

cc @nikomatsakis @michaelwoerister
2019-11-27 17:44:49 +00:00
Eduard-Mihai Burtescu
563ed27c01 rustc: move debug info from LocalDecl and UpvarDecl into a dedicated VarDebugInfo. 2019-11-27 19:22:03 +02:00
Guillaume Gomez
5bb70c14be Fix tidy issues 2019-11-27 17:58:54 +01:00
Guillaume Gomez
243fb6f7b2 Put back tidy check on error codes 2019-11-27 17:58:54 +01:00
David Hewitt
a28fbd4608
Correct typo in src/librustc_mir/const_eval.rs
Co-Authored-By: lqd <remy.rakic+github@gmail.com>
2019-11-27 16:44:53 +00:00
Guillaume Gomez
97c427cc5e Use new ErrorKind enum 2019-11-27 14:28:20 +01:00
Eduard-Mihai Burtescu
a0556b3b79 rustc_metadata: use a macro to deduplicate LazyPerDefTables and PerDefTableBuilders. 2019-11-27 15:16:25 +02:00
Eduard-Mihai Burtescu
d7444c122e rustc_metadata: remove Encodable requirements from LazyMeta impls. 2019-11-27 15:16:04 +02:00
Eduard-Mihai Burtescu
ee42979eeb rustc_metadata: use a separate TableBuilder type to build a Table. 2019-11-27 15:15:57 +02:00
Eduard-Mihai Burtescu
67421bdfdf rustc_metadata: replace PerDefTable<T> with Table<DefIndex, T>. 2019-11-27 15:15:57 +02:00
Guillaume Gomez
d05a914b24 Clean up E0071 long explanation 2019-11-27 13:18:00 +01:00
Guillaume Gomez
97a1653f09 Clean up E0077 long explanation 2019-11-27 13:18:00 +01:00
Guillaume Gomez
843869c690 Clean up E0076 long explanation 2019-11-27 13:18:00 +01:00
bors
04e69e4f42 Auto merge of #66691 - dtolnay:fmt0, r=sfackler
Format libcore with rustfmt

I am interested in whether we can begin cautious incremental progress on #66688 and assess along the way whether we can keep the disruption sufficiently small.

This PR applies rustfmt with default settings to files in src/libcore *that are not involved in any currently open PR* to minimize merge conflicts. The list of files involved in open PRs was 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:

```console
$ find src/libcore -name '*.rs' | xargs rustfmt --edition=2018
$ rg libcore outstanding_files | xargs git checkout --
```

Repeating this process several months apart should get us coverage of most of the rest of libcore.
2019-11-27 12:16:52 +00:00
Guillaume Gomez
b91a6fcd5d Replace Iterator::find calls with Iterator::any when better 2019-11-27 13:13:16 +01:00
Guillaume Gomez
4ab8aa3700 Add support for intra-doc link fields of enum variant 2019-11-27 13:13:16 +01:00
Guillaume Gomez
4993807dd9 little intra-doc code cleanup 2019-11-27 13:12:27 +01:00
David Hewitt
539813944d Add memoization for const function evaluations
When a const function is being evaluated, as long as all its
arguments are zero-sized-types (or it has no arguments) then we
can trivially memoize the evaluation result using the existing
query mechanism.
2019-11-27 12:01:04 +00:00
Dylan DPC
ce9b6972c2
Update mod.rs 2019-11-27 10:27:30 +01:00
bors
876a72a251 Auto merge of #66677 - wesleywiser:fix_const_prop_alloc_id_ice, r=oli-obk
[const prop] Fix "alloc id without corresponding allocation" ICE

r? @oli-obk
2019-11-27 08:00:58 +00:00
David Tolnay
166471e7f1
Bless ui tests for libcore reformat 2019-11-26 23:02:11 -08:00