Commit graph

556 commits

Author SHA1 Message Date
Ayrton
b75ed4f61c added a test case for reporting mismatched traits 2020-07-23 20:21:28 -04:00
Gabriel Smith
69d5dd6a50 disallow non-static lifetimes in const generics
This has been put in place to patch over an ICE caused when we encounter
a non-static lifetime in a const generic during borrow checking. This
restriction may be relaxed in the future, but we need more discussion
before then, and in the meantime we should still deal with this ICE.

Fixes issue #60814
2020-07-19 12:52:36 -04: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
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
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
Yuki Okushi
a9b64766a4
Tweak wording 2020-07-10 07:24:18 +09:00
Yuki Okushi
6864546049
Add a help to use in_band_lifetimes in nightly 2020-07-10 06:39:46 +09: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
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
Eric Huss
1b3ef66026 Switch crate_extern_paths to a query, and tweak wording. 2020-06-30 09:10:44 -07:00
Eric Huss
c225e5c5cb Provide more information on duplicate lang item error. 2020-06-30 08:35:11 -07: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
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
Oliver Scherer
9e88b48133 Refer just to the issue in the raw ptr cmp diagnostic instead of explaining everything in the diagnostic 2020-06-20 14:09:07 +02:00
Manish Goregaokar
dac512e04a
Rollup merge of #72934 - christianpoveda:mut-borrows-in-consts, r=oli-obk
forbid mutable references in all constant contexts except for const-fns

PR to address #71212

cc: @ecstatic-morse
2020-06-19 19:42:51 -07:00
Manish Goregaokar
203305d095
Rollup merge of #71420 - RalfJung:specialization-incomplete, r=matthewjasper
Specialization is unsound

As discussed in https://github.com/rust-lang/rust/issues/31844#issuecomment-617013949, it might be a good idea to warn users of specialization that the feature they are using is unsound.

I also expanded the "incomplete feature" warning to link the user to the tracking issue.
2020-06-19 19:42:43 -07:00
Christian Poveda
96031e22d2
add new error code 2020-06-19 14:16:38 -05:00
Christian Poveda
1f48465a01
update diagnostics for &mut in constants 2020-06-19 11:48:46 -05:00
Oliver Scherer
e09b620339 Add fuzzy pointer comparison intrinsics 2020-06-19 18:13:41 +02:00
Oliver Scherer
9245ba8304 Remove the const_raw_ptr_comparison feature gate.
We can never supply a meaningful implementation of this.
Instead, the follow up commits will create two intrinsics
that approximate comparisons:

* `ptr_maybe_eq`
* `ptr_maybe_ne`

The fact that `ptr_maybe_eq(a, b)` is not necessarily the same
value as `!ptr_maybe_ne(a, b)` is a symptom of this entire
problem.
2020-06-19 18:13:41 +02:00
Ralf Jung
991dfe7595 bless all 2020-06-16 11:56:54 +02:00
Esteban Küber
e857696cf8 Tweak "non-primitive cast" error
- Suggest borrowing expression if it would allow cast to work.
- Suggest using `<Type>::from(<expr>)` when appropriate.
- Minor tweak to `;` typo suggestion.

Partily address #47136.
2020-06-15 08:57:20 -07:00
Patryk Wychowaniec
d31d215c56
Improve E0433, so that it suggests missing imports 2020-06-02 20:41:25 +02:00
Ralf Jung
f96e3e2069
Rollup merge of #72540 - davidtwco:issue-67552-mono-collector-comparison, r=varkor
mir: adjust conditional in recursion limit check

Fixes #67552.

This PR adjusts the condition used in the recursion limit check of
the monomorphization collector, from `>` to `>=`.

In #67552, the test case had infinite indirect recursion, repeating a
handful of functions (from the perspective of the monomorphization
collector): `rec` -> `identity` -> `Iterator::count` -> `Iterator::fold`
-> `Iterator::next` -> `rec`.

During this process, `resolve_associated_item` was invoked for
`Iterator::fold` (during the construction of an `Instance`), and
ICE'd due to substitutions needing inference. However, previous
iterations of this recursion would have called this function for
`Iterator::fold` - and did! - and succeeded in doing so (trivially
checkable from debug logging, `()` is present where `_` is in the substs
of the failing execution).

The expected outcome of this test case would be a recursion limit error
(which is present when the `identity` fn indirection is removed), and
the recursion depth of `rec` is increasing (other functions finish
collecting their neighbours and thus have their recursion depths reset).

When the ICE occurs, the recursion depth of `rec` is 256 (which matches
the recursion limit), which suggests perhaps that a different part of
the compiler is using a `>=` comparison and returning a different result
on this recursion rather than what it returned in every previous
recursion, thus stopping the monomorphization collector from reporting
an error on the next recursion, where `recursion_depth_of_rec > 256`
would have been true.

With grep and some educated guesses, we can determine that
the recursion limit check at line 818 in
`src/librustc_trait_selection/traits/project.rs` is the other check that
is using a different comparison. Modifying either comparison to be `>` or
`>=` respectively will fix the error, but changing the monomorphization
collector produces the nicer error.
2020-05-30 13:45:10 +02:00
bors
0e9e408310 Auto merge of #72756 - RalfJung:rollup-tbjmtx2, r=RalfJung
Rollup of 9 pull requests

