Commit graph

1205 commits

Author SHA1 Message Date
Guillaume Gomez
1140ceebcc
Rollup merge of #67823 - euclio:drop-improvements, r=petrochenkov
improve some `Drop`-related error messages
2020-01-04 13:17:29 +01:00
Mazdak Farrokhzad
689e29f0f5
Rollup merge of #67835 - euclio:delimiter-wording, r=Centril
tweak wording of mismatched delimiter errors

This PR improves the wording of the "incorrect delimiter" error messages. Here's a quick rationale:

- *"un-closed" -> "unclosed"*: "unclosed" is valid English, so there's no need to hyphenate the prefix. This should be pretty uncontroversial, I think.
- *"close delimiter" -> "closing delimiter"*: In my anecdotal experience, I've always heard "closing delimiter" or "closing parenthesis". In addition, the codebase already uses this terminology in comments and function names more than "close delimiter", which could indicate that it's more intuitive.
- "incorrect delimiter" -> "mismatched delimiter": "Incorrect delimiter" is vague; why is it incorrect? "mismatched" clearly indicates why the delimiter is causing the error.

r? @estebank
2020-01-04 02:19:54 +01:00
Andy Russell
e9990bc65f
clarify that Drop can be implemented for enums and unions too 2020-01-03 17:57:24 -05:00
Andy Russell
e589358210
improve generic Drop error messages
- Use the span of the predicate
- Use the def's description instead of "struct/enum" (notably incorrect
  for unions)
- Align formatting with other error messages
2020-01-03 17:57:23 -05:00
Andy Russell
7fd014d569
tweak wording of mismatched delimiter errors 2020-01-03 08:40:15 -05:00
Charles Lew
485e98aae2 Implement uncommon_codepoints lint. 2020-01-03 08:20:12 +08:00
Mazdak Farrokhzad
50fb8480db
Rollup merge of #67730 - Centril:typeck-pat-cleanup, r=estebank
Cleanup pattern type checking, fix diagnostics bugs (+ improvements)

r? @estebank
2019-12-31 19:19:36 +01:00
Dylan DPC
cf24b6bcbf
Rollup merge of #67723 - ldm0:E0477, r=Dylan-DPC
Add error code explanation for E0477

Part of #61137
2019-12-31 18:14:06 +05:30
Mazdak Farrokhzad
d7e2f3aee5 refactor and fix this-expression-has-type note 2019-12-30 14:05:17 +01:00
Mazdak Farrokhzad
f35840f77c Pass the span of <init> in let <pat> = <init>;
when type checking `<pat>`.
2019-12-30 13:50:20 +01:00
Mazdak Farrokhzad
ab050d6a83 MatchExpressionArmPattern: Use more generic wording.
The existing wording was inappropriate for e.g.
`if let Ok(_) = expr { .. }`. The diagnostic would
leak the fact that we desugar to a `match`.
2019-12-30 13:50:20 +01:00
Donough Liu
751fe7c43d Add error code explanation for E0477 2019-12-30 14:41:46 +08:00
Yuki Okushi
f70847a863
Rollup merge of #67677 - petrochenkov:dupexp, r=Centril
resolve: Minor cleanup of duplicate macro reexports

Enabled by https://github.com/rust-lang/rust/pull/65785 which changed `duplicate_macro_exports` from a lint to a hard error.
2019-12-30 14:07:52 +09:00
bors
da3629b05f Auto merge of #67112 - Centril:expr-polish, r=estebank
Refactor expression parsing thoroughly

Based on https://github.com/rust-lang/rust/pull/66994 together with which this has refactored basically the entirety of `expr.rs`.

