Commit Graph

104123 Commits

Author SHA1 Message Date
Mazdak Farrokhzad
9b53c5be06 fix bug in parse_tuple_parens_expr + related refactoring 2019-12-20 22:53:40 +01:00
Mazdak Farrokhzad
66470d3217 recover #[attr] if expr {} 2019-12-20 22:53:40 +01:00
Mazdak Farrokhzad
c9e1f13f6e recover on 'mut', 'var', 'auto' 2019-12-20 22:53:40 +01:00
Mazdak Farrokhzad
a0d20935cc introduce 'type AttrVec' 2019-12-20 22:53:40 +01:00
Mazdak Farrokhzad
3d5dbcb44a simplify parse_bottom_expr more 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
948ff674f9 use mk_expr_err more 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
4311a4d7f9 extract parse_lit_expr and simplify 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
e9a4d94c44 extract parse_break_expr 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
a3c0ef1a8b refactor parse_incorrect_await_syntax 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
2f9b191886 extract parse_{expr_opt, return_expr, yield_expr} 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
327641e35c recover on 'do catch { .. }' 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
32ac9d0e45 pass attr as param in new methods 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
4e01b70964 add recovery to parse_labeled_expr 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
3ed5ba7fa8 extract parse_labeled_expr 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
5f0f86b6ca extract parse_path_start_expr 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
cb985ba60f extract parse_array_or_repeat_expr 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
9cb2b08a5d extract parse_tuple_parens_expr 2019-12-20 22:41:29 +01:00
A C
0c32ee1781 Clean up parse_bottom_expr 2019-12-20 22:41:29 +01:00
A C
0b7908c550 Add a UI test for correct parsing 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
dd15904a4d parse_bottom_expr: use else if 2019-12-20 22:41:29 +01:00
Mazdak Farrokhzad
52acaa6974 implement recovery in check_assoc_op 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
903c9dfd18 extract should_continue_as_assoc_expr 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
be463cbc2b extract: error_block_no_opening_brace 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
cdca5cfbfd parser: extract error_outer_attrs 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
467c86f4cb parse_stmt_without_recovery: readability! 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
74d9c4b312 parse_stmt_mac: add a comment 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
2ddea30178 extract suggest_slice_pat 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
c54c9ef863 parser: early return for item stmt 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
690815b70e inline parse_stmt_ into parse_stmt 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
b75a93afac extract parse_sttmt_mac 2019-12-20 22:41:28 +01:00
Mazdak Farrokhzad
666ff8fd00 reduce repetition in stmt parsing 2019-12-20 22:41:28 +01:00
bors
01a46509a4 Auto merge of #67455 - Centril:rollup-mf0yc81, r=Centril
Rollup of 5 pull requests

Successful merges:

 - #64588 (Add a raw "address of" operator)
 - #67031 (Update tokio crates to latest versions)
 - #67131 (Merge `TraitItem` & `ImplItem into `AssocItem`)
 - #67354 (Fix pointing at arg when cause is outside of call)
 - #67363 (Fix handling of wasm import modules and names)

Failed merges:

r? @ghost
2019-12-20 16:24:12 +00:00
Mazdak Farrokhzad
43d1532cd7
Rollup merge of #67363 - alexcrichton:wasm-import-modules, r=eddyb
Fix handling of wasm import modules and names

The WebAssembly targets of rustc have weird issues around name mangling
and import the same name from different modules. This all largely stems
from the fact that we're using literal symbol names in LLVM IR to
represent what a function is called when it's imported, and we're not
using the wasm-specific `wasm-import-name` attribute. This in turn leads
to two issues:

* If, in the same codegen unit, the same FFI symbol is referenced twice
  then rustc, when translating to LLVM IR, will only reference one
  symbol from the first wasm module referenced.

* There's also a bug in LLD [1] where even if two codegen units
  reference different modules, having the same symbol names means that
  LLD coalesces the symbols and only refers to one wasm module.

Put another way, all our imported wasm symbols from the environment are
keyed off their LLVM IR symbol name, which has lots of collisions today.
This commit fixes the issue by implementing two changes:

1. All wasm symbols with `#[link(wasm_import_module = "...")]` are
   mangled by default in LLVM IR. This means they're all given unique names.

