Commit graph

1662 commits

Author SHA1 Message Date
Jakub Adam Wieczorek
f5e5eb6f46 Fix an ICE on an invalid binding @ ... in a tuple struct pattern 2020-07-20 15:48:40 +00:00
Manish Goregaokar
41d956bf63
Rollup merge of #73269 - mzohreva:mz/sgx-wait-timeout, r=jethrogb
Enable some timeouts in SGX platform

This would partially resolve https://github.com/fortanix/rust-sgx/issues/31

cc @jethrogb and @Goirad
2020-07-16 17:08:56 -07:00
Esteban Küber
ce3bd29c68 Handle case of incomplete local ty more gracefully
When encountering a local binding with a type that isn't completed, the
parser will reach a `=` token. When this happen, consider the type
"complete" as far as the parser is concerned to avoid further errors
being emitted by parse recovery logic.
2020-07-14 18:30:44 -07:00
Manish Goregaokar
c4fcf5a7a4
Rollup merge of #74336 - davidtwco:issue-73112-cross-crate-packed-type-diagnostic, r=estebank
typeck: use `item_name` in cross-crate packed diag

Fixes #73112.

This PR replaces the use of `expect_local` and `hir().get` to fetch the identifier for a ADT with `item_name` - which works across crates.
2020-07-14 13:19:37 -07:00
Manish Goregaokar
a364c0a782
Rollup merge of #74228 - estebank:unsized-param, r=davidtwco
Provide structured suggestion on unsized fields and fn params

* Suggest borrowing or boxing unsized fields
* Suggest borrowing fn parameters
* Remove some verbosity of unsized errors
* Remove `on_unimplemented` note from `trait Sized`

Fix #23286, fix #28653.

r? @davidtwco
2020-07-14 13:19:24 -07:00
Manish Goregaokar
be5c7abfd6
Rollup merge of #74211 - estebank:struct-pat-as-unit, r=petrochenkov
Structured suggestion when not using struct pattern

r? @petrochenkov
2020-07-14 13:19:22 -07:00
Esteban Küber
ff75395ca8 Reword message 2020-07-14 12:19:50 -07:00
Esteban Küber
c38b127d84 Remove redundant explanatory note for type parameters 2020-07-14 12:19:44 -07:00
Esteban Küber
d989796b47 Suggest borrowing in more unsized fn param cases 2020-07-14 10:50:24 -07:00
Esteban Küber
b7db6bb5af Remove Sized on_unimplemented note 2020-07-14 10:50:24 -07:00
Esteban Küber
28e6f1f5b9 Suggest boxing or borrowing unsized fields 2020-07-14 10:50:24 -07:00
Esteban Küber
c88409de13 Suggest borrowing unsized argument types 2020-07-14 10:50:24 -07:00
Esteban Küber
04298204ed Suggest struct pat on incorrect unit or tuple pat
When encountering a unit or tuple pattern for a struct-like item, suggest
using the correct pattern.

Use `insert_field_names_local` when evaluating variants and store field
names even when the list is empty in order to produce accurate
structured suggestions.
2020-07-14 10:41:44 -07:00
David Wood
d9485be595
typeck: use item_name in cross-crate packed diag
This commit replaces the use of `expect_local` and `hir().get` to fetch
the identifier for a ADT with `item_name` - which works across crates.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-14 16:28:11 +01:00
Manish Goregaokar
1114f2231a
Rollup merge of #74270 - davidtwco:issue-74086-more-placeholder-type-error, r=estebank
typeck: report placeholder type error w/out span

Fixes #74086.

This PR fixes a regression introduced in rust-lang/rust#70369 which meant that an error was not being emitted for invalid placeholder types when there wasn't a span available.

r? @estebank
2020-07-14 07:39:11 -07:00
Manish Goregaokar
6a4faa2da1
Rollup merge of #73965 - davidtwco:issue-73886-non-primitive-slice-cast, r=estebank
typeck: check for infer before type impls trait

Fixes #73886.

