Commit Graph

9421 Commits

Author SHA1 Message Date
bors
be055d96c4 Auto merge of #67502 - Mark-Simulacrum:opt-catch, r=Mark-Simulacrum
Optimize catch_unwind to match C++ try/catch

This refactors the implementation of catching unwinds to allow LLVM to inline the "try" closure directly into the happy path, avoiding indirection. This means that the catch_unwind implementation is (after this PR) zero-cost unless a panic is thrown.

https://rust.godbolt.org/z/cZcUSB is an example of the current codegen in a simple case. Notably, the codegen is *exactly the same* if `-Cpanic=abort` is passed, which is clearly not great.

This PR, on the other hand, generates the following assembly:

```asm
# -Cpanic=unwind:
	push   rbx
	mov    ebx,0x2a
	call   QWORD PTR [rip+0x1c53c]        # <happy>
	mov    eax,ebx
	pop    rbx
	ret
	mov    rdi,rax
	call   QWORD PTR [rip+0x1c537]        # cleanup function call
	call   QWORD PTR [rip+0x1c539]        # <unfortunate>
	mov    ebx,0xd
	mov    eax,ebx
	pop    rbx
	ret

# -Cpanic=abort:
	push   rax
	call   QWORD PTR [rip+0x20a1]        # <happy>
	mov    eax,0x2a
	pop    rcx
	ret
```

Fixes #64224, and resolves #64222.
2020-03-13 22:43:06 +00:00
Yuki Okushi
93da9d7fe1 Rollup merge of #69966 - JohnTitor:more-more-tests, r=Centril
Add more regression tests

Closes #58490, closes #60390, closes #62504, closes #67739, closes #69092

r? @Centril
2020-03-14 04:03:34 +09:00
Yuki Okushi
f2af2cff0f Rollup merge of #69960 - RalfJung:abort, r=oli-obk
miri engine: fix treatment of abort intrinsic

I screwed up in https://github.com/rust-lang/rust/pull/69830 and added `abort` to the wrong block of intrinsics, namely the one that actually has a return place. So that branch was never actually reached.

r? @oli-obk
2020-03-14 04:03:33 +09:00
Yuki Okushi
913a933202 Rollup merge of #69460 - LeSeulArtichaut:move-compile-pass, r=RalfJung
Move some `build-pass` tests to `check-pass`

Helps with #62277.

r? @cramertj cc @Centril
2020-03-14 04:03:22 +09:00
Ralf Jung
13ea774513 bless tests 2020-03-13 08:52:04 +01:00
Yuki Okushi
7c987eb020 Add test for issue-69092 2020-03-13 16:06:09 +09:00
Yuki Okushi
3609bac340 Add test for issue-67739 2020-03-13 16:06:08 +09:00
Yuki Okushi
a2c41e9cdc Add test for issue-62504 2020-03-13 16:06:08 +09:00
Yuki Okushi
0efc2cf547 Add test for issue-60390 2020-03-13 16:06:08 +09:00
Yuki Okushi
081e32baba Add test for issue-58490 2020-03-13 16:06:07 +09:00
Mark Mansi
b6518f0f66 update tests 2020-03-12 15:47:36 -05:00
LeSeulArtichaut
8f0fa24d7b Move some more tests to check-pass 2020-03-12 17:22:44 +01:00
LeSeulArtichaut
7326e530f2 Move some const-eval build-pass tests to check-pass 2020-03-12 16:58:34 +01:00
Mazdak Farrokhzad
4f7fc5ad67 Rollup merge of #69722 - estebank:negative-impl-span-ast, r=Centril
Tweak output for invalid negative impl AST errors

Use more accurate spans for negative `impl` errors.

r? @Centril
2020-03-12 16:32:17 +01:00
Oliver Scherer
6e73a14234 Remove fn special casing in const printing 2020-03-12 13:35:44 +01:00
Aaron Hill
ff65bffe2b Fix cycle error when emitting suggestion for mismatched fn type
Fixes #66667

Previously, we called `tcx.typeck_tables_of` when determining whether or
not to emit a suggestion for a type error. However, we might already be
type-checking the `DefId` we pass to `typeck_tables_of` (it could be
anywhere in the query stack).