r? @estebank
2019-12-29 19:30:53 +00:00
Esteban Küber
90bf0d2e33 Ignore i586-unknown-linux-gnu and i586-unknown-musl in tests 2019-12-28 12:26:48 -08:00
Vadim Petrochenkov
a0d8b794d6 resolve: Minor cleanup of duplicate macro reexports 2019-12-28 17:37:22 +03:00
Ross MacArthur
749295cfbf
Add regression test for old NLL ICE 2019-12-27 13:36:41 +02:00
Esteban Küber
621d7e959b Fix rebase and sort assoc type list for deterministic output 2019-12-25 11:12:56 -08:00
Esteban Küber
93fb219579 Fix suggestion span for typo in associated type name 2019-12-24 22:25:45 -08:00
Esteban Küber
80adfd8de3 Account for multiple trait bounds with missing associated types 2019-12-24 22:23:02 -08:00
Esteban Küber
83c5b4ec40 Avoid output dependency on std spans 2019-12-24 22:18:05 -08:00
Esteban Küber
8d316a5a67 Use structured suggestion for bad Fn traits 2019-12-24 22:17:29 -08:00
Esteban Küber
547abe0c52 Tweak errors for missing associated types and type parameters 2019-12-24 22:02:43 -08:00
Mazdak Farrokhzad
1ac8fc76d4
Rollup merge of #67337 - oli-obk:no_mut_static_ref_from_const, r=RalfJung
Ensure that evaluating or validating a constant never reads from a static

r? @RalfJung

as per https://github.com/rust-lang/rust/pull/66302#issuecomment-554663387

This does not yet address the fact that evaluation of a constant can read from a static (under unleash-miri)
2019-12-24 04:39:53 +01:00
bors
a4cd03dee2 Auto merge of #66296 - Centril:bindings_after_at-init, r=pnkfelix
Initial implementation of `#![feature(bindings_after_at)]`

Following up on #16053, under the gate `#![feature(bindings_after_at)]`, `x @ Some(y)` is allowed subject to restrictions necessary for soundness.

The implementation and test suite should be fairly complete now.

One aspect that is not covered is the interaction with nested `#![feature(or_patterns)]`.
This is not possible to test at the moment in a good way because that feature has not progressed sufficiently and has fatal errors in MIR building. We should make sure to add such tests before we stabilize both features (but shipping one of them is fine).

r? @pnkfelix
cc @nikomatsakis @matthewjasper @pcwalton
cc https://github.com/rust-lang/rust/issues/65490
2019-12-23 21:49:44 +00:00
Mazdak Farrokhzad
41647613b1
Rollup merge of #67538 - varkor:lhs-assign-diagnostics, r=Centril
Improve diagnostics for invalid assignment

- Improve wording and span information for invalid assignment diagnostics.
- Link to https://github.com/rust-lang/rfcs/issues/372 when it appears the user is trying a destructuring assignment.
- Make the equality constraint in `where` clauses error consistent with the invalid assignment error.
2019-12-23 15:16:29 +01:00
Oliver Scherer
2022fac4df Constants reading or referencing statics is illegal
and some uses of it will be illegal forever
(e.g. mutable or interior mutable statics)
2019-12-23 14:54:30 +01:00
Oliver Scherer
ad6b9c79d6 Dynamically prevent constants from accessing statics 2019-12-23 14:54:22 +01:00
Mazdak Farrokhzad
6a87f99620 check_legality_of_move_bindings: generalize diagnostics & add comments 2019-12-23 14:47:19 +01:00
Mazdak Farrokhzad
44ff4df49d more recovery in if-parsing 2019-12-23 13:42:25 +01:00
varkor
35979a92bf Add span information to ExprKind::Assign 2019-12-23 11:20:13 +00:00
varkor
b7bfdbe681 Improve invalid assignment error 2019-12-23 11:16:51 +00:00
Mark Rousskov
c205f6a06a Remove mem::uninitalized from tests
This purges uses of uninitialized where possible from test cases. Some
are merely moved over to the equally bad pattern of
MaybeUninit::uninit().assume_init() but with an annotation that this is
"the best we can do".
2019-12-22 21:58:12 -05:00
bors
3982d3514e Auto merge of #67505 - Centril:rollup-7win7ty, r=Centril
Rollup of 6 pull requests