Successful merges:

 - #67460 (Tweak impl signature mismatch errors involving `RegionKind::ReVar` lifetimes)
 - #71095 (impl From<[T; N]> for Box<[T]>)
 - #71500 (Make pointer offset methods/intrinsics const)
 - #71804 (linker: Support `-static-pie` and `-static -shared`)
 - #71862 (Implement RFC 2585: unsafe blocks in unsafe fn)
 - #72103 (borrowck `DefId` -> `LocalDefId`)
 - #72407 (Various minor improvements to Ipv6Addr::Display)
 - #72413 (impl Step for char (make Range*<char> iterable))
 - #72439 (NVPTX support for new asm!)

Failed merges:

r? @ghost
2020-05-29 23:43:20 +00:00
Dylan DPC
9c1f2035a9
Rollup merge of #72383 - DarkEld3r:issue-72322, r=matthewjasper
Suggest using std::mem::drop function instead of explicit destructor call

I would prefer to give a better suggestion that includes code example, but I'm currently stuck on getting the correct span for that.

Closes #72322.
2020-05-29 20:21:13 +02:00
David Wood
a54ed872cb
standardize limit comparisons with Limit type
This commit introduces a `Limit` type which is used to ensure that all
comparisons against limits within the compiler are consistent (which can
result in ICEs if they aren't).

Signed-off-by: David Wood <david@davidtw.co>
2020-05-28 10:33:07 +01:00
Esteban Küber
cb6408afc6 Fix rebase 2020-05-27 19:24:09 -07:00
Stanislav Tkach
6ddbef170b Simplify suggestion 2020-05-26 23:06:46 +03:00
Stanislav Tkach
a9199de34d Merge spans for the suggestion 2020-05-23 00:16:17 +03:00
Matthew Jasper
f9f3063cfa Update tests 2020-05-22 18:03:08 +01:00
Stanislav Tkach
34b51187ce Suggest using std::mem::drop function instead of explicit destructor call 2020-05-21 16:21:02 +03:00
mibac138
aaeea7ffc3 Alter wording for use foo::self help 2020-05-19 22:12:41 +02:00
mibac138
84a44218ad Suggest fixes for use foo::self 2020-05-19 20:40:46 +02:00
Ralf Jung
6a8cf4a17c adjust tests 2020-05-09 14:40:17 +02:00
mibac138
73867365a8 Suggest to add missing feature when using gated const features 2020-05-04 23:47:00 +02:00
Dylan DPC
0144bf6a84
Rollup merge of #71340 - Valloric:more-check-pass, r=nikomatsakis
Moving more build-pass tests to check-pass

One or two tests became build-pass without the FIXME because they really
needed build-pass (were failing without it).

Helps with #62277

---
<!-- Reviewable:start -->
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/rust-lang/rust/71340)
<!-- Reviewable:end -->
2020-04-28 17:55:43 +02:00
Esteban Küber
6e3ba6f40f Tweak some suggestions in rustc_resolve 2020-04-26 11:43:43 -07:00
Val Markovic
2155adbc3a Moving more build-pass tests to check-pass
One or two tests became build-pass without the FIXME because they really
needed build-pass (were failing without it).

Helps with #62277
2020-04-23 20:21:38 -07:00
Esteban Küber
d3c96f03b5 Suggest -> impl Trait and -> Box<dyn Trait> on fn that doesn't return
During development, a function could have a return type set that is a
bare trait object by accident. We already suggest using either a boxed
trait object or `impl Trait` if the return paths will allow it. We now
do so too when there are *no* return paths or they all resolve to `!`.
We still don't handle cases where the trait object is *not* the entirety
of the return type gracefully.
2020-04-20 09:24:41 -07:00
Dylan DPC
abd72f7fc2
Rollup merge of #70578 - PankajChaudhary5:master, r=GuillaumeGomez
Add long error explanation for E0657

Added proper error explanation for issue E0657 in the Rust compiler.

Part of #61137

r? @GuillaumeGomez
2020-04-17 03:05:11 +02:00
Rustin-Liu
b07e7fe047 Rename AssocKind::Method to AssocKind::Fn
Rename fn_has_self_argument to fn_has_self_parameter

Rename AssocItemKind::Method to AssocItemKind::Fn

Refine has_no_input_arg

Refine has_no_input_arg

Revert has_no_input_arg

Refine suggestion_descr

Move as_def_kind into AssocKind

Signed-off-by: Rustin-Liu <rustin.liu@gmail.com>

Fix tidy check issue

Signed-off-by: Rustin-Liu <rustin.liu@gmail.com>
2020-04-14 07:12:07 +08:00
PankajChaudhary5
908436f3bb Add proper explanation of error code E0657 2020-04-13 13:36:22 +05:30
RoccoDev
b85c64c3ea
rustc: Add a warning count upon completion 2020-04-11 16:15:24 +02:00
Mazdak Farrokhzad
1fe86f47d8
Rollup merge of #69745 - estebank:predicate-obligations-3, r=nikomatsakis,eddyb
Use `PredicateObligation`s instead of `Predicate`s

Keep more information about trait binding failures. Use more specific spans by pointing at bindings that introduce obligations.

Subset of #69709.

r? @eddyb
2020-04-10 18:15:16 +02:00
Esteban Küber
d605a9d969 Small tweaks to required bound span 2020-04-08 14:40:51 -07:00