Commit graph

16623 commits

Author SHA1 Message Date
bors
472211ab0a Auto merge of #60811 - wesleywiser:bump_measureme, r=varkor
Bump measureme dependency to 0.3

measureme@0.3 adds a version header to the binary file format which will
help reduce tool breakage in the future.
2019-05-16 07:04:03 +00:00
bors
49d139c64b Auto merge of #60693 - saleemjaffer:refactor_fntype_stuff, r=eddyb
refactor some `FnType` stuff to `rustc::ty::layout`

Does work in the direction of #56166.
2019-05-16 01:26:13 +00:00
Mazdak Farrokhzad
b4c340e4bb
Rollup merge of #60444 - nikomatsakis:issue-60010-cycle-error-investigation, r=pnkfelix
forego caching for all participants in cycles, apart from root node

This is a targeted fix for #60010, which uncovered a pretty bad failure of our caching strategy in the face of coinductive cycles. The problem is explained in the comment in the PR on the new field, `in_cycle`, but I'll reproduce it here:

> Starts out as false -- if, during evaluation, we encounter a
> cycle, then we will set this flag to true for all participants
> in the cycle (apart from the "head" node). These participants
> will then forego caching their results. This is not the most
> efficient solution, but it addresses #60010. The problem we
> are trying to prevent:
>
> - If you have `A: AutoTrait` requires `B: AutoTrait` and `C: NonAutoTrait`
> - `B: AutoTrait` requires `A: AutoTrait` (coinductive cycle, ok)
> - `C: NonAutoTrait` requires `A: AutoTrait` (non-coinductive cycle, not ok)
>
> you don't want to cache that `B: AutoTrait` or `A: AutoTrait`
> is `EvaluatedToOk`; this is because they were only considered
> ok on the premise that if `A: AutoTrait` held, but we indeed
> encountered a problem (later on) with `A: AutoTrait. So we
> currently set a flag on the stack node for `B: AutoTrait` (as
> well as the second instance of `A: AutoTrait`) to supress
> caching.
>
> This is a simple, targeted fix. The correct fix requires
> deeper changes, but would permit more caching: we could
> basically defer caching until we have fully evaluated the
> tree, and then cache the entire tree at once.

I'm not sure what the impact of this fix will be in terms of existing crates or performance: we were accepting incorrect code before, so there will perhaps be some regressions, and we are now caching less.

As the comment above notes, we could do a lot better than this fix, but that would involve more invasive rewrites. I thought it best to start with something simple.

r? @pnkfelix -- but let's do crater/perf run
cc @arielb1
2019-05-14 22:00:13 +02:00
Saleem Jaffer
3031705009 some more refactor of FnType. Things build now 2019-05-14 14:14:12 +05:30
Wesley Wiser
ea93215576 Bump measureme dependency to 0.3
measureme@0.3 adds a version header to the binary file format which will
help reduce tool breakage in the future.
2019-05-13 22:15:55 -04:00
Felix S Klock II
decd6d3660
modify comment
modify the comment on `in_cycle` to reflect changes requested by ariel and myself.
2019-05-13 13:29:49 +02:00
bors
69ef8fbe70 Auto merge of #60765 - matthewjasper:fix-more-escaping-rescopes, r=oli-obk
Fix more escaping ReScopes

Closes #58840
2019-05-13 08:13:01 +00:00
bors
fe5f42cdb8 Auto merge of #60630 - nnethercote:use-Symbol-more, r=petrochenkov
Use `Symbol` more

A `Symbol` can be equated with a string (e.g. `&str`). This involves a
TLS lookup to get the chars (and a Mutex lock in a parallel compiler)
and then a char-by-char comparison. This functionality is convenient but
avoids one of the main benefits of `Symbol`s, which is fast equality
comparisons.

This PR removes the `Symbol`/string equality operations, forcing a lot
of existing string occurrences to become `Symbol`s. Fortunately, these
are almost all static strings (many are attribute names) and we can add
static `Symbol`s as necessary, and very little extra interning occurs.
The benefits are (a) a slight speedup (possibly greater in a parallel
compiler), and (b) the code is a lot more principled about `Symbol` use.
The main downside is verbosity, particularly with more `use
syntax::symbol::symbols` items.

r? @Zoxc
2019-05-13 00:28:38 +00:00
Nicholas Nethercote
ea9fac5687 Return a Symbol from name_or_empty functions. 2019-05-13 09:31:32 +10:00
Nicholas Nethercote
999c1fc281 Remove the equality operation between Symbol and strings.
And also the equality between `Path` and strings, because `Path` is made
up of `Symbol`s.
2019-05-13 09:31:30 +10:00
Nicholas Nethercote
fb084a48e2 Pass a Symbol to check_name, emit_feature_err, and related functions. 2019-05-13 09:29:22 +10:00
Nicholas Nethercote
79602c87b5 Rename syntax::symbol::symbols as syntax::symbol::sym.
Because it's going to be used a lot.
2019-05-13 09:26:43 +10:00
bors
4443957f27 Auto merge of #60767 - Centril:rollup-4cbsb73, r=Centril
Rollup of 4 pull requests

Successful merges:

 - #60694 (Fix HIR printing of existential type #60662)
 - #60750 (syntax: Remove some legacy nonterminal tokens)
 - #60751 (Assorted cleanup in parser & AST validation)
 - #60752 (Fix minor typos for ItemLocalId)

Failed merges:

r? @ghost
2019-05-12 20:28:19 +00:00
Mazdak Farrokhzad
b381e52c7c
Rollup merge of #60752 - shiatsumat:minor-typos-hir, r=wesleywiser
Fix minor typos for ItemLocalId

* added comma after 'that is'
* "can be implement" -> "can be implemented"
2019-05-12 21:14:11 +02:00
Mazdak Farrokhzad
8327517946
Rollup merge of #60694 - Pulkit07:issue60662, r=alexreg
Fix HIR printing of existential type #60662

This fixes https://github.com/rust-lang/rust/issues/60662
2019-05-12 21:14:07 +02:00
Matthew Jasper
9a4f0abd7a Don't allow any ReScope in impl trait types
This shouldn't be possible any more, but if it does happen, emit an
error rather than maybe panicking later when NLL finds a the ReScope.
Impl trait in bindings is sufficiently broken that I don't think this
breaks anything that works for it.
2019-05-12 18:51:40 +01:00
bors
1764b29725 Auto merge of #60679 - petrochenkov:lit2, r=matklad
Keep original literal tokens in AST

The original literal tokens (`token::Lit`) are kept in AST until lowering to HIR.

The tokens are kept together with their lowered "semantic" representation (`ast::LitKind`), so the size of `ast::Lit` is increased (this also increases the size of meta-item structs used for processing built-in attributes).
However, the size of `ast::Expr` stays the same.

The intent is to remove the "semantic" representation from AST eventually and keep literals as tokens until lowering to HIR (at least), and I'm going to work on that, but it would be good to land this sooner to unblock progress on the [lexer refactoring](https://github.com/rust-lang/rust/pull/59706).

Fixes a part of https://github.com/rust-lang/rust/issues/43081 (literal tokens that are passed to proc macros are always precise, including hexadecimal numbers, strings with their original escaping, etc)
Fixes a part of https://github.com/rust-lang/rust/issues/60495 (everything except for proc macro API doesn't need escaping anymore)
This also allows to eliminate a certain hack from the lexer (https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/pretty-printing.20comments/near/165005357).

cc @matklad
2019-05-12 17:44:06 +00:00
Matthew Jasper
1f5145e273 Treat generators the same as closure for escaping lifetimes 2019-05-12 17:52:33 +01:00
Matthew Jasper
664c8ed301 Always use the stronger outlives version for opaque types 2019-05-12 17:12:49 +01:00
Yusuke Matsushita
0fc2cfb66c
Fix minor typos for ItemLocalId
* added comma before 'that is'
* "can be implement" -> "can be implemented"
2019-05-12 09:52:38 +09:00
Pulkit Goyal
3b78a474f3 Fix HIR printing of existential type #60662
This fixes https://github.com/rust-lang/rust/issues/60662
2019-05-12 01:50:58 +03:00
Mazdak Farrokhzad
362431b4d6 Cleanup the .await HIR lowering with .stmt(..). 2019-05-11 15:42:14 +02:00
Vadim Petrochenkov
8739668438 Simplify conversions between tokens and semantic literals 2019-05-11 14:24:21 +03:00
Vadim Petrochenkov
a5b3f33cb9 Eliminate comments::Literal 2019-05-11 14:24:21 +03:00
Vadim Petrochenkov
751ae5af1a Introduce hir::Lit not keeping the original token 2019-05-11 14:24:21 +03:00
Vadim Petrochenkov
f2834a403a Keep the original token in ast::Lit 2019-05-11 14:24:21 +03:00
Vadim Petrochenkov
28b125b83d Turn ast::Lit into a struct 2019-05-11 14:24:21 +03:00
bors
acc7e652f8 Auto merge of #59288 - Centril:hir-if-to-match, r=oli-obk
[let_chains, 1/6] Remove hir::ExprKind::If

Per https://github.com/rust-lang/rust/issues/53667#issuecomment-471583239.

r? @oli-obk
2019-05-10 22:58:52 +00:00
Mazdak Farrokhzad
5cccda1770 Remove hir::ExprKind::If and replace it with lowering to hir::ExprKind::Match. 2019-05-10 19:41:10 +02:00
David Wood
8838b9130e
Fix uninhabitedness of non-exhaustive enums.
This commit ensures that non-exhaustive enums are considered inhabited
when used in extern crates.
2019-05-10 17:52:12 +01:00
David Wood
0d034a2e4d
Fix inhabitedness of non-exhaustive variants.
This commit ensures that non-exhaustive variants are considered
inhabited when used in extern crates.
2019-05-10 17:52:12 +01:00
Saleem Jaffer
11426a4d50 refactor some FnType stuff to rustc::ty::layout 2019-05-10 13:43:22 +05:30
Mazdak Farrokhzad
45b09453db
Rollup merge of #60676 - davidtwco:issue-60674, r=cramertj
Fix async desugaring providing wrong input to procedural macros.

Fixes #60674.

This PR fixes a minor oversight introduced by #60535 where unused `mut` binding modes were removed from the arguments to an `async fn` (as they were added to the statement that we insert into the closure body). However, this meant that the input to procedural macros was incorrect. This removes that and instead fixes the `unused_mut` error that it avoided.

r? @cramertj
cc @taiki-e
2019-05-09 23:56:18 +02:00
David Wood
dcd3cf7017
Do not modify mutability of simple bindings.
This commit removes the modification of the mutability of simple
bindings. While the mutability isn't used, it is important that it is
kept so that the input to procedural macros matches what the user wrote.
This commit also modifies the span of the binding mode so that it is
considered a compiler desugaring and won't be linted against for being
unused..
2019-05-09 19:10:27 +01:00
Mazdak Farrokhzad
26a7544aa3
Rollup merge of #60647 - petrochenkov:nospace, r=michaelwoerister
cleanup: Remove `DefIndexAddressSpace`

The scheme with two address spaces for `DefIndex` was needed in the past, but apparently not needed anymore (after removing `DefId`s from locals and `HirId`-ification).
2019-05-09 18:34:55 +02:00
John Kåre Alsaker
f3993d0619 Fix typo 2019-05-09 13:56:14 +02:00
Mazdak Farrokhzad
f683b6b799
Rollup merge of #60644 - estebank:abolish-ice, r=varkor
Use `delay_span_bug` for "Failed to unify obligation"

Fix #60283.
2019-05-09 00:58:32 +02:00
Mazdak Farrokhzad
0597292967
Rollup merge of #60641 - estebank:defer-ice, r=oli-obk
Instead of ICEing on incorrect pattern, use delay_span_bug

Fix #60635.
2019-05-09 00:58:31 +02:00
Mazdak Farrokhzad
450ad65bb2
Rollup merge of #60634 - Centril:lang-items-docs, r=oli-obk
Document + Cleanup lang_items.rs

Byproduct of work on https://github.com/rust-lang/rust/issues/60607.

r? @oli-obk
2019-05-09 00:58:29 +02:00
Vadim Petrochenkov
ee6d315200 cleanup: Remove DefIndexAddressSpace 2019-05-09 00:46:38 +03:00
Esteban Küber
0fce5c1bf0 Use delay_span_bug for "Failed to unify obligation" 2019-05-08 11:42:47 -07:00
Esteban Küber
cc40f41ee5 Instead of ICEing on incorrect pattern, use delay_span_bug 2019-05-08 10:23:55 -07:00
Mazdak Farrokhzad
47768b2613 Document + Cleanup lang_items.rs 2019-05-08 15:31:09 +02:00
John Kåre Alsaker
d33db6ed57 Rename HirMap to HirEntryMap and add some comments 2019-05-08 14:27:40 +02:00
John Kåre Alsaker
df5a0111be Optimize HIR map 2019-05-08 12:18:09 +02:00
bors
33cde4aac2 Auto merge of #60586 - cramertj:await, r=oli-obk
Implement built-in await syntax

Adds support for .await under the existing async_await feature gate.
Moves macro-like await! syntax to the await_macro feature gate.
Removes support for `await` as a non-keyword under the `async_await`
feature.

This new syntax is not final, but is the consensus solution proposed by the lang team, as explained in https://boats.gitlab.io/blog/post/await-decision/

Fix https://github.com/rust-lang/rust/issues/51719
Fix https://github.com/rust-lang/rust/issues/51751
Fix https://github.com/rust-lang/rust/issues/60016
2019-05-07 22:33:12 +00:00
Taylor Cramer
fe8760cb84 Implement built-in await syntax
Adds support for .await under the existing async_await feature gate.
Moves macro-like await! syntax to the await_macro feature gate.
Removes support for `await` as a non-keyword under the `async_await`
feature.
2019-05-07 14:45:53 -07:00
Mazdak Farrokhzad
e280818cb0
Rollup merge of #60579 - varkor:typaram-index, r=eddyb
Rename `ParamTy::idx` to `ParamTy::index`

This makes it consistent with `ParamConst` and `EarlyBoundRegion`.
2019-05-07 19:30:07 +02:00
bors
c6ac575648 Auto merge of #60573 - Zoxc:dep-stream-prefix-2, r=michaelwoerister
Only hash dep node indices of deps of anon tasks

Another change split out from https://github.com/rust-lang/rust/pull/60035.

r? @michaelwoerister
2019-05-07 10:48:16 +00:00
Eduard-Mihai Burtescu
1618c079ab rustc: rename -Z emit-directives to -Z emit-artifact-notifications and simplify the output. 2019-05-07 04:49:54 +03:00