Commit graph

25989 commits

Author SHA1 Message Date
Josh Stone
367b793790 Force #[unwind(aborts)] in test/codegen/c-variadic.rs 2019-08-25 09:47:50 -07:00
Josh Stone
d810e77f4e Revert "Allow a dirty MirBuilt for make_extern and make_method_extern"
This reverts commit b4a6f59793.
2019-08-25 09:47:50 -07:00
Mark Rousskov
39412ca969 Permit unwinding through FFI by default
See #58794 for context.
2019-08-25 09:47:50 -07:00
Mazdak Farrokhzad
4d3d06ae53
Rollup merge of #63859 - matthewjasper:check-snippet-result, r=Centril
Don't unwrap the result of `span_to_snippet`

Closes #63800
2019-08-25 02:45:05 +02:00
Mazdak Farrokhzad
3d4b1135f8
Rollup merge of #63833 - estebank:suggest-closure-call, r=petrochenkov
Suggest calling closure with resolved return type when appropriate

Follow up to #63337. CC #63100.

```
error[E0308]: mismatched types
  --> $DIR/fn-or-tuple-struct-without-args.rs:46:20
   |
LL |     let closure = || 42;
   |                   -- closure defined here
LL |     let _: usize = closure;
   |                    ^^^^^^^
   |                    |
   |                    expected usize, found closure
   |                    help: use parentheses to call this closure: `closure()`
   |
   = note: expected type `usize`
              found type `[closure@$DIR/fn-or-tuple-struct-without-args.rs:45:19: 45:24]`
```
2019-08-25 02:45:01 +02:00
Mazdak Farrokhzad
ed8e13c2cb
Rollup merge of #63813 - estebank:int-from, r=varkor
Do not suggest `.try_into()` on `i32::from(x)`

Fix #63697.
2019-08-25 02:44:59 +02:00
Matthew Jasper
365ff62fca Don't unwrap the result of span_to_snippet
It can return `Err` due to macros being expanded across crates or
files.
2019-08-24 18:25:34 +01:00
Esteban Küber
73e3508bb8 Suggest calling closure with resolved return type when appropriate 2019-08-23 11:59:04 -07:00
Mazdak Farrokhzad
3e061f7c49 --bless some tests due to message format change. 2019-08-23 01:42:05 +02:00
Esteban Küber
1acb53753b Do not suggest .try_into() on i32::from(x) 2019-08-22 13:37:35 -07:00
Mazdak Farrokhzad
aa9490bd7b
Rollup merge of #63796 - estebank:opaque_future, r=Centril
Tweak E0308 on opaque types

```
error[E0308]: if and else have incompatible types
  --> file.rs:21:9
   |
18 | /     if true {
19 | |         thing_one()
   | |         ----------- expected because of this
20 | |     } else {
21 | |         thing_two()
   | |         ^^^^^^^^^^^ expected opaque type, found a different opaque type
22 | |     }.await
   | |_____- if and else have incompatible types
   |
   = note: expected type `impl std::future::Future` (opaque type)
              found type `impl std::future::Future` (opaque type)
   = note: distinct uses of `impl Trait` result in different opaque types
   = help: if both futures resolve to the same type, consider `await`ing on both of them
```

r? @Centril
CC #63167
2019-08-22 15:15:43 +02:00
Mazdak Farrokhzad
30fd79cb6c
Rollup merge of #63767 - lzutao:integer-ord-suboptimal, r=nagisa
Use more optimal Ord implementation for integers

Closes #63758
r? @nagisa

### Compare results