Successful merges:

 - #67148 ( Refactor type & bounds parsing thoroughly)
 - #67410 (Reenable static linking of libstdc++ on windows-gnu)
 - #67439 (Cleanup `lower_pattern_unadjusted` & Improve slice pat typeck)
 - #67480 (Require issue = "none" over issue = "0" in unstable attributes)
 - #67500 (Tweak non_shorthand_field_patterns' suggestion)
 - #67504 (Warn against relying on ?Sized being last)

Failed merges:

r? @ghost
2019-12-22 07:01:50 +00:00
Mazdak Farrokhzad
eaeb1138c6
Rollup merge of #67480 - rossmacarthur:fix-41260-avoid-issue-0-part-2, r=Centril
Require issue = "none" over issue = "0" in unstable attributes

These changes make the use of `issue = "none"` required in unstable attributes throughout the compiler.

Notes:
- #66299 is now in beta so `issue = "none"` is accepted.
- The `tidy` tool now fails on `issue = "0"`.
- Tests that used `issue = "0"` were changed to use `issue = "none"`, except for _one_ that asserts `issue = "0"` can still be used.
- The compiler still allows `issue = "0"` because some submodules require it, this could be disallowed once these are updated.

Resolves #41260

r? @varkor
2019-12-22 02:40:04 +01:00
Mazdak Farrokhzad
73e6a2174a add build-fail to 32-bit tests 2019-12-21 22:33:36 +01:00
Mazdak Farrokhzad
b4420c8f5c rework run-fail and support check,build-fail 2019-12-21 22:16:00 +01:00
Mazdak Farrokhzad
db4818f325 span_suggestion_hidden -> tool_only_span_suggestion 2019-12-21 19:20:41 +01:00
Mazdak Farrokhzad
b5f00beaa5 parse_generic_bounds: account for negative lifetime bounds 2019-12-21 19:20:41 +01:00
Ross MacArthur
f7256d28d1
Require issue = "none" over issue = "0" in unstable attributes 2019-12-21 13:16:18 +02: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
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
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
eac5fb8b0a
Rollup merge of #67189 - LeSeulArtichaut:binop-wording, r=estebank
Unify binop wording

Closes #60497
r? @estebank
2019-12-19 10:29:51 +01:00
bors
fc6b5d6efe Auto merge of #67216 - ecstatic-morse:const-loop, r=oli-obk
Enable `loop` and `while` in constants behind a feature flag

This PR is an initial implementation of #52000. It adds a `const_loop` feature gate, which allows `while` and `loop` expressions through both HIR and MIR const-checkers if enabled. `for` expressions remain forbidden by the HIR const-checker, since they desugar to a call to `IntoIterator::into_iter`, which will be rejected anyways.

`while` loops also require [`#![feature(const_if_match)]`](https://github.com/rust-lang/rust/pull/66507), since they have a conditional built into them. The diagnostics from the HIR const checker will suggest this to the user.

r? @oli-obk
cc @rust-lang/wg-const-eval
2019-12-15 01:28:28 +00:00
Ohad Ravid
8a4632dec6 Indicate origin of where type parameter for uninferred types 2019-12-14 11:10:21 +01:00
bors
8843b28e64 Auto merge of #65951 - estebank:type-inference-error, r=nikomatsakis
Point at method call when type annotations are needed

- Point at method call instead of whole expression when type annotations are needed.
- Suggest use of turbofish on function and methods.

Fix #49391, fix #46333, fix #48089. CC #58517, #63502, #63082.

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

r? @nikomatsakis
2019-12-13 22:56:27 +00:00
Mazdak Farrokhzad
df9e491fb2
Rollup merge of #67026 - Nadrieril:improve-usefulness-empty, r=varkor,Centril,estebank
Improve diagnostics and code for exhaustiveness of empty matches

There was a completely separate check and diagnostics for the case of an empty match. This led to slightly different error messages and duplicated code.
This improves code reuse and generally clarifies what happens for empty matches. This also clarifies the action of the `exhaustive_patterns` feature, and ensures that this feature doesn't change diagnostics in places it doesn't need to.
2019-12-13 20:35:28 +01:00
Dylan MacKenzie
caa7c99172 Bless unrelated tests with new help message 2019-12-13 10:39:14 -08:00