Commit Graph

108484 Commits

Author SHA1 Message Date
Mazdak Farrokhzad
904909fd06
Rollup merge of #69929 - cuviper:unicode-13.0.0, r=Mark-Simulacrum
Regenerate tables for Unicode 13.0.0
2020-03-19 06:57:34 +01:00
Mazdak Farrokhzad
5570a2374f
Rollup merge of #69814 - jonas-schievink:gen-ret-unw, r=Zoxc
Smaller and more correct generator codegen

This removes unnecessary panicking branches in the resume function when the generator can not return or unwind, respectively.

Closes https://github.com/rust-lang/rust/issues/66100

It also addresses the correctness concerns wrt poisoning on unwind. These are not currently a soundness issue because any operation *inside* a generator that could possibly unwind will result in a cleanup path for dropping it, ultimately reaching a `Resume` terminator, which we already handled correctly. Future MIR optimizations might optimize that out, though.

r? @Zoxc
2020-03-19 06:57:32 +01:00
Mazdak Farrokhzad
61fe2e4036
Rollup merge of #69443 - ehuss:tidy-license, r=skade,Mark-Simulacrum
tidy: Better license checks.

This implements some improvements to the license checks in tidy:

* Use `cargo_metadata` instead of parsing vendored crates. This allows license checks to run without vendoring enabled, and allows the checks to run on PR builds.
* Check for stale entries.
* Check that the licenses for exceptions are what we think they are.
* Verify exceptions do not leak into the runtime.

Closes #62618
Closes #62619
Closes #63238 (I think)

There are some substantive changes here. The follow licenses have changed from the original comments:

* openssl BSD+advertising clause to Apache-2.0
* pest MPL2 to MIT/Apache-2.0
* smallvec MPL2 to MIT/Apache-2.0
* clippy lints MPL2 to MIT OR Apache-2.0
2020-03-19 06:57:30 +01:00
Mazdak Farrokhzad
ffb3c2cb3d
Rollup merge of #69036 - eddyb:monoshim, r=nikomatsakis
rustc: don't resolve Instances which would produce malformed shims.