Fortunately, we only need the function signature, not the entire
`TypeckTables`. By using `tcx.fn_sig`, we avoid the possibility of cycle
errors while retaining the ability to emit a suggestion.
2020-03-11 15:35:46 -04:00
Vadim Petrochenkov
f4083c6455 Add the "consider importing it directly" label to public imports as well 2020-03-11 21:49:32 +03:00
Ralf Jung
93436d8fd7 make error message less confusing 2020-03-11 19:44:23 +01:00
Ralf Jung
2764d3d3e4 start Miri messages lower-case 2020-03-11 19:44:23 +01:00
Ralf Jung
9a95b010e6 generalize InvalidNullPointerUsage to InvalidIntPointerUsage 2020-03-11 19:44:23 +01:00
Ralf Jung
d02543a453 fmt, tweak messages and bless 2020-03-11 19:44:23 +01:00
Ralf Jung
c7eb0f2a40 fix expand-to-unstable test 2020-03-11 19:41:41 +01:00
Vadim Petrochenkov
580c6a29d4 resolve: Print import chains on privacy errors 2020-03-11 21:17:32 +03:00
Ralf Jung
d49306da13 implement zeroed and uninitialized with MaybeUninit 2020-03-11 14:23:13 +01:00
Mazdak Farrokhzad
e838383ff8 Rollup merge of #69876 - ayushmishra2005:doc/61137-add-long-error-code-e0739, r=Dylan-DPC
Add long error explanation for E0739

Add long explanation for the E0739 error code
Part of #61137

r? @GuillaumeGomez
2020-03-11 14:03:51 +01:00
Mazdak Farrokhzad
9674c09ae9 Rollup merge of #69760 - Centril:parse-expr-improve, r=estebank
Improve expression & attribute parsing

This PR includes misc improvements to expression and attribute parsing.

1. Some code simplifications
2. Better recovery for various block forms, e.g. `loop statements }` (missing `{` after `loop`). (See e.g., `block-no-opening-brace.rs` among others for examples.)
3. Added recovery for e.g., `unsafe $b` where `$b` refers to a `block` macro fragment. (See `bad-interpolated-block.rs` for examples.)
4. ^--- These are done so that code sharing in block parsing is increased.
5. Added recovery for e.g., `'label: loop { ... }` (See `labeled-no-colon-expr.rs`.)
6. Added recovery for e.g., `&'lifetime expr` (See `regions-out-of-scope-slice.rs`.)
7. Added recovery for e.g., `fn foo() = expr;` (See `fn-body-eq-expr-semi.rs`.)
8. Simplified attribute parsing code & slightly improved diagnostics.
9. Added recovery for e.g., `Box<('a) + Trait>`.
10. Added recovery for e.g, `if true #[attr] {} else #[attr] {} else #[attr] if true {}`.

r? @estebank
2020-03-11 14:03:45 +01:00
Mazdak Farrokhzad
6a8683fcd0 Rollup merge of #69896 - petrochenkov:reqname2, r=Centril
parse: Tweak the function parameter edition check

Follow-up to https://github.com/rust-lang/rust/pull/69801.

Edition of a code fragment is inferred from "the place where the code is written".
For individual tokens like edition-specific keywords it may be the span of the token itself ("uninterpolated" span), but for larger code fragments it's probably not, in the test example the trait method is obviously written in "2015 edition code".

r? @Centril
2020-03-11 10:36:33 +01:00
Mazdak Farrokhzad
a05bab5925 Rollup merge of #69891 - Centril:fix-69875, r=varkor
Exhaustiveness checking, `Matrix::push`: recursively expand or-patterns

> There's an implicit invariant that there should be no or-patterns directly in the first column of the matrix, but this invariant is broken exactly when an or-pattern has a child that is itself an or-pattern.

Here we preserve this broken invariant by recursively expanding `PatKind::Or`s in `Matrix::push`.
Fixes https://github.com/rust-lang/rust/issues/69875.

r? @varkor
cc @Nadrieril
cc https://github.com/rust-lang/rust/issues/54883
2020-03-11 10:36:31 +01:00
Mazdak Farrokhzad
62e3daee3f Rollup merge of #69859 - contrun:fix-62456, r=matthewjasper
fix #62456

closes https://github.com/rust-lang/rust/issues/62456
2020-03-11 10:36:29 +01:00
Mazdak Farrokhzad
dfbbd5d6ea Rollup merge of #69825 - lcnr:discriminant, r=oli-obk
make `mem::discriminant` const

