]> git.lizzy.rs Git - rust.git/log
rust.git
4 years agoFix opaque types resulting from projections in function signature
Aaron Hill [Thu, 7 Nov 2019 02:26:40 +0000 (21:26 -0500)]
Fix opaque types resulting from projections in function signature

When we normalize the types in a function signature, we may end up
resolving a projection to an opaque type (e.g. `Self::MyType` when
we have `type MyType = impl SomeTrait`). When the projection is
resolved, we will instantiate the generic parameters into fresh
inference variables.

While we do want to normalize projections to opaque types, we don't want
to replace the explicit generic parameters (e.g. `T` in `impl
MyTrait<T>`) with inference variables. We want the opaque type in the
function signature to be eligible to be a defining use of that opaque
type - adding inference variables prevents this, since the opaque type
substs now appears to refer to some specific type, rather than a generic
type.

To resolve this issue, we inspect the opaque types in the function
signature after normalization. Any inference variables in the substs are
replaced with the corresponding generic parameter in the identity substs
(e.g. `T` in `impl MyTrait<T>`). Note that normalization is the only way
that we can end up with inference variables in opaque substs in a
function signature - users have no way of getting inference variables
into a function signature.

Note that all of this refers to the opaque type (ty::Opaque) and its
subst - *not* to the underlying type.

Fixes #59342

4 years agoAuto merge of #66592 - estebank:raw-raw-ah-ah-ah, r=cramertj
bors [Sun, 24 Nov 2019 14:08:08 +0000 (14:08 +0000)]
Auto merge of #66592 - estebank:raw-raw-ah-ah-ah, r=cramertj

Rework raw ident suggestions

Use heuristics to determine whethersuggesting raw identifiers is
appropriate.

Account for raw identifiers when printing a path in a `use` suggestion.

Fix #66126.

4 years agoAuto merge of #66393 - ssomers:hash_benches, r=dtolnay
bors [Sun, 24 Nov 2019 10:52:12 +0000 (10:52 +0000)]
Auto merge of #66393 - ssomers:hash_benches, r=dtolnay

introduce benchmarks of HashSet operations

To avoid goofs such as corrected by #66280, I added benchmarks of binary HashSet operations.

Due to the fact x.py keeps recompiling the whole shebang (or at least a big part of it) whenever you touch the test code, and because piling up all tests in one file does not strike me as future proof, I tried moving the hash benches to the separate place they are for liballoc/collections/btree. But it turns out that, in a cleaned checkout, x.py still recompiles the whole shebang whenever you touch the test code (PS or when you add or delete any irrelevant file). So I'm not going to add more tests, and I doubt others will, and these tests have proven their point already, so this PR is kind of pointless

4 years agoAuto merge of #66322 - lzutao:consistent-result-map_or_else, r=dtolnay
bors [Sun, 24 Nov 2019 07:37:01 +0000 (07:37 +0000)]
Auto merge of #66322 - lzutao:consistent-result-map_or_else, r=dtolnay

Stabilize Result::map_or_else

Stabilized this API:
```rust
impl<T, E> Result<T, E> {
    pub fn map_or_else<U, D: FnOnce(E) -> U, F: FnOnce(T) -> U>(self, default: D, f: F) -> U {
        match self {
            Ok(t) => f(t),
            Err(e) => default(e),
        }
    }
}
```

Closes #53268
r? @SimonSapin

4 years agoAuto merge of #66686 - Centril:rollup-07slyoo, r=Centril
bors [Sun, 24 Nov 2019 02:17:29 +0000 (02:17 +0000)]
Auto merge of #66686 - Centril:rollup-07slyoo, r=Centril

Rollup of 5 pull requests

Successful merges:

 - #64856 (Scope format! temporaries)
 - #66411 (mem::forget docs: mention ManuallyDrop)
 - #66594 (Fix cycle when debug-printing opaque types)
 - #66641 (parser: recover on nested ADTs as enum variants)
 - #66659 (make `./x.py bench` again)

Failed merges:

r? @ghost

4 years agoRollup merge of #66659 - Centril:fix-bench, r=Mark-Simulacrum
Mazdak Farrokhzad [Sun, 24 Nov 2019 02:17:03 +0000 (03:17 +0100)]
Rollup merge of #66659 - Centril:fix-bench, r=Mark-Simulacrum

make `./x.py bench` again

Fixes #54016

4 years agoRollup merge of #66641 - VirrageS:master, r=Centril
Mazdak Farrokhzad [Sun, 24 Nov 2019 02:17:02 +0000 (03:17 +0100)]
Rollup merge of #66641 - VirrageS:master, r=Centril

parser: recover on nested ADTs as enum variants

Closes: https://github.com/rust-lang/rust/issues/66127
4 years agoRollup merge of #66594 - Aaron1011:fix/debug-print-cycle, r=matthewjasper
Mazdak Farrokhzad [Sun, 24 Nov 2019 02:17:01 +0000 (03:17 +0100)]
Rollup merge of #66594 - Aaron1011:fix/debug-print-cycle, r=matthewjasper

Fix cycle when debug-printing opaque types

Fixes #61577

When printing an opaque type in non-verbose mode, we use the
`tcx.predicates_of` query to retrieve the opaque type's bounds for
pretty-printing. However, the pervasiveness of logging within librustc
means that we may already be executing `tcx.predicates_of` for the
opaque type we're trying to print, leading to a cycle error.