There are some `InstanceDef` variants (shims and drop "glue") which contain a `Ty`, and that `Ty` is used in generating the shim MIR. But if that `Ty` mentions any generic parameters, the generated shim would refer to them (but they won't match the `Substs` of the `Instance`), or worse, generating the shim would fail because not enough of the type is known.

Ideally we would always produce a "skeleton" of the type, e.g. `(_, _)` for dropping any tuples with two elements, or `Vec<_>` for dropping any `Vec` value, but that's a lot of work, and they would still not match the `Substs` of the `Instance` as it exists today, so `Instance` would probably need to change.

By making `Instance::resolve` return `None` in the still-generic cases, we get behavior similar to specialization, where a default can only be used if there are no more generic parameters which would allow a more specialized `impl` to match.

<hr/>

This was found while testing the MIR inliner with #68965, because it was trying to inline shims.

cc @rust-lang/wg-mir-opt
2020-03-19 06:57:28 +01:00
Mazdak Farrokhzad
fddbee64ac
Rollup merge of #68941 - Aaron1011:fix/imported-span, r=petrochenkov
Properly handle Spans that reference imported SourceFiles

Previously, metadata encoding used DUMMY_SP to represent any spans that
referenced an 'imported' SourceFile - e.g. a SourceFile from an upstream
dependency. This currently has no visible consequences, since these
kinds of spans don't currently seem to be emitted anywhere. However,
there's no reason that we couldn't start using such spans in
diagnostics.

This PR changes how we encode and decode spans in crate metadata. We
encode spans in one of two ways:

* 'Local' spans, which reference non-imported SourceFiles, are encoded
  exactly as before.
* 'Foreign' spans, which reference imported SourceFiles, are encoded
  with the CrateNum of their 'originating' crate. Additionally, their
'lo' and 'high' values are rebased on top of the 'originating' crate,
which allows them to be used with the SourceMap data encoded for that
crate.

To support this change, I've also made the following modifications:

* `DefId` and related structs are now moved to `rustc_span`. This allows
  us to use a `CrateNum` inside `SourceFile`. `CrateNum` has special
handling during deserialization (it gets remapped to be the proper
`CrateNum` from the point of view of the current compilation session),
so using a `CrateNum` instead of a plain integer 'workaround type' helps
to simplify deserialization.
* The `ExternalSource` enum is renamed to `ExternalSourceKind`. There is
now a struct called `ExternalSource`, which holds an
`ExternalSourceKind` along with the original line number information for
the file. This is used during `Span` serialization to rebase spans onto
their 'owning' crate.
2020-03-19 06:57:27 +01:00
Aaron Hill
5e2856122a
Properly handle Spans that reference imported SourceFiles
Previously, metadata encoding used DUMMY_SP to represent any spans that
referenced an 'imported' SourceFile - e.g. a SourceFile from an upstream
dependency. These leads to sub-optimal error messages in certain cases
(see the included test).

This PR changes how we encode and decode spans in crate metadata. We
encode spans in one of two ways:

* 'Local' spans, which reference non-imported SourceFiles, are encoded
  exactly as before.
* 'Foreign' spans, which reference imported SourceFiles, are encoded
  with the CrateNum of their 'originating' crate. Additionally, their
'lo' and 'high' values are rebased on top of the 'originating' crate,
which allows them to be used with the SourceMap data encoded for that
crate.

The `ExternalSource` enum is renamed to `ExternalSourceKind`. There is
now a struct called `ExternalSource`, which holds an
`ExternalSourceKind` along with the original line number information for
the file. This is used during `Span` serialization to rebase spans onto
their 'owning' crate.
2020-03-18 23:56:42 -04:00
bors
57e1da59cd Auto merge of #70118 - pietroalbini:rollup-pgjc90i, r=pietroalbini
Rollup of 2 pull requests

Successful merges:

 - #70112 (Rollup of 10 pull requests)
 - #70116 (ci: use python from the correct path)

Failed merges:

r? @ghost
2020-03-19 00:28:33 +00:00
Pietro Albini
94ed0719f7
Rollup merge of #70116 - pietroalbini:ci-fix-windows-python-path, r=Mark-Simulacrum
ci: use python from the correct path

Apparently the old path we were using for Python 2 on Windows was not documented, and eventually got removed. This switches our CI to use the correct path.

See https://github.com/rust-lang/rust/pull/70112#issuecomment-600760786 for the actual failure.
2020-03-18 21:11:11 +01:00
Pietro Albini
11053bafac
Rollup merge of #70112 - Centril:rollup-gpi5tbq, r=Centril
Rollup of 10 pull requests

Successful merges:

 - #67749 (keyword docs for else and inkeyword docs for else and in.)
 - #69139 (clean up E0308 explanation)
 - #69189 (Erase regions in writeback)
 - #69837 (Use smaller discriminants for generators)
 - #69838 (Expansion-driven outline module parsing)
 - #69839 (Miri error reform)
 - #69899 (Make methods declared by `newtype_index` macro `const`)
 - #69920 (Remove some imports to the rustc crate)
 - #70075 (Fix repr pretty display)
 - #70106 (Tidy: fix running rustfmt twice)

Failed merges:

 - #70051 (Allow `hir().find` to return `None`)
 - #70074 (Expand: nix all fatal errors)

r? @ghost
2020-03-18 21:11:07 +01:00
Pietro Albini
779e5922ee
ci: use python from the correct path
Apparently the old path we were using for Python 2 on Windows was not
documented, and eventually got removed. This switches our CI to use the
correct path.
2020-03-18 21:07:44 +01:00
Mazdak Farrokhzad
b6f61a1f51
Rollup merge of #70106 - ehuss:fix-tidy-fmt-twice, r=Mark-Simulacrum
Tidy: fix running rustfmt twice

`./x.py test tidy` runs rustfmt twice. This is because `Build::build` runs `execute_cli` twice (once dry, once not). This can be quite slow (and prints a bunch of things twice).

I'm not sure if this is really the best place to check the dry_run status.
2020-03-18 18:03:49 +01:00
Mazdak Farrokhzad
60a2d063a9
Rollup merge of #70075 - GuillaumeGomez:fix-repr-display, r=petrochenkov
Fix repr pretty display

Fixes #70027.

r? @varkor
2020-03-18 18:03:47 +01:00
Mazdak Farrokhzad
292c538265
Rollup merge of #69920 - Centril:hir-cleanup, r=Zoxc
Remove some imports to the rustc crate

- When we have `NestedVisitorMap::None`, we use `type Map = dyn intravisit::Map<'v>;` instead of the actual map. This doesn't actually result in dynamic dispatch (in the future we may want to use an associated type default to simplify the code).

- Use `rustc_session::` imports instead of `rustc::{session, lint}`.

r? @Zoxc
2020-03-18 18:03:44 +01:00
Mazdak Farrokhzad
252184969b
Rollup merge of #69899 - ecstatic-morse:const-idx-methods, r=oli-obk
Make methods declared by `newtype_index` macro `const`

Crates that use the macro to define an `Idx` type need to enable `#![feature(const_if_match, const_panic)]`.
2020-03-18 18:03:42 +01:00
Mazdak Farrokhzad
a958314472
Rollup merge of #69839 - RalfJung:miri-error-cleanup, r=oli-obk
Miri error reform

Some time ago we started moving Miri errors into a few distinct categories, but we never classified all the old errors. That's what this PR does.

~~This is on top of https://github.com/rust-lang/rust/pull/69762; [relative diff](https://github.com/RalfJung/rust/compare/validity-errors...RalfJung:miri-error-cleanup).~~

r? @oli-obk

Fixes https://github.com/rust-lang/const-eval/issues/4
2020-03-18 18:03:40 +01:00
Mazdak Farrokhzad
23b79d83f2
Rollup merge of #69838 - Centril:expand-module, r=petrochenkov
Expansion-driven outline module parsing

After this PR, the parser will not do any conditional compilation or loading of external module files when `mod foo;` is encountered. Instead, the parser only leaves `mod foo;` in place in the AST, with no items filled in. Expansion later kicks in and will load the actual files and do the parsing. This entails that the following is now valid:

```rust
#[cfg(FALSE)]
mod foo {
    mod bar {
        mod baz; // `foo/bar/baz.rs` doesn't exist, but no error!
    }
}
```

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

r? @petrochenkov
2020-03-18 18:03:38 +01:00
Mazdak Farrokhzad
4118ff61ec
Rollup merge of #69837 - jonas-schievink:gen-discr-opt, r=tmandry
Use smaller discriminants for generators

Closes https://github.com/rust-lang/rust/issues/69815

I'm not yet sure about the runtime performance impact of this, so I'll try running this on some benchmarks (if I can find any). (Update: No impact on the benchmarks I've measured on)

* [x] Add test with a generator that has exactly 256 total states
* [x] Add test with a generator that has more than 256 states so that it needs to use a u16 discriminant
* [x] Add tests for the size of `Option<[generator]>`
* [x] Add tests for the `discriminant_value` intrinsic in all cases
2020-03-18 18:03:37 +01:00
Mazdak Farrokhzad
3f583fc270
Rollup merge of #69189 - matthewjasper:erase-the-world, r=nikomatsakis
Erase regions in writeback

Regions in `TypeckTables` (except canonicalized user annotations) are now erased. Further, we no longer do lexical region solving on item bodies with `-Zborrowck=mir`.

cc #68261
r? @nikomatsakis
2020-03-18 18:03:35 +01:00
Mazdak Farrokhzad
8188b2163d
Rollup merge of #69139 - GuillaumeGomez:cleanup-e0308, r=Dylan-DPC
clean up E0308 explanation

r? @Dylan-DPC
2020-03-18 18:03:33 +01:00
Mazdak Farrokhzad
56106847da
Rollup merge of #67749 - gilescope:keyword-in, r=Dylan-DPC
keyword docs for else and inkeyword docs for else and in.

First cut of else and in keyword docs. Comments and suggestions more than welcome.
2020-03-18 18:03:31 +01:00
Eric Huss
287c4eb094 Tidy: fix running rustfmt twice 2020-03-18 08:15:29 -07:00
Mazdak Farrokhzad
8caf688844 --bless windows test 2020-03-18 15:11:35 +01:00
Mazdak Farrokhzad
e301291cb6 fix rebase fallout 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
5ee4f6f660 fix pre-expansion linting infra 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
41a0b3ec53 use pretty-compare-only in a test 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
fe71342091 tweak outline module parsing spans 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
7d0e5bbb67 parser/expand: minor cleanup 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
a6cb04ff23 add test for stripped nested outline module 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
31ee8e0a43 {rustc_parse -> rustc_expand}::config 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
3796faefb1 {rustc_parse::parser -> rustc_expand}::module 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
ddcc8ec89d move Directory -> parser::module 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
f1ca9969bf parse: module parsing -> item.rs 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
83a757a9ca outline modules: parse -> expand. 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
59bf8a07f9 extract error_on_circular_module 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
463995fe29 extract parse_external_module 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
8bab88f2d9 de-fatalize outline module parsing 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
b9e1b26611 expand: use push_directory 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
98e71cd5d7 decouple eval_src_mod from Parser 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
53a633fb44 decouple push_directory from Parser 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
ca098b16a4 detach submod_path from Parser 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
dfcefa49ed extract error_on_circular_module 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
7108b7fbfe extract parse_mod 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
803de3188c submod_path: use id.span 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
2db5d49d47 simplify submod_path 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
185c1d340c extract error_decl_mod_in_block 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
2899a58cab extract error_cannot_declare_mod_here 2020-03-18 15:08:25 +01:00
Mazdak Farrokhzad
bc75cba23f submod_path_from_attr: simplify & document 2020-03-18 15:08:25 +01:00
bors
f509b26a77 Auto merge of #69907 - ehuss:update-cargo, r=ehuss
Update cargo

Update cargo

21 commits in bda50510d1daf6e9c53ad6ccf603da6e0fa8103f..7019b3ed3d539db7429d10a343b69be8c426b576
2020-03-02 18:05:34 +0000 to 2020-03-17 21:02:00 +0000
- Run through clippy (rust-lang/cargo#8015)
- Fix config profiles using "dev" in `cargo test`. (rust-lang/cargo#8012)
- Run CI on all PRs. (rust-lang/cargo#8011)
- Add unit-graph JSON output. (rust-lang/cargo#7977)
- Split workspace/validate() into multiple functions (rust-lang/cargo#8008)
- Use Option::as_deref (rust-lang/cargo#8005)
- De-duplicate edges (rust-lang/cargo#7993)
- Revert "Disable preserving mtimes on archives" (rust-lang/cargo#7935)
- Close the front door for clippy but open the back (rust-lang/cargo#7533)
- Fix CHANGELOG.md typos (rust-lang/cargo#7999)
- Update changelog note about crate-versions flag. (rust-lang/cargo#7998)
- Bump to 0.45.0, update changelog (rust-lang/cargo#7997)
- Bump libgit2 dependencies (rust-lang/cargo#7996)
- Avoid buffering large amounts of rustc output. (rust-lang/cargo#7838)
- Add "Updating" status for git submodules. (rust-lang/cargo#7989)
- WorkspaceResolve: Use descriptive lifetime label. (rust-lang/cargo#7990)
- Support old html anchors in manifest chapter. (rust-lang/cargo#7983)
- Don't create hardlink for library test and integrations tests, fixing rust-lang/cargo#7960 (rust-lang/cargo#7965)
- Partially revert change to filter debug_assertions. (rust-lang/cargo#7970)
- Try to better handle restricted crate names. (rust-lang/cargo#7959)
- Fix bug with new feature resolver and required-features. (rust-lang/cargo#7962)
2020-03-18 06:31:24 +00:00
Eric Huss
d79c1d3428 Update cargo 2020-03-17 20:33:07 -07:00
bors
d939f708d9 Auto merge of #68915 - timvermeulen:non_fused_iter, r=Amanieu
Fix bugs in Peekable and Flatten when using non-fused iterators

I fixed a couple of bugs with regard to the `Peekable` and `Flatten`/`FlatMap` iterators when the underlying iterator isn't fused. For testing, I also added a `NonFused` iterator wrapper that panics when `next` or `next_back` is called on an iterator that has returned `None` before, which will hopefully make it easier to spot these mistakes in the future.

### Peekable

`Peekable::next_back` was implemented as
```rust
self.iter.next_back().or_else(|| self.peeked.take().and_then(|x| x))
```
which is incorrect because when the `peeked` field is `Some(None)`, then `None` has already been returned from the inner iterator and what it returns from `next_back` can no longer be relied upon. `test_peekable_non_fused` tests this.

### Flatten

When a `FlattenCompat` instance only has a `backiter` remaining (i.e. `self.frontiter` is `None` and `self.iter` is empty), then `next` will call `self.iter.next()` every time, so the `iter` field needs to be fused. I fixed it by giving it the type `Fuse<I>` instead of `I`, I think this is the only way to fix it. `test_flatten_non_fused_outer` tests this.

Furthermore, previously `FlattenCompat::next` did not set `self.frontiter` to `None` after it returned `None`, which is incorrect when the inner iterator type isn't fused. I just delegated it to `try_fold` because that already handles it correctly. `test_flatten_non_fused_inner` tests this.

r? @scottmcm
2020-03-18 03:08:52 +00:00