2. Symbols then use the `wasm-import-name` attribute to ensure that the
   WebAssembly file uses the correct import name.

When put together this should ensure we don't trip over the LLD bug [1]
and we also codegen IR correctly always referencing the right symbols
with the right import module/name pairs.

Closes #50021
Closes #56309
Closes #63562

[1]: https://bugs.llvm.org/show_bug.cgi?id=44316
2019-12-20 17:22:22 +01:00
Mazdak Farrokhzad
5a8083c665
Rollup merge of #67354 - VirrageS:blame-wrong-line, r=estebank
Fix pointing at arg when cause is outside of call

Follow up after: #66933

Closes: #66923

r? @estebank
2019-12-20 17:22:21 +01:00
Mazdak Farrokhzad
ec82174fad
Rollup merge of #67131 - Centril:item-merge, r=petrochenkov
Merge `TraitItem` & `ImplItem into `AssocItem`

In this PR we:

- Merge `{Trait,Impl}Item{Kind?}` into `AssocItem{Kind?}` as discussed in https://github.com/rust-lang/rust/issues/65041#issuecomment-538105286.

   - This is done by using the cover grammar of both forms.

   - In particular, it requires that we syntactically allow (under `#[cfg(FALSE)]`):

      - `default`ness on `trait` items,

      - `impl` items without a body / definition (`const`, `type`, and `fn`),

      - and associated `type`s in `impl`s with bounds, e.g., `type Foo: Ord;`.

   - The syntactic restrictions are replaced by semantic ones in `ast_validation`.