This commit adds a new 'no queries' thread-local flag to the pretty
printer. This flag is enabled during the computation of `predicates_of`
for opaque types, and causes us to print the opaque type in 'verbose'
mode (which does not require computing any additinal queries). This
should only affect debug logging for highly nested log messages, not any
user-visible output.

4 years agoRollup merge of #66411 - RalfJung:forget, r=sfackler
Mazdak Farrokhzad [Sun, 24 Nov 2019 02:16:59 +0000 (03:16 +0100)]
Rollup merge of #66411 - RalfJung:forget, r=sfackler

mem::forget docs: mention ManuallyDrop

Cc @SimonSapin @Centril

4 years agoRollup merge of #64856 - jonhoo:format-temporaries, r=sfackler
Mazdak Farrokhzad [Sun, 24 Nov 2019 02:16:57 +0000 (03:16 +0100)]
Rollup merge of #64856 - jonhoo:format-temporaries, r=sfackler

Scope format! temporaries

This places the temporaries that `format!` generates to refer to its arguments (through `&dyn Trait`) in a short-lived scope surrounding just the invocation of `format!`. This enables `format!` to be used in generators without the temporaries preventing the generator from being `Send` (due to `dyn Trait` not being `Sync`).

See rust-lang/rust#64477 for details.

4 years agoreview comments
Esteban Küber [Sun, 24 Nov 2019 01:08:04 +0000 (17:08 -0800)]
review comments

4 years agoRework raw ident suggestions
Esteban Küber [Wed, 20 Nov 2019 22:50:13 +0000 (14:50 -0800)]
Rework raw ident suggestions

Use heuristics to determine whethersuggesting raw identifiers is
appropriate.

Account for raw identifiers when printing a path in a `use` suggestion.

4 years agoAdd FIXME for using 'parse_delim_comma_seq' when parsing enum variants
Janusz Marcinkiewicz [Sat, 23 Nov 2019 03:21:21 +0000 (04:21 +0100)]
Add FIXME for using 'parse_delim_comma_seq' when parsing enum variants

4 years agoAuto merge of #66680 - Centril:rollup-1ke3svj, r=Centril
bors [Sat, 23 Nov 2019 22:23:20 +0000 (22:23 +0000)]
Auto merge of #66680 - Centril:rollup-1ke3svj, r=Centril

Rollup of 5 pull requests

Successful merges:

 - #61351 (Stabilize cfg(doc))
 - #66539 (Point at type in `let` assignment on type errors)
 - #66655 (rustdoc: Mark `--extern-private` as unstable)
 - #66657 (rustdoc: Don't panic when failing to write .lock file)
 - #66673 (Move def collector from `rustc` to `rustc_resolve`)

Failed merges:

r? @ghost

4 years agoRollup merge of #66673 - petrochenkov:toresolve, r=Centril
Mazdak Farrokhzad [Sat, 23 Nov 2019 22:22:39 +0000 (23:22 +0100)]
Rollup merge of #66673 - petrochenkov:toresolve, r=Centril

Move def collector from `rustc` to `rustc_resolve`

It's used only from `rustc_resolve`, so we can move it there, thus reducing the size of `rustc` (https://github.com/rust-lang/rust/issues/65031).

It's quite possible that we can merge the def collector pass into the "build reduced graph" pass (they are always run together and do similar things), but it's some larger work.

r? @eddyb

4 years agoRollup merge of #66657 - ollie27:rustdoc_flock_panic, r=GuillaumeGomez
Mazdak Farrokhzad [Sat, 23 Nov 2019 22:22:38 +0000 (23:22 +0100)]
Rollup merge of #66657 - ollie27:rustdoc_flock_panic, r=GuillaumeGomez

rustdoc: Don't panic when failing to write .lock file

It can be treated like any other unexpected IO error.

I couldn't think of a good way to add a test for this unfortunately.

r? @GuillaumeGomez

4 years agoRollup merge of #66655 - ollie27:rustdoc_extern-private_unstable, r=GuillaumeGomez
Mazdak Farrokhzad [Sat, 23 Nov 2019 22:22:36 +0000 (23:22 +0100)]
Rollup merge of #66655 - ollie27:rustdoc_extern-private_unstable, r=GuillaumeGomez

rustdoc: Mark `--extern-private` as unstable

It's not even stable in rustc so it shouldn't be stable in rustdoc.

r? @kinnison

4 years agoRollup merge of #66539 - estebank:let-ty, r=Centril
Mazdak Farrokhzad [Sat, 23 Nov 2019 22:22:34 +0000 (23:22 +0100)]
Rollup merge of #66539 - estebank:let-ty, r=Centril

Point at type in `let` assignment on type errors

Fix #61067.

4 years agoRollup merge of #61351 - GuillaumeGomez:stabilize-cfg-rustdoc, r=QuietMisdreavus
Mazdak Farrokhzad [Sat, 23 Nov 2019 22:22:33 +0000 (23:22 +0100)]
Rollup merge of #61351 - GuillaumeGomez:stabilize-cfg-rustdoc, r=QuietMisdreavus

Stabilize cfg(doc)

cc #43781.

4 years agoAuto merge of #66674 - flip1995:clippyup, r=Manishearth
bors [Sat, 23 Nov 2019 18:51:10 +0000 (18:51 +0000)]
Auto merge of #66674 - flip1995:clippyup, r=Manishearth

Update Clippy

r? @Manishearth @oli-obk