This PR checks that the target type of the cast (an error related to which is being reported) does not have types to be inferred before checking if it implements the `From` trait.

r? @estebank
2020-07-14 07:38:58 -07:00
David Wood
5afbc5201c
typeck: report placeholder type error w/out span
This commit fixes a regression introduced in rust-lang/rust#70369 which
meant that an error was not being emitted for invalid placeholder types
when there wasn't a span available.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-12 16:40:22 +01:00
Manish Goregaokar
aa04ffb61a
Rollup merge of #74240 - da-x:fix-74081, r=Manishearth
Fix #74081 and add the test case from #74236
2020-07-11 08:53:27 -07:00
Dan Aloni
f5de23b5c1 Add the test case mentioned in #74236 2020-07-11 14:53:04 +03:00
Manish Goregaokar
8efa197ee4
Rollup merge of #74109 - nbdd0121:issue-74082, r=petrochenkov
Only allow `repr(i128/u128)` on enum

Fixes #74082
2020-07-10 23:26:41 -07:00
Tamir Duberstein
1e567c1168
Avoid "blacklist"
Other terms are more inclusive and precise.

Clippy still has a lint named "blacklisted-name", but renaming it would
be a breaking change, so is left for future work.

The target configuration option "abi-blacklist" has been depreciated and
renamed to "unsupported-abis". The old name continues to work.
2020-07-08 12:08:27 -04:00
Manish Goregaokar
e74ab50d07
Rollup merge of #73953 - JohnTitor:audit-hidden-sugg, r=estebank
Audit hidden/short code suggestions

Should fix #73641.
Audit uses of `span_suggestion_short` and `tool_only_span_suggestion` (`span_suggestion_hidden` is already tested with `run-rustfix`). Leave some FIXMEs for futher improvements/fixes.
r? @estebank
2020-07-06 17:45:22 -07:00
Gary Guo
97867bbe5c Add UI test for issue 74082 2020-07-06 21:04:54 +01:00
Manish Goregaokar
3e78eac206
Rollup merge of #73871 - da-x:private-types-2018-no-extern, r=petrochenkov
Fix try_print_visible_def_path for Rust 2018

The recursive check of `try_print_visible_def_path` did not properly handle the Rust 2018 case of crate-paths without 'extern crate'. Instead, it returned a "not found" via (false, self).

 This fixes #56175.
2020-07-05 16:07:25 -07:00
David Wood
bddb266089
typeck: check for infer before type impls trait
This commit checks that the target type of the cast (an error related
to which is being reported) does not have types to be inferred before
checking if it implements the `From` trait.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-02 16:24:09 +01:00
David Wood
cb541dc12c
resolve: disallow label use through closure/async
This commit modifies resolve to disallow `break`/`continue` to labels
through closures or async blocks. This doesn't make sense and should
have been prohibited anyway.

Signed-off-by: David Wood <david@davidtw.co>
2020-07-02 13:48:32 +01:00
Yuki Okushi
ec31b4e3a8
Audit uses of span_suggestion_short 2020-07-02 15:18:33 +09:00
Dan Aloni
5427d3bf7c Fix try_print_visible_def_path for Rust 2018
The recursive check of `try_print_visible_def_path` did not properly handle
the Rust 2018 case of crate-paths without 'extern crate'. Instead, it returned
a "not found" via (false, self).

This fixes issue #56175.
2020-06-29 23:40:27 +03:00
Dan Aloni
aab37fe52c Add test for issue #56175 2020-06-29 23:32:31 +03:00
bors
c977b8775d Auto merge of #72437 - ecstatic-morse:stabilize-const-if-match, r=oli-obk
Stabilize `#![feature(const_if_match)]`