- Move syntactic restrictions around C-variadic parameters from the parser into `ast_validation`:

    - `fn`s in all contexts now syntactically allow `...`,

    - `...` can occur anywhere in the list syntactically (`fn foo(..., x: usize) {}`),

    - and `...` can be the sole parameter (`fn foo(...) {}`.

r? @petrochenkov
2019-12-20 17:22:19 +01:00
Mazdak Farrokhzad
ba1a488251
Rollup merge of #67031 - mati865:tokio-update, r=nikomatsakis
Update tokio crates to latest versions

Drops few old crates from the workspace (they are only used during tests, not in Rust itself) and allows to remove even more crates during next `rustc-ap-*` update.
2019-12-20 17:22:17 +01:00
Mazdak Farrokhzad
ef01330887
Rollup merge of #64588 - matthewjasper:mir-address-of, r=oli-obk
Add a raw "address of" operator

* Parse and feature gate `&raw [const | mut] expr` (feature gate name is `raw_address_of`)
* Add `mir::Rvalue::AddressOf`
* Use the new `Rvalue` for:
    * the new syntax
    * reference to pointer casts
    * drop shims for slices and arrays
* Stop using `mir::Rvalue::Cast` with a reference as the operand
* Correctly evaluate `mir::Rvalue::{Ref, AddressOf}` in constant propagation

cc @Centril @RalfJung @oli-obk @eddyb
cc #64490
2019-12-20 17:22:16 +01:00
bors
6b561b4917 Auto merge of #67449 - Centril:rollup-04hvg57, r=Centril
Rollup of 7 pull requests

Successful merges:

 - #66755 (Remove a const-if-hack in RawVec)
 - #67127 (Use structured suggestion for disambiguating method calls)
 - #67219 (Fix up Command Debug output when arg0 is specified.)
 - #67285 (Indicate origin of where type parameter for uninferred types )
 - #67328 (Remove now-redundant range check on u128 -> f32 casts)
 - #67367 (Move command line option definitions into a dedicated file)
 - #67442 (Remove `SOCK_CLOEXEC` dummy variable on platforms that don't use it.)

Failed merges:

r? @ghost
2019-12-20 11:17:47 +00:00
Mazdak Farrokhzad
3a336c48c3
Rollup merge of #67442 - reitermarkus:dummy-variable, r=kennytm
Remove `SOCK_CLOEXEC` dummy variable on platforms that don't use it.
2019-12-20 12:17:27 +01:00
Mazdak Farrokhzad
9f39cb1d8e
Rollup merge of #67367 - 0dvictor:options, r=Centril
Move command line option definitions into a dedicated file

config.rs has reached the 3000 line tidy limit, this commit moves command line option definitions into a new file - options.rs,  and leaves the rest of configuration infrastructure in config.rs.
2019-12-20 12:17:26 +01:00
Mazdak Farrokhzad
efd31c23e8
Rollup merge of #67328 - rkruppe:simplify-u128-f32-cast, r=matthewjasper
Remove now-redundant range check on u128 -> f32 casts

This code was added to avoid UB in LLVM 6 and earlier, but we no longer support those LLVM versions.
Since https://reviews.llvm.org/D47807 (released in LLVM 7), uitofp does exactly what we need.

Closes #51872
2019-12-20 12:17:25 +01:00
Mazdak Farrokhzad
403bb097fc
Rollup merge of #67285 - ohadravid:indicate-origin-of-where-type-parameter, r=estebank
Indicate origin of where type parameter for uninferred types

Based on #65951 (which is not merge yet), fixes #67277.

This PR improves a little the diagnostic for code like:

```
 async fn foo() {
     bar().await;
}

 async fn bar<T>() -> () {}
```

by showing:
```
error[E0698]: type inside `async fn` body must be known in this context
 --> unresolved_type_param.rs:9:5
  |
9 |     bar().await;
  |     ^^^ cannot infer type for type parameter `T` declared on the function `bar`
  |
...
```
(The
```
declared on the function `bar`
```
part is new)

A small side note: `Vec` and `slice` seem to resist this change, because querying `item_name()` panics, and `get_opt_name()` returns `None`.

r? @estebank
2019-12-20 12:17:23 +01:00
Mazdak Farrokhzad
b779cbbe68
Rollup merge of #67219 - jsgf:command-argv0-debug, r=joshtriplett
Fix up Command Debug output when arg0 is specified.

PR https://github.com/rust-lang/rust/pull/66512 added the ability to set argv[0] on
Command. As a side effect, it changed the Debug output to print both the program and
argv[0], which in practice results in stuttery output (`"echo" "echo" "foo"`).

This PR reverts the behaviour to the the old one, so that the command is only printed
once - unless arg0 has been set. In that case it emits `"[command]" "arg0" "arg1" ...`.
2019-12-20 12:17:22 +01:00
Mazdak Farrokhzad
f0eb4b4752
Rollup merge of #67127 - estebank:disambiguate-suggestion, r=varkor
Use structured suggestion for disambiguating method calls

Fix #65635.
2019-12-20 12:17:20 +01:00
Mazdak Farrokhzad
57da9d3269
Rollup merge of #66755 - mark-i-m:const-vec-new, r=ecstatic-morse
Remove a const-if-hack in RawVec

r? @ecstatic-morse

cc @Centril
2019-12-20 12:17:18 +01:00
Victor Ding
83fc600a28 Move command line option definitions into a dedicated file
config.rs has reached the 3000 line tidy limit, this commit moves
command line option definitions into a new file - options.rs,  and
leaves the rest of configuration infrastructure in config.rs.
2019-12-20 18:14:35 +11:00
bors
696735f71b Auto merge of #67443 - Mark-Simulacrum:toolstate-no-commit-newline, r=Mark-Simulacrum
Remove newline from commit in toolstate
2019-12-20 03:33:07 +00:00
Mark Rousskov
1d9a1799e8 Remove newline from commit in toolstate 2019-12-19 22:32:07 -05:00
Markus Reiter
b82671112c Remove SOCK_CLOEXEC dummy variable on platforms that don't use it. 2019-12-20 04:27:28 +01:00
bors
19b3813b5e Auto merge of #67440 - Mark-Simulacrum:rollup-z59a7ky, r=Mark-Simulacrum
Rollup of 6 pull requests

Successful merges:

 - #67253 (Add more delegations to the fmt docs and add doctests)
 - #67281 (add string.insert benchmarks)
 - #67351 (Set release channel on non-dist builders)
 - #67421 (Fix internal documentation typo)
 - #67432 (Fix toolstate history format)
 - #67436 (Correct the todo! stabilization version)

Failed merges:

r? @ghost
2019-12-19 23:02:09 +00:00