([godbolt link](https://godbolt.org/z/dsbczy))

Old assembly:
```asm
example::cmp1:
  mov eax, dword ptr [rdi]
  mov ecx, dword ptr [rsi]
  cmp eax, ecx
  setae dl
  add dl, dl
  add dl, -1
  xor esi, esi
  cmp eax, ecx
  movzx eax, dl
  cmove eax, esi
  ret
```

New assembly:
```asm
example::cmp2:
  mov eax, dword ptr [rdi]
  xor ecx, ecx
  cmp eax, dword ptr [rsi]
  seta cl
  mov eax, 255
  cmovae eax, ecx
  ret
```

Old llvm-mca statistics:
```
Iterations:        100
Instructions:      1100
Total Cycles:      243
Total uOps:        1300

Dispatch Width:    6
uOps Per Cycle:    5.35
IPC:               4.53
Block RThroughput: 2.2
```

New llvm-mca statistics:
```
Iterations:        100
Instructions:      700
Total Cycles:      217
Total uOps:        1100

Dispatch Width:    6
uOps Per Cycle:    5.07
IPC:               3.23
Block RThroughput: 1.8
```
2019-08-22 15:15:38 +02:00
Mazdak Farrokhzad
0784395912
Rollup merge of #63737 - HowJMay:fix_naming, r=jonas-schievink
Fix naming misspelling

Fixes #63734
2019-08-22 15:15:36 +02:00
Mazdak Farrokhzad
8a26ba77ef
Rollup merge of #63624 - estebank:unreachable-macro, r=petrochenkov
When declaring a declarative macro in an item it's only accessible inside it

Fix #63164.
r? @petrochenkov
2019-08-22 15:15:35 +02:00
YangHau
4f613ffeb0 Fix naming misspelling 2019-08-22 15:03:19 +08:00
bors
201e52e5fe Auto merge of #63175 - jsgf:argsfile, r=jsgf
rustc: implement argsfiles for command line

Many tools, such as gcc and gnu-ld, support "args files" - that is, being able to specify @file on the command line.  This causes `file` to be opened and parsed for command line options. They're separated with whitespace; whitespace can be quoted with double or single quotes, and everything can be \\-escaped. Args files may recursively include other args files via `@file2`.

See https://sourceware.org/binutils/docs/ld/Options.html#Options for the documentation of gnu-ld's @file parameters.

This is useful for very large command lines, or when command lines are being generated into files by other tooling.
2019-08-22 06:14:49 +00:00
Esteban Küber
a710c610b2 review comments: reword and add test 2019-08-21 16:49:26 -07:00
Esteban Küber
4971667f17 review comments 2019-08-21 16:11:01 -07:00
Esteban Küber
8c07d7814d When declaring a declarative macro in an item it's only accessible inside it 2019-08-21 15:41:51 -07:00
Lzu Tao
f5b16f6212 Add codegen test for integers compare 2019-08-21 15:50:43 +00:00
Mazdak Farrokhzad
3a1eb34c2e
Rollup merge of #63780 - u32i64:issue-63712, r=estebank
Improve diagnostics: break/continue in wrong context

- Fix #63712
- Use `` `break` `` or `` `continue` `` instead of always `break` in `cannot _...`
- Show the enclosing closure or async block we're talking about
- `` `break` outside of loop `` -> `` `break` outside of a loop `` for consistency

r? @estebank
2019-08-21 17:31:43 +02:00
Mazdak Farrokhzad
70436969e0
Rollup merge of #63717 - petrochenkov:eager, r=matthewjasper
Fix nested eager expansions in arguments of `format_args`

Fixes https://github.com/rust-lang/rust/issues/63460
Fixes https://github.com/rust-lang/rust/issues/63685 (regression from making `format_args` opaque - https://github.com/rust-lang/rust/pull/63114)

r? @matthewjasper
2019-08-21 17:31:39 +02:00
Artem Varaksa
600a64bdb5 more --blessing + test error annotations fixes 2019-08-21 15:13:13 +03:00
Artem Varaksa
a8d7ea74a4 improve diagnostics: break/continue wrong context 2019-08-21 13:17:59 +03:00
Vadim Petrochenkov
fe2dc91972 Add a regression test for issue #63460 2019-08-21 12:53:11 +03:00
Mazdak Farrokhzad
67e39ed51c
Rollup merge of #63759 - Centril:parse-default-async-fn, r=petrochenkov
Allow 'default async fn' to parse.

- Parse default async fn. Fixes #63716.

(`cherry-pick`ed from 3rd commit in https://github.com/rust-lang/rust/pull/63749.)

r? @petrochenkov
2019-08-21 11:52:25 +02:00
Vadim Petrochenkov
a83c35692f expand: Do not do questionable span adjustment before eagerly expanding an expression
Maybe it made sense when it was introduced, but now it's doing something incorrect.
2019-08-21 11:53:39 +03:00
Vadim Petrochenkov
96032aa5ef expand: Keep the correct current expansion ID for eager expansions
Solve the problem of `ParentScope` entries for eager expansions not exising in the resolver map by creating them on demand.
2019-08-21 11:53:39 +03:00
Vadim Petrochenkov
1dd56aa304 Add a test for an opaque macro eagerly expanding its arguments 2019-08-21 11:53:39 +03:00
Mazdak Farrokhzad
7ee4f1da8c Allow 'default async fn' to parse. 2019-08-20 22:57:23 +02:00
Jeremy Fitzhardinge
d9497749a8 Move argfile expansion into run_compiler
This will make @path work with miri and other non-standard entrypoints.

Also since this simplifies librustc_driver::args, move it into a simple source file. Also
remove the tests since they're doing nothing more than checking `str::lines` has the right
behaviour.
2019-08-20 12:34:14 -07:00
Mazdak Farrokhzad
234614a705
Rollup merge of #63746 - sd234678:remove-unneeded-comment-decoration-from-src/test, r=Centril
Cherry-pick src/test changes with Centril's changes

None
2019-08-20 19:42:20 +02:00
Mazdak Farrokhzad
3f7e7c2fd3
Rollup merge of #63209 - Centril:stabilize-async-await, r=cramertj
Stabilize `async_await` in Rust 1.39.0

Here we stabilize:
- free and inherent `async fn`s,
- the `<expr>.await` expression form,
- and the `async move? { ... }` block form.

Closes https://github.com/rust-lang/rust/issues/62149.
Closes https://github.com/rust-lang/rust/issues/50547.

All the blockers are now closed.

<details>
- [x] FCP in https://github.com/rust-lang/rust/issues/62149
- [x] https://github.com/rust-lang/rust/issues/61949; PR in https://github.com/rust-lang/rust/pull/62849.
- [x] https://github.com/rust-lang/rust/issues/62517; PR in https://github.com/rust-lang/rust/pull/63376.
- [x] https://github.com/rust-lang/rust/issues/63225; PR in https://github.com/rust-lang/rust/pull/63501
- [x] https://github.com/rust-lang/rust/issues/63388; PR in https://github.com/rust-lang/rust/pull/63499
- [x] https://github.com/rust-lang/rust/issues/63500; PR in https://github.com/rust-lang/rust/pull/63501
- [x] https://github.com/rust-lang/rust/issues/62121#issuecomment-506884048
    - [x] Some tests for control flow (PR https://github.com/rust-lang/rust/pull/63387):
          - `?`
          - `return` in `async` blocks
          - `break`
    - [x] https://github.com/rust-lang/rust/pull/61775#issuecomment-506883180, i.e. tests for https://github.com/rust-lang/rust/pull/60944 with `async fn`s instead). PR in https://github.com/rust-lang/rust/pull/63383

</details>

r? @cramertj
2019-08-20 19:42:18 +02:00
bors
7858dc237d Auto merge of #63497 - eddyb:miri-subst, r=oli-obk
rustc_mir: fix miri substitution/"universe" discipline.

Alternative to #61041, based on @RalfJung's own attempt at it.
I haven't done a full audit, but I believe everything is fixed now.

Fixes #61432.
Closes #61336, as a drive-by fix (for a subset of #43408, that is already special-cased).

r? @oli-obk / @RalfJung cc @varkor @yodaldevoid
2019-08-20 04:14:51 +00:00
Jeremy Fitzhardinge
d2219c2e2e rustc: implement argsfiles for command line
This makes `rustc` support `@path` arguments on the command line. The `path` is opened and the file is interpreted
as new command line options which are logically inserted at that point in the command-line. The options in the file
are one per line. The file is UTF-8 encoded, and may have either Unix or Windows line endings.
It does not support recursive use of `@path`.

This is useful for very large command lines, or when command-lines are being generated into files by other tooling.
2019-08-19 19:06:46 -07:00
Mazdak Farrokhzad
21476e7d6c --bless post no async_await gates in tests. 2019-08-20 03:08:42 +02:00
Mazdak Farrokhzad
228015acd2 Remove async_await gates from tests. 2019-08-20 03:08:42 +02:00
Mazdak Farrokhzad
6a14411b76 Remove async_await feature gate tests. 2019-08-20 02:38:02 +02:00
bors
d8d99baf56 Auto merge of #62727 - SimonSapin:plugins-tls-dylib, r=petrochenkov
Deprecate using rustc_plugin without the rustc_driver dylib.

CC https://github.com/rust-lang/rust/pull/59800, 7198687bb2

Fix https://github.com/rust-lang/rust/issues/62717
2019-08-20 00:31:13 +00:00
Simon Sapin
d0bbc6062d Deprecate using rustc_plugin without the rustc_driver dylib.
CC https://github.com/rust-lang/rust/pull/59800
7198687bb2

Fix https://github.com/rust-lang/rust/issues/62717
2019-08-20 00:21:32 +02:00
sd234678
4eec03d33e Cherry-pick src/test changes with Centril's changes 2019-08-19 22:31:46 +01:00
Mazdak Farrokhzad
2c0f05a04f
Rollup merge of #63699 - gilescope:async-move-diagnostic, r=estebank
Fix suggestion from incorrect `move async` to `async move`.

PR for #61920. Happy with the test. There must be a better implementation though - possibly a MIR visitor to estabilsh a span that doesn't include the `async` keyword?
2019-08-19 22:48:57 +02:00
Mazdak Farrokhzad
a2080a60ac
Rollup merge of #63620 - estebank:assoc-type-span, r=Centril
Use constraint span when lowering associated types

Fix #63594.

r? @Centril
2019-08-19 22:48:55 +02:00
Esteban Küber
1808e4da68 review comments 2019-08-19 12:24:06 -07:00
Esteban Küber
94ee54c425 Use constraint span when lowering associated types 2019-08-19 11:50:34 -07:00
Niko Matsakis
7ee1af51cc adjust test to be check-pass 2019-08-19 13:53:06 -04:00
Niko Matsakis
832199ee76 use static as object-lifetime default for type XX in Foo<Item=XX>
Currently the default is "inherited" from context, so e.g.  `&impl
Foo<Item = dyn Bar>` would default to `&'x impl Foo<Item = dyn Bar +
'x>`, but this triggers an ICE and is not very consistent.

This patch doesn't implement what I expect would be the correct
semantics, because those are likely too complex. Instead, it handles
what I'd expect to be the common case -- where the trait has no
lifetime parameters.
2019-08-19 13:50:44 -04:00
Niko Matsakis
af86fb1959 distinguish object-lifetime-default elision from other elision
Object-lifetime-default elision is distinct from other forms of
elision; it always refers to some enclosing lifetime *present in the
surrounding type* (e.g., `&dyn Bar` expands to `&'a (dyn Bar + 'a)`.
If there is no enclosing lifetime, then it expands to `'static`.

Therefore, in an `impl Trait<Item = dyn Bar>` setting, we don't expand
to create a lifetime parameter for the `dyn Bar + 'X` bound.  It will
just be resolved to `'static`.

Annoyingly, the responsibility for this resolution is spread across
multiple bits of code right now (`middle::resolve_lifetimes`,
`lowering`). The lowering code knows that the default is for an object
lifetime, but it doesn't know what the correct result would be.
Probably this should be fixed, but what we do now is a surgical fix:
we have it generate a different result for elided lifetimes in a
object context, and then we can ignore those results when figuring out
the lifetimes that are captured in the opaque type.
2019-08-19 13:50:42 -04:00
Eduard-Mihai Burtescu
96fc98904f test: add test for #61432. 2019-08-19 19:33:49 +03:00
Giles Cope
ef3e66d69f Fix suggestion from move async to async move. 2019-08-19 17:14:38 +01:00