4 years agoUpdate Cargo.lock
flip1995 [Sat, 23 Nov 2019 16:27:36 +0000 (17:27 +0100)]
Update Cargo.lock

4 years agoUpdate Clippy
flip1995 [Sat, 23 Nov 2019 16:26:34 +0000 (17:26 +0100)]
Update Clippy

4 years agoAuto merge of #66653 - ivan:lint-name-fix, r=Centril
bors [Sat, 23 Nov 2019 15:38:49 +0000 (15:38 +0000)]
Auto merge of #66653 - ivan:lint-name-fix, r=Centril

docs: fix lint name for `unused_variables`

4 years agoRemove unnecessary clone
Aaron Hill [Sat, 23 Nov 2019 15:23:12 +0000 (10:23 -0500)]
Remove unnecessary clone

4 years agoMove def collector from `rustc` to `rustc_resolve`
Vadim Petrochenkov [Sat, 23 Nov 2019 15:19:57 +0000 (18:19 +0300)]
Move def collector from `rustc` to `rustc_resolve`

4 years agoAuto merge of #66597 - MaulingMonkey:pr-natvis-std-collections-hash, r=michaelwoerister
bors [Sat, 23 Nov 2019 07:27:17 +0000 (07:27 +0000)]
Auto merge of #66597 - MaulingMonkey:pr-natvis-std-collections-hash, r=michaelwoerister

debuginfo:  Support for std::collections::Hash* in windows debuggers.

Okay, I finally needed to debug code involving a HashMap!  Added support for HashSet s as well.

r? @michaelwoerister

### Local Testing

Verified these are passing locally:
```cmd
:: cmd.exe
python x.py test --stage 1 --build x86_64-pc-windows-msvc src/test/debuginfo
python x.py test --stage 1 --build i686-pc-windows-msvc src/test/debuginfo
python x.py test --stage 1 src/tools/tidy

:: MinGW MSYS2
./x.py test --stage 1 --build x86_64-pc-windows-gnu src/test/debuginfo
```

### Related Issues

* https://github.com/rust-lang/rust/issues/36503
* https://github.com/rust-lang/rust/issues/40460
* https://github.com/rust-gamedev/wg/issues/20

4 years agomake `./x.py bench` again
Mazdak Farrokhzad [Sat, 23 Nov 2019 06:06:27 +0000 (07:06 +0100)]
make `./x.py bench` again

4 years agoAuto merge of #66656 - Centril:rollup-fivygwz, r=Centril
bors [Sat, 23 Nov 2019 04:24:35 +0000 (04:24 +0000)]
Auto merge of #66656 - Centril:rollup-fivygwz, r=Centril

Rollup of 4 pull requests

Successful merges:

 - #65961 (add fn type_name_of_val)
 - #66574 (Update tidy check for error codes testing)
 - #66576 (made gdb pretty-printing more robust when printing uninitialized vec)
 - #66583 (Clarify Step Documentation)

Failed merges:

r? @ghost

4 years agoCleanup code after review fixes
Janusz Marcinkiewicz [Sat, 23 Nov 2019 03:01:14 +0000 (04:01 +0100)]
Cleanup code after review fixes

4 years agoAdd error reporting on nested keywords inside 'enum' definition
Janusz Marcinkiewicz [Sat, 23 Nov 2019 02:41:12 +0000 (03:41 +0100)]
Add error reporting on nested keywords inside 'enum' definition

4 years agorustdoc: Don't panic when failing to write .lock file
Oliver Middleton [Sat, 23 Nov 2019 02:08:10 +0000 (02:08 +0000)]
rustdoc: Don't panic when failing to write .lock file

It can be treated like any other unexpected IO error.

4 years agoRollup merge of #66583 - Phlosioneer:patch-2, r=Dylan-DPC
Mazdak Farrokhzad [Sat, 23 Nov 2019 01:22:49 +0000 (02:22 +0100)]
Rollup merge of #66583 - Phlosioneer:patch-2, r=Dylan-DPC

Clarify Step Documentation