implements #69821, which could be used as a tracking issue for `const_discriminant`.

Should this be added to the meta tracking issue #57563?
@Lokathor
2020-03-11 10:36:28 +01:00
Mazdak Farrokhzad
d7f0b88ade Rollup merge of #69591 - matthewjasper:query-response-relate, r=nikomatsakis
Use TypeRelating for instantiating query responses

`eq` can add constraints to `RegionConstraintData`, which isn't allowed during borrow checking outside of a `CustomTypeOp`. Use `TypeRelating` instead to always push constraints to the obligations list.

closes #69490
2020-03-11 10:36:19 +01:00
Mazdak Farrokhzad
43079147f4 Rollup merge of #69373 - tspiteri:const_int_conversion, r=oli-obk
Stabilize const for integer {to,from}_{be,le,ne}_bytes methods

All of these functions can be implemented simply and naturally as const functions, e.g. `u32::from_le_bytes` can be implemented as
```rust
(bytes[0] as u32)
    | (bytes[1] as u32) << 8
    | (bytes[2] as u32) << 16
    | (bytes[3] as u32) << 24
```
So stabilizing the constness will not expose that internally they are implemented using transmute which is not const in stable.
2020-03-11 10:36:18 +01:00
Mazdak Farrokhzad
a7c2eef2ae Rollup merge of #66059 - RalfJung:panic-on-non-zero, r=eddyb
mem::zeroed/uninit: panic on types that do not permit zero-initialization

r? @eddyb @oli-obk

Cc https://github.com/rust-lang/rust/issues/62825

Also see [this summary comment](https://github.com/rust-lang/rust/pull/66059#issuecomment-586734747)
2020-03-11 10:36:16 +01:00
Oliver Scherer
cc9ca640c2 Don't print literal type suffixes if print_ty is false 2020-03-11 09:10:49 +01:00
Oliver Scherer
fff2e0f806 Print function pointer type for function pointer const generics 2020-03-11 09:10:49 +01:00
Oliver Scherer
b837e71732 Reduce special casing in the const pretty printer 2020-03-11 09:10:49 +01:00
Oliver Scherer
e22ddfd80d Don't print leading zeros on hex dumps constants 2020-03-11 09:10:49 +01:00
Oliver Scherer
02dbb35b2b Deduplicate and clean up pretty printing logic 2020-03-11 09:10:48 +01:00
Esteban Küber
29be741c9c review comments 2020-03-10 17:59:32 -07:00
Joshua Nelson
ba46b61bbc bless UI tests 2020-03-10 23:44:46 +00:00
Joshua Nelson
e3d5eaf2bb add ui-tests 2020-03-10 23:44:46 +00:00
Vadim Petrochenkov
6b27e8d2a6 parse: Tweak the function parameter edition check
Move anon-params tests to ui/anon-params.
2020-03-10 22:35:01 +03:00
bors
1581278534 Auto merge of #66364 - Centril:cleanup-macro-def, r=petrochenkov,eddyb
Cleanup `rmeta::MacroDef`

Avoid using rountrip parsing in the encoder and in `fn load_macro_untracked`.

The main reason I was interested in this was to remove `rustc_parse` as a dependency of `rustc_metadata` but it seems like this had other benefits as well.

Fixes #49511.

r? @eddyb
cc @matthewjasper @estebank @petrochenkov
2020-03-10 17:12:48 +00:00
Mazdak Farrokhzad
4d16c217b8 Matrix::push: recursively expand or-patterns 2020-03-10 17:46:19 +01:00
Bastian Kauschke
7b3e3ff39a explain the use of a custom identity function 2020-03-10 12:46:22 +01:00
Mazdak Farrokhzad
458383dd33 parse_if_expr: recover on attributes 2020-03-10 08:55:18 +01:00
Mazdak Farrokhzad
ba3ae46de9 trait-object-lifetime-parens: improve recovery. 2020-03-10 08:35:23 +01:00
Mazdak Farrokhzad
d1822b3dcf use check_path more 2020-03-10 08:35:23 +01:00
Mazdak Farrokhzad
c0b073bc62 simplify & improve parse_ty_tuple_or_parens 2020-03-10 08:35:23 +01:00
Mazdak Farrokhzad
25cd01b863 issue 68890: add more minimal repro 2020-03-10 08:35:23 +01:00