Quoting from the [stabilization report](https://github.com/rust-lang/rust/issues/49146#issuecomment-616301045):

> `if` and `match` expressions as well as the short-circuiting logic operators `&&` and `||` will become legal in all [const contexts](https://doc.rust-lang.org/reference/const_eval.html#const-context). A const context is any of the following:
>
> - The initializer of a `const`, `static`, `static mut` or enum discriminant.
> - The body of a `const fn`.
> - The value of a const generic (nightly only).
> - The length of an array type (`[u8; 3]`) or an array repeat expression (`[0u8; 3]`).
>
> Furthermore, the short-circuiting logic operators will no longer be lowered to their bitwise equivalents (`&` and `|` respectively) in `const` and `static` initializers (see #57175). As a result, `let` bindings can be used alongside short-circuiting logic in those initializers.

Resolves #49146.

Ideally, we would resolve 🐳 #66753 before this lands on stable, so it might be worth pushing this back a release. Also, this means we should get the process started for #52000, otherwise people will have no recourse except recursion for iterative `const fn`.

r? @oli-obk
2020-06-28 20:47:52 +00:00
Dylan MacKenzie
d84f0c8d32 Update tests 2020-06-28 10:08:12 -07:00
Dylan MacKenzie
d6139f76c0 Update tests 2020-06-28 10:08:10 -07:00
Manish Goregaokar
8b92eecbc2
Rollup merge of #73817 - jumbatm:rename-to-clashing-extern-declarations, r=petrochenkov
Rename clashing_extern_decl to clashing_extern_declarations.

Rename clashing_extern_decl to clashing_extern_declarations to bring in-line with lint naming conventions.

Fixes #73802.

r? @petrochenkov
2020-06-28 08:30:33 -07:00
Manish Goregaokar
b236e49f09
Rollup merge of #73708 - Aaron1011:feature/reland-move-fn-self-msg, r=davidtwco
Explain move errors that occur due to method calls involving `self` (take two)

This is a re-attempt of #72389 (which was reverted in #73594)
Instead of using `ExpnKind::Desugaring` to represent operators, this PR
checks the lang item directly.
2020-06-27 22:29:58 -07:00
jumbatm
c72a5dd9d3 Rename the lint to clashing_extern_declarations.
Also, run RustFmt on the clashing_extern_fn test case and update
stderrs.
2020-06-28 10:11:29 +10:00
Manish Goregaokar
f13d09abe1
Rollup merge of #73485 - estebank:dedup-preds, r=nikomatsakis
Perform obligation deduplication to avoid buggy `ExistentialMismatch`

Address #59326.
2020-06-26 13:57:29 -07:00
Aaron Hill
fa6a61c689
Explain move errors that occur due to method calls involving self
This is a re-attempt of #72389 (which was reverted in #73594)
Instead of using `ExpnKind::Desugaring` to represent operators, this PR
checks the lang item directly.
2020-06-26 16:28:09 -04:00
Oliver Scherer
819cde5dab Show the values and computation that would overflow a const evaluation or propagation 2020-06-26 10:08:52 +02:00
Manish Goregaokar
7fb7765cda
Rollup merge of #73674 - estebank:op-trait-bound-suggestion, r=davidtwco
Tweak binop errors

* Suggest potentially missing binop trait bound (fix #73416)
* Use structured suggestion for dereference in binop
2020-06-25 18:00:23 -07:00
Esteban Küber
8f40dae93b Suggest type param trait bound for binop only when appropriate
Verify that the binop trait *is* implemented for the types *if* all the
involved type parameters are replaced with fresh inferred types. When
this is the case, it means that the type parameter was indeed missing a
trait bound. If this is not the case, provide a generic `note` refering
to the type that doesn't implement the expected trait.
2020-06-24 16:17:04 -07:00
Esteban Küber
09af1845d7 review comments: clean up code
* deduplicate logic
* fix typos
* remove unnecessary state
2020-06-24 14:23:45 -07:00
David Wood
14ea7a777f
lints: add improper_ctypes_definitions
This commit adds a new lint - `improper_ctypes_definitions` - which
functions identically to `improper_ctypes`, but on `extern "C" fn`
definitions (as opposed to `improper_ctypes`'s `extern "C" {}`
declarations).

Signed-off-by: David Wood <david@davidtw.co>
2020-06-24 12:09:35 +01:00
Esteban Küber
5aab1a9a88 Tweak binop errors
* Suggest potentially missing binop trait bound (fix #73416)
* Use structured suggestion for dereference in binop
2020-06-23 17:32:06 -07:00
Manish Goregaokar
30fba22a9b
Rollup merge of #73601 - Aaron1011:fix/better-mono-overflow-err, r=ecstatic-morse
Point at the call span when overflow occurs during monomorphization

This improves the output for issue #72577, but there's still more work
to be done.

Currently, an overflow error during monomorphization results in an error
that points at the function we were unable to monomorphize. However, we
don't point at the call that caused the monomorphization to happen. In
the overflow occurs in a large recursive function, it may be difficult
to determine where the issue is.

This commit tracks and `Span` information during collection of
`MonoItem`s, which is used when emitting an overflow error. `MonoItem`
itself is unchanged, so this only affects
`src/librustc_mir/monomorphize/collector.rs`
2020-06-23 13:10:11 -07:00
Manish Goregaokar
ae38698e7f
Rollup merge of #73398 - oli-obk:const_raw_ptr_cmp, r=varkor,RalfJung,nagisa
A way forward for pointer equality in const eval

r? @varkor on the first commit and @RalfJung on the second commit

cc #53020
2020-06-23 00:33:54 -07:00
Manish Goregaokar
903823c59b
Rollup merge of #72493 - nikomatsakis:move-leak-check, r=matthewjasper
move leak-check to during coherence, candidate eval

Implementation of MCP https://github.com/rust-lang/compiler-team/issues/295.

I'd like to do a crater run on this.

Note to @rust-lang/lang: This PR is a breaking change (bugfix). It causes tests like the following to go from a future-compatibility warning #56105 to a hard error:

```rust
trait Trait {}
impl Trait for for<'a, 'b> fn(&'a u32, &'b u32) {}
impl Trait for for<'c> fn(&'c u32, &'c u32) {} // now rejected, used to warn
```

I am not aware of any instances of this code in the wild, but that is why we are doing a crater run. The reason for this change is that those two types are, in fact, the same type, and hence the two impls are overlapping.

There will still be impls that trigger #56105 after this lands, however -- I hope that we will eventually just accept those impls without warning, for the most part. One example of such an impl is this pattern, which is used by wasm-bindgen and other crates as well:

```rust
trait Trait {}
impl<T> Trait for fn(&T) { }
impl<T> Trait for fn(T) { } // still accepted, but warns
```
2020-06-23 00:33:52 -07:00
Niko Matsakis
6929013b85 fix subtle bug in NLL type checker
The bug was revealed by the behavior of the old-lub-glb-hr-noteq1.rs
test. The old-lub-glb-hr-noteq2 test shows the current 'order dependent'
behavior of coercions around higher-ranked functions, at least when
running with `-Zborrowck=mir`.

Also, run compare-mode=nll.
2020-06-22 18:51:08 +00:00
Niko Matsakis
70cf33fcca remove snapshot calls from "match" operations during select
Motivation:

- we want to use leak-check sparingly, first off
- these calls were essentially the same as doing the check during subtyping
2020-06-22 18:51:05 +00:00
Aaron Hill
3ed96a6d63
Point at the call spawn when overflow occurs during monomorphization
This improves the output for issue #72577, but there's still more work
to be done.

Currently, an overflow error during monomorphization results in an error
that points at the function we were unable to monomorphize. However, we
don't point at the call that caused the monomorphization to happen. In
the overflow occurs in a large recursive function, it may be difficult
to determine where the issue is.

This commit tracks and `Span` information during collection of
`MonoItem`s, which is used when emitting an overflow error. `MonoItem`
itself is unchanged, so this only affects
`src/librustc_mir/monomorphize/collector.rs`
2020-06-22 14:35:42 -04:00
Aaron Hill
ad9972a20d
Revert "Rollup merge of #72389 - Aaron1011:feature/move-fn-self-msg, r=nikomatsakis"
This reverts commit 372cb9b69c, reversing
changes made to 5c61a8dc34.
2020-06-22 12:46:29 -04:00