While the redesign is in progress (#62886), clarify the purpose of replace_zero and replace_one.

First, "returning itself" is technically impossible due to the function signature of &mut self -> Self. A clone or copy operation must be used. So this is now explicitly stated in the documentation.

Second, the added docs give some guidance about the actual contract around implementation of replace_zero and replace one. Specifically, the only usage is to create a range with no more steps, by setting start to replace_one and end to replace_zero. So the only property that is actually used is `replace_one > replace_zero`. See https://github.com/rust-lang/rust/issues/42168#issuecomment-489554232

The new documentation does not say that is the *only* contract, and so it should not be considered an api change. It just highlights the most important detail for implementors.

The redesign doesn't seem to be landing any time soon, so this is a stopgap measure to reduce confusion in the meantime.

4 years agoRollup merge of #66576 - pnkfelix:more-robust-gdb-vec-printer, r=alexcrichton
Mazdak Farrokhzad [Sat, 23 Nov 2019 01:22:47 +0000 (02:22 +0100)]
Rollup merge of #66576 - pnkfelix:more-robust-gdb-vec-printer, r=alexcrichton

made gdb pretty-printing more robust when printing uninitialized vec

made gdb pretty-printing more robust when printing uninitialized vec

I based this solution on my reading of:

https://rethinkdb.com/blog/make-debugging-easier-with-custom-pretty-printers#what-is-still-to-be-done

That post claims that there is no clean way to check for garbage pointers, and
so this PR adopts the same solution of tentatively attempting to convert a
dererence to a string, which throws a clean exception on garbage that we can
catch and recover from.

I only made the change to vec and not the other pretty printers because I wanted
to focus my effort on the simplest thing that would resolve issue #64343. In
particular, I *considered* generalizing this fix to work on the other datatypes
in the pretty-printing support library, but I don't want to invest effort in
that until after we resolve our overall debugging support strategy; see also
issues #60826 and #65564.

Fix #64343

4 years agoRollup merge of #66574 - GuillaumeGomez:update-tidy-err-code-check, r=Mark-Simulacrum
Mazdak Farrokhzad [Sat, 23 Nov 2019 01:22:45 +0000 (02:22 +0100)]
Rollup merge of #66574 - GuillaumeGomez:update-tidy-err-code-check, r=Mark-Simulacrum

Update tidy check for error codes testing

Now that all the error codes have been grouped into one file, we moved the long error explanations into markdown files, which means that we need to read those markdown file to also count their code blocks as well.

So 2 "big" things happened here:
* No more need to keep the current error code when reading the `error_codes.rs` file since it's been put into the equivalent markdown file.
* Need to instead read the markdown file (but it's simpler since I can just look for code blocks directly).

4 years agoRollup merge of #65961 - lcnr:typename_of, r=Dylan-DPC
Mazdak Farrokhzad [Sat, 23 Nov 2019 01:22:44 +0000 (02:22 +0100)]
Rollup merge of #65961 - lcnr:typename_of, r=Dylan-DPC

add fn type_name_of_val

This function is often useful during testing and mirrors `align_of_val` and `size_of_val`.

# Example

Showing the default type of integers.

```rust
let x = 7;
println!("per default, integers have the type: {}", std::any::type_name_of_val(&x));
```

To my knowledge this can currently not be done without defining a function similar to `type_name_of_val`.

4 years agoAuto merge of #66507 - ecstatic-morse:const-if-match, r=oli-obk
bors [Sat, 23 Nov 2019 01:13:41 +0000 (01:13 +0000)]
Auto merge of #66507 - ecstatic-morse:const-if-match, r=oli-obk

Enable `if` and `match` in constants behind a feature flag

This PR is an initial implementation of #49146. It introduces a `const_if_match` feature flag and does the following if it is enabled:
- Allows `Downcast` projections, `SwitchInt` terminators and `FakeRead`s for matched places through the MIR const-checker.
- Allows `if` and `match` expressions through the HIR const-checker.
- Stops converting `&&` to `&` and `||` to `|` in `const` and `static` items.

As a result, the following operations are now allowed in a const context behind the feature flag:
- `if` and `match`
- short circuiting logic operators (`&&` and `||`)
- the `assert` and `debug_assert` macros (if the `const_panic` feature flag is also enabled)

However, the following operations remain forbidden:
- `while`, `loop` and `for` (see #52000)
- the `?` operator (calls `From::from` on its error variant)
- the `assert_eq` and `assert_ne` macros, along with their `debug` variants (calls `fmt::Debug`)

This PR is possible now that we use dataflow for const qualification (see #64470 and #66385).

r? @oli-obk
cc @rust-lang/wg-const-eval @eddyb

4 years agodocs: fix lint name for `unused_variables`
Ivan Kozik [Sat, 23 Nov 2019 00:15:55 +0000 (00:15 +0000)]
docs: fix lint name for `unused_variables`

4 years agorustdoc: Mark `--extern-private` as unstable
Oliver Middleton [Sat, 23 Nov 2019 00:15:39 +0000 (00:15 +0000)]
rustdoc: Mark `--extern-private` as unstable

It's not even stable in rustc so it shouldn't be stable in rustdoc.

4 years agoAuto merge of #66640 - Centril:rollup-862009l, r=Centril
bors [Fri, 22 Nov 2019 22:03:11 +0000 (22:03 +0000)]
Auto merge of #66640 - Centril:rollup-862009l, r=Centril

Rollup of 8 pull requests

Successful merges:

 - #66183 (*Syntactically* permit visibilities on trait items & enum variants)
 - #66566 (Document pitfall with `impl PartialEq<B> for A`)
 - #66575 (Remove pretty printing of specific nodes in AST)
 - #66587 (Handle statics in MIR as const pointers)
 - #66619 (follow the convention in this file to use third-person singular verbs)
 - #66633 (Error code's long explanation cleanup)
 - #66637 (fix reoccuring typo: dereferencable -> dereferenceable)
 - #66639 (resolve: more declarative `fresh_binding`)

Failed merges:

r? @ghost

4 years agoRollup merge of #66639 - Centril:simplify-fresh-binding, r=petrochenkov
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:57:55 +0000 (19:57 +0100)]
Rollup merge of #66639 - Centril:simplify-fresh-binding, r=petrochenkov

resolve: more declarative `fresh_binding`

Following up on https://github.com/rust-lang/rust/pull/64111, this PR redefines `fresh_binding` wrt. `already_bound_and` and `already_bound_or` in a more declarative and simplified fashion.

cc #54883

r? @petrochenkov

4 years agoRollup merge of #66637 - RalfJung:typo, r=Centril
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:57:54 +0000 (19:57 +0100)]
Rollup merge of #66637 - RalfJung:typo, r=Centril

fix reoccuring typo: dereferencable -> dereferenceable

4 years agoRollup merge of #66633 - GuillaumeGomez:err-codes-cleanup, r=Dylan-DPC
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:57:52 +0000 (19:57 +0100)]
Rollup merge of #66633 - GuillaumeGomez:err-codes-cleanup, r=Dylan-DPC

Error code's long explanation cleanup

Continuing to clean up the error code's long explanation.

r? @Dylan-DPC

4 years agoRollup merge of #66619 - guanqun:use-third-person-singular-verb, r=Centril
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:57:51 +0000 (19:57 +0100)]
Rollup merge of #66619 - guanqun:use-third-person-singular-verb, r=Centril

follow the convention in this file to use third-person singular verbs

4 years agoRollup merge of #66587 - matthewjasper:handle-static-as-const, r=oli-obk
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:57:49 +0000 (19:57 +0100)]
Rollup merge of #66587 - matthewjasper:handle-static-as-const, r=oli-obk

Handle statics in MIR as const pointers

This is the first PR towards the goal of removing `PlaceBase::Static`. In this PR:

* Statics are lowered to dereferencing a const pointer.
* The temporaries holding such pointers are tracked in MIR, for the most part this is only used for diagnostics. There are two exceptions:
    * The borrow checker has some checks for thread-locals that directly use this data.
    * Const checking will suppress "cannot dereference raw pointer" diagnostics for pointers to `static mut`/`extern static`. This is to maintain the current behaviour (12 tests fail otherwise).

The following are left to future PRs (I think that @spastorino will be working on the first 3):

* Applying the same treatments to promoted statics.
* Removing `PlaceBase::Static`.
* Replacing `PlaceBase` with `Local`.
* Moving the ever growing collection of metadata that we have for diagnostics in MIR passes somewhere more appropriate.

r? @oli-obk

4 years agoRollup merge of #66575 - Mark-Simulacrum:no-uii, r=petrochenkov
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:57:48 +0000 (19:57 +0100)]
Rollup merge of #66575 - Mark-Simulacrum:no-uii, r=petrochenkov

Remove pretty printing of specific nodes in AST

The ability to print a specific item as identified by NodeId or path
seems not particularly useful, and certainly carries quite a bit of
complexity with it.

This is intended to simplify our CLI parsing a bit and remove a
non-uncomplicated piece of it; I largely did this to remove the
dependency on NodeId from librustc/session but it's not really
necessary to do so in this invasive a way. The alternative is
moving it to librustc_interface or driver, probably.

4 years agoRollup merge of #66566 - robamler:issue-66476, r=rkruppe
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:57:46 +0000 (19:57 +0100)]
Rollup merge of #66566 - robamler:issue-66476, r=rkruppe

Document pitfall with `impl PartialEq<B> for A`

Fixes #66476 by turning the violating example into an explicit
counterexample.

4 years agoRollup merge of #66183 - Centril:empty-vis-trait-decl, r=petrochenkov
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:57:41 +0000 (19:57 +0100)]
Rollup merge of #66183 - Centril:empty-vis-trait-decl, r=petrochenkov

*Syntactically* permit visibilities on trait items & enum variants

Fixes #65041

Suppose we have `$vis trait_item` or `$vis enum_variant` and `$vis` is a `:vis` macro fragment. Before this PR, this would fail to parse. This is now instead allowed as per language team consensus in https://github.com/rust-lang/rust/issues/65041#issuecomment-538105286. (See added tests for elaboration.)

Moreover, we now also permit visibility modifiers on trait items & enum variants *syntactically* but reject them with semantic checks (in `ast_validation`):

```rust
#[cfg(FALSE)]
trait Foo { pub fn bar(); } // OK

#[cfg(FALSE)]
enum E { pub U } // OK
```

4 years agoresolve: more declarative fresh_binding
Mazdak Farrokhzad [Fri, 22 Nov 2019 18:13:51 +0000 (19:13 +0100)]
resolve: more declarative fresh_binding

4 years agoAuto merge of #66558 - Aaron1011:update/miri-unwind, r=RalfJung
bors [Fri, 22 Nov 2019 18:23:00 +0000 (18:23 +0000)]
Auto merge of #66558 - Aaron1011:update/miri-unwind, r=RalfJung

Bump Miri for panic unwinding support

4 years agosmall error code explanations improvements
Guillaume Gomez [Fri, 22 Nov 2019 12:35:08 +0000 (13:35 +0100)]
small error code explanations improvements

4 years agoImprove E0061 long error explanation
Guillaume Gomez [Fri, 22 Nov 2019 12:34:52 +0000 (13:34 +0100)]
Improve E0061 long error explanation

4 years agoImprove E0057 long error explanation
Guillaume Gomez [Fri, 22 Nov 2019 12:31:47 +0000 (13:31 +0100)]
Improve E0057 long error explanation

4 years agoImprove E0023 long error explanation
Guillaume Gomez [Fri, 22 Nov 2019 12:25:48 +0000 (13:25 +0100)]
Improve E0023 long error explanation

4 years agoImprove E0015 long error explanation
Guillaume Gomez [Fri, 22 Nov 2019 12:23:33 +0000 (13:23 +0100)]
Improve E0015 long error explanation

4 years agofix reoccuring typo: dereferencable -> dereferenceable
Ralf Jung [Fri, 22 Nov 2019 17:11:28 +0000 (18:11 +0100)]
fix reoccuring typo: dereferencable -> dereferenceable

4 years agoAuto merge of #66460 - cjgillot:hashstable_generic, r=Zoxc
bors [Fri, 22 Nov 2019 13:54:41 +0000 (13:54 +0000)]
Auto merge of #66460 - cjgillot:hashstable_generic, r=Zoxc

Add a proc-macro to derive HashStable in librustc dependencies

A second proc-macro is added to derive HashStable for crates librustc depends on.
This proc-macro HashStable_Generic (to bikeshed) allows to decouple code and some librustc's boilerplate.

Not everything is migrated, because `Span` and `TokenKind` require to be placed inside librustc.
Types using them stay there too.

Split out of #66279
r? @Zoxc

4 years agoBump Miri for rustup fixes
Aaron Hill [Fri, 22 Nov 2019 13:20:46 +0000 (08:20 -0500)]
Bump Miri for rustup fixes

4 years agoAuto merge of #66565 - Mark-Simulacrum:syntax-cfg-mod, r=petrochenkov
bors [Fri, 22 Nov 2019 10:33:29 +0000 (10:33 +0000)]
Auto merge of #66565 - Mark-Simulacrum:syntax-cfg-mod, r=petrochenkov

Move process_configure_mod to rustc_parse

This removes the hack in favor of perhaps a less principled, but less painful, approach.

This also supports my work to decouple `Session` from librustc, as `ParseSess` currently has `Attribute` as "part" of it but after this PR will no longer do so.

4 years agofollow the convention in this file to use third-person singular verbs
Guanqun Lu [Fri, 22 Nov 2019 07:33:49 +0000 (15:33 +0800)]
follow the convention in this file to use third-person singular verbs

4 years agoAuto merge of #66537 - nnethercote:delay-is_local_ever_initialized, r=spastorino
bors [Fri, 22 Nov 2019 07:21:48 +0000 (07:21 +0000)]
Auto merge of #66537 - nnethercote:delay-is_local_ever_initialized, r=spastorino

Delay an `is_local_ever_initialized` call.

This commit moves the call after a `return` that almost always runs. It
speeds up the `unicode_normalization` benchmark by about 2%.

r? @spastorino

4 years agoDocument pitfall with `impl PartialEq<B> for A`
Robert Bamler [Wed, 20 Nov 2019 03:57:03 +0000 (19:57 -0800)]
Document pitfall with `impl PartialEq<B> for A`

Fixes #66476 by turning the violating example into an explicit
counterexample.

4 years agoAuto merge of #66524 - ecstatic-morse:compiletest-multiple-revisions, r=Centril
bors [Fri, 22 Nov 2019 04:06:52 +0000 (04:06 +0000)]
Auto merge of #66524 - ecstatic-morse:compiletest-multiple-revisions, r=Centril

Support multiple revisions in `compiletest`

The `//[X]~` syntax filters errors for tests that are run across multiple cfgs with  `// revisions:`. This commit extends that syntax to accept `//[X,Y]~`, which will match multiple cfgs to the same error annotation. This is functionally the same as writing two comments, `//[X]~` and `//[Y]~`, but can fit on a single line.

While refactoring `compiletest` to support this, I also uncovered a small bug that was causing an incremental test to always pass, despite no errors being emitted.

r? @Centril

4 years agoPoint at type in `let` assignment on type errors
Esteban Küber [Tue, 19 Nov 2019 05:00:24 +0000 (21:00 -0800)]
Point at type in `let` assignment on type errors

4 years agoAllow `Downcast` projections in `qualify_min_const_fn`
Dylan MacKenzie [Tue, 19 Nov 2019 20:22:39 +0000 (12:22 -0800)]
Allow `Downcast` projections in `qualify_min_const_fn`

4 years agoConst-check the discriminant of a `SwitchInt`
Dylan MacKenzie [Mon, 18 Nov 2019 23:31:04 +0000 (15:31 -0800)]
Const-check the discriminant of a `SwitchInt`

4 years agoReorganize, bless and add tests for const control flow
Dylan MacKenzie [Mon, 18 Nov 2019 05:11:42 +0000 (21:11 -0800)]
Reorganize, bless and add tests for const control flow

This creates a new test directory, `ui/consts/control-flow` to hold
tests related to control flow in a const context. It also blesses all
existing tests with the new error messages, and adds new tests for the
`const_if_match` feature.

4 years agoAuto merge of #66282 - Centril:simplify-try, r=oli-obk
bors [Fri, 22 Nov 2019 00:16:40 +0000 (00:16 +0000)]
Auto merge of #66282 - Centril:simplify-try, r=oli-obk

[mir-opt] asking `?`s in a more optimized fashion

This PR works towards https://github.com/rust-lang/rust/issues/66234 by providing two optimization passes meant to run in sequence:

- `SimplifyArmIdentity` which transforms something like:
  ```rust
  _LOCAL_TMP = ((_LOCAL_1 as Variant ).FIELD: TY );
  ((_LOCAL_0 as Variant).FIELD: TY) = move _LOCAL_TMP;
  discriminant(_LOCAL_0) = VAR_IDX;
  ```

  into:

  ```rust
  _LOCAL_0 = move _LOCAL_1
  ```

- `SimplifyBranchSame` which transforms `SwitchInt`s to identical basic blocks into a `goto` to the first reachable target.

Together, these are meant to simplify the following into just `res`:
```rust
match res {
    Ok(x) => Ok(x),
    Err(x) => Err(x),
}
```

It should be noted however that the desugaring of `?` includes a function call and so the first pass in this PR relies on inlining to substitute that function call for identity on `x`. Inlining requires `mir-opt-level=2` so this might not have any effect in perf-bot but let's find out.

r? @oli-obk -- This is WIP, but I'd appreciate feedback. :)

4 years agoAdd entry for `const_if_match` in unstable book
Dylan MacKenzie [Sat, 16 Nov 2019 06:55:45 +0000 (22:55 -0800)]
Add entry for `const_if_match` in unstable book

4 years agoSuggest `const_if_match` on nightly
Dylan MacKenzie [Sat, 16 Nov 2019 07:08:30 +0000 (23:08 -0800)]
Suggest `const_if_match` on nightly

4 years agoMake `name` work for `MatchSource`
Dylan MacKenzie [Mon, 18 Nov 2019 20:58:28 +0000 (12:58 -0800)]
Make `name` work for `MatchSource`

4 years agoHold a `TyCtxt` in the HIR const-checker
Dylan MacKenzie [Fri, 15 Nov 2019 22:46:11 +0000 (14:46 -0800)]
Hold a `TyCtxt` in the HIR const-checker

4 years agoAllow `Downcast` projections if `const_if_match` enabled
Dylan MacKenzie [Mon, 18 Nov 2019 04:41:34 +0000 (20:41 -0800)]
Allow `Downcast` projections if `const_if_match` enabled

These are generated when matching on enum variants to extract the value
within. We should have no problem evaluating these, but care should be
taken that we aren't accidentally allowing some other operation.

4 years agoDon't transform short-circuiting logic if `const_if_match` enabled
Dylan MacKenzie [Thu, 19 Sep 2019 18:25:19 +0000 (11:25 -0700)]
Don't transform short-circuiting logic if `const_if_match` enabled

4 years agoAdd feature gate for const `if` and `match`
Dylan MacKenzie [Wed, 18 Sep 2019 17:27:31 +0000 (10:27 -0700)]
Add feature gate for const `if` and `match`

4 years agoGive name to full regex capture
Dylan MacKenzie [Thu, 21 Nov 2019 22:13:42 +0000 (14:13 -0800)]
Give name to full regex capture

4 years agoChange some tests to use the shorter comment style
Dylan MacKenzie [Mon, 18 Nov 2019 18:43:11 +0000 (10:43 -0800)]
Change some tests to use the shorter comment style

4 years agoFix broken incremental test
Dylan MacKenzie [Mon, 18 Nov 2019 18:06:21 +0000 (10:06 -0800)]
Fix broken incremental test

This test does not actually emit any warnings, since
`#![allow(warnings)]` was specified. `compiletest` was erroneously
ignoring `//~` tests and looking only for `//[X]~` ones. As a result of
the changes in the previous commit, we now look for `//~` comments in
incremental tests and expect them to appear in *all* revisions.

4 years agoAllow multiple cfgs per comment in "revisions:" tests
Dylan MacKenzie [Sat, 16 Nov 2019 05:40:05 +0000 (21:40 -0800)]
Allow multiple cfgs per comment in "revisions:" tests

The `//[X]~` syntax filters errors for tests that are run across
multiple cfgs with  `// revisions:`. This commit extends that syntax to
accept `//[X,Y]~`, which will match multiple cfgs to the same error
annotation. This is functionally the same as writing two comments,
`//[X]~` and `//[Y]~`, but can fit on a single line.

4 years agoAddress review comments
Matthew Jasper [Thu, 21 Nov 2019 21:20:47 +0000 (21:20 +0000)]
Address review comments

4 years agoAuto merge of #66610 - alexreg:trait-upcasting-cosmetic, r=Centril
bors [Thu, 21 Nov 2019 21:01:14 +0000 (21:01 +0000)]
Auto merge of #66610 - alexreg:trait-upcasting-cosmetic, r=Centril

Aggregation of drive-by cosmetic changes for trait-upcasting PR

Cherry-picked from #60900.

As requested by @Centril (and @nikomatsakis, I believe).

r? @Centril

4 years agoBless remaining test output
Matthew Jasper [Tue, 19 Nov 2019 23:16:58 +0000 (23:16 +0000)]
Bless remaining test output

4 years agoTrack pointers to statics in MIR
Matthew Jasper [Mon, 18 Nov 2019 23:04:06 +0000 (23:04 +0000)]
Track pointers to statics in MIR

4 years agoFix rebase
Matthew Jasper [Mon, 18 Nov 2019 22:15:33 +0000 (22:15 +0000)]
Fix rebase

4 years agoReadjust constant evaluation for operands
Santiago Pastorino [Mon, 11 Nov 2019 11:53:31 +0000 (12:53 +0100)]
Readjust constant evaluation for operands

4 years agoSimplify pattern
Santiago Pastorino [Mon, 11 Nov 2019 11:49:21 +0000 (12:49 +0100)]
Simplify pattern

4 years agoReadjust const qualification to detect statics again
Santiago Pastorino [Mon, 11 Nov 2019 11:15:38 +0000 (12:15 +0100)]
Readjust const qualification to detect statics again

4 years agoRemove statics from HAIR by lowering them to a pointer constant
Oliver Scherer [Thu, 24 Oct 2019 15:20:18 +0000 (17:20 +0200)]
Remove statics from HAIR by lowering them to a pointer constant

4 years agoIntroduce MIR optimizations for simplifying `x?` on `Result`s.
Mazdak Farrokhzad [Sun, 10 Nov 2019 09:26:33 +0000 (10:26 +0100)]
Introduce MIR optimizations for simplifying `x?` on `Result`s.

This optimization depends on inlining for the identity
conversions introduced by the lowering of the `?`.
To take advantage of `SimplifyArmIdentity`, `-Z mir-opt-level=2`
is required because that triggers the inlining MIR optimization.

4 years agoApplied suggestions from code review.
Alexander Regueiro [Thu, 21 Nov 2019 18:40:27 +0000 (18:40 +0000)]
Applied suggestions from code review.

4 years agoAggregation of drive-by cosmetic changes.
Alexander Regueiro [Fri, 17 May 2019 01:20:14 +0000 (02:20 +0100)]
Aggregation of drive-by cosmetic changes.

4 years agoAuto merge of #66389 - estebank:type-err-labels, r=petrochenkov
bors [Thu, 21 Nov 2019 17:53:19 +0000 (17:53 +0000)]
Auto merge of #66389 - estebank:type-err-labels, r=petrochenkov

Specific labels when referring to "expected" and "found" types

4 years agomove cfg(doc) docs into a separate page
QuietMisdreavus [Wed, 6 Nov 2019 17:10:21 +0000 (11:10 -0600)]
move cfg(doc) docs into a separate page

4 years agoRename the cfg attribute from rustdoc to doc
Guillaume Gomez [Wed, 6 Nov 2019 13:48:10 +0000 (14:48 +0100)]
Rename the cfg attribute from rustdoc to doc

4 years agoStabilize cfg rustdoc
Guillaume Gomez [Fri, 6 Sep 2019 08:51:52 +0000 (10:51 +0200)]
Stabilize cfg rustdoc

4 years agoAuto merge of #66607 - Centril:rollup-yb7cl73, r=Centril
bors [Thu, 21 Nov 2019 14:30:02 +0000 (14:30 +0000)]
Auto merge of #66607 - Centril:rollup-yb7cl73, r=Centril

Rollup of 5 pull requests

Successful merges:

 - #65355 (Stabilize `!` in Rust 1.41.0)
 - #65730 (Suggest to add lifetime constraint at explicit ouput of functions)
 - #66468 (Cleanup Miri SIMD intrinsics)
 - #66515 (Reduce size of `hir::Expr` by boxing more of `hir::InlineAsm`)
 - #66602 (Revert "Update Source Code Pro and include italics")

Failed merges:

r? @ghost

4 years agoRollup merge of #66602 - GuillaumeGomez:revert-font, r=GuillaumeGomez
Mazdak Farrokhzad [Thu, 21 Nov 2019 14:29:08 +0000 (15:29 +0100)]
Rollup merge of #66602 - GuillaumeGomez:revert-font, r=GuillaumeGomez

Revert "Update Source Code Pro and include italics"

This reverts commit ea9519bf16f0be137a814a49c9fbaf232ba49a43.

4 years agoRollup merge of #66515 - Centril:cheaper-inline-asm, r=oli-obk
Mazdak Farrokhzad [Thu, 21 Nov 2019 14:29:07 +0000 (15:29 +0100)]
Rollup merge of #66515 - Centril:cheaper-inline-asm, r=oli-obk

Reduce size of `hir::Expr` by boxing more of `hir::InlineAsm`

r? @oli-obk

4 years agoRollup merge of #66468 - RalfJung:simd-cleanup, r=oli-obk
Mazdak Farrokhzad [Thu, 21 Nov 2019 14:29:05 +0000 (15:29 +0100)]
Rollup merge of #66468 - RalfJung:simd-cleanup, r=oli-obk

Cleanup Miri SIMD intrinsics

r? @oli-obk @eddyb Cc @gnzlbg

4 years agoRollup merge of #65730 - csmoe:return-lifetime, r=nikomatsakis
Mazdak Farrokhzad [Thu, 21 Nov 2019 14:29:02 +0000 (15:29 +0100)]
Rollup merge of #65730 - csmoe:return-lifetime, r=nikomatsakis

Suggest to add lifetime constraint at explicit ouput of functions

Closes #62097

4 years agoRollup merge of #65355 - Centril:almost-is-never-enough, r=oli-obk
Mazdak Farrokhzad [Thu, 21 Nov 2019 14:29:00 +0000 (15:29 +0100)]
Rollup merge of #65355 - Centril:almost-is-never-enough, r=oli-obk

Stabilize `!` in Rust 1.41.0

This PR stabilizes the `never_type` (written `!`). The type represents computations that we know diverge in the type system and therefore has no values / inhabitants / elements / members.

The current nightly version is 1.40.0 which will become stable on 2019-12-19.

Tracking issue: https://github.com/rust-lang/rust/issues/35121.
Closes https://github.com/rust-lang/rust/issues/57012.
Closes https://github.com/rust-lang/rust/issues/58184.
Original stabilization report: https://github.com/rust-lang/rust/issues/57012#issuecomment-452398538

Additional notes:

- In #62661 we reserved `impl<T> From<!> for T` so this concern should be resolved.
- The type inference fallback change is moved to `#![feature(never_type_fallback)]` (https://github.com/rust-lang/rust/issues/65992).
- You can find all of the tests referencing `never_type` in this PR which also reorganizes these tests whereas they were more scattered before.

r? @nikomatsakis