lcnr
11d16c4082
update use of feature flags
2023-12-14 15:22:37 +01:00
jyn
eb53721a34
recurse into refs when comparing tys for diagnostics
2023-12-07 23:00:46 -05:00
Michael Goulet
1279f70bf4
Don't ICE when encountering placeholders in implied bounds computation
2023-11-25 17:40:52 +00:00
Nilstrieb
41e8d152dc
Show number in error message even for one error
...
Co-authored-by: Adrian <adrian.iosdev@gmail.com >
2023-11-24 19:15:52 +01:00
bohan
a4768fea35
fallback for construct_generic_bound_failure
2023-11-04 22:15:22 +08:00
Michael Goulet
dd571e472a
Add all RPITITs when augmenting param-env with GAT bounds in check_type_bounds
2023-11-02 20:47:10 +00:00
Esteban Küber
8c04999226
On object safety error, mention new enum as alternative
...
When we encounter a `dyn Trait` that isn't object safe, look for its
implementors. If there's one, mention using it directly If there are
less than 9, mention the possibility of creating a new enum and using
that instead.
Account for object unsafe `impl Trait on dyn Trait {}`. Make a
distinction between public and sealed traits.
Fix #80194 .
2023-10-29 23:55:46 +00:00
Michael Goulet
90e3aaeca2
Remove incomplete features from RPITIT/AFIT tests
2023-10-24 15:27:06 +00:00
Esteban Küber
bd8b46800d
Tweak wording of type errors involving type params
...
Fix #78206 .
2023-10-18 23:53:18 +00:00
Michael Goulet
17ec3cd5bf
Fix outlives suggestion for GAT in RPITIT
2023-10-16 15:42:26 +00:00
Michael Goulet
3f2574e8ba
Test that RPITITs have RPIT scope and not impl-wide scope
2023-10-13 21:01:36 +00:00
Michael Goulet
59315b8a63
Stabilize AFIT and RPITIT
2023-10-13 21:01:36 +00:00
Matthias Krüger
8ddc0df1f1
Rollup merge of #116219 - compiler-errors:relate-alias-ty-with-variance, r=lcnr
...
Relate alias ty with variance
In the new solver, turns out that the subst-relate branch of the alias-relate predicate was relating args invariantly even for opaques, which have variance 💀 .
This change is a bit more invasive, but I'd rather not special-case it [here](https://github.com/rust-lang/rust/blob/aeaa5c30e5c9041264a2e8314b68ad84c2dc3169/compiler/rustc_trait_selection/src/solve/alias_relate.rs#L171-L190 ) and then have it break elsewhere. I'm doing a perf run to see if the extra call to `def_kind` is that expensive, if it is, I'll reconsider.
r? ``@lcnr``
2023-10-11 20:08:20 +02:00
Jubilee
cfce3a919d
Rollup merge of #116296 - compiler-errors:default-return, r=estebank
...
More accurately point to where default return type should go
When getting the "default return type" span, instead of pointing to the low span of the next token, point to the high span of the previous token. This:
1. Makes forming return type suggestions more uniform, since we expect them all in the same place.
2. Arguably makes labels easier to understand, since we're pointing to where the implicit `-> ()` would've gone, rather than the starting brace or the semicolon.
r? ```@estebank```
2023-10-05 00:56:29 -07:00
bors
5236c8e1fa
Auto merge of #116273 - compiler-errors:refine2, r=tmandry
...
Only trigger `refining_impl_trait` lint on reachable traits
Public but unreachable traits don't matter 😸
r? `@tmandry`
2023-10-05 03:00:30 +00:00
Michael Goulet
137b6d0b01
Point to where missing return type should go
2023-10-04 21:09:54 +00:00
Michael Goulet
5087bb1046
Relate AliasTy considering variance
2023-10-04 04:22:04 +00:00
Michael Goulet
28d58f6524
Bless tests
2023-10-03 00:37:18 +00:00
Michael Goulet
06d9602d33
Only trigger refine lint on reachable traits
2023-09-29 18:36:41 +00:00
Michael Goulet
305524d1d6
Anonymize binders for refining_impl_trait check
2023-09-26 18:11:12 +00:00
Michael Goulet
8568121996
Need to use hybrid param-env to make sure implication is not circular
2023-09-22 19:04:37 +00:00
Michael Goulet
b5a904a9d4
Use placeholders to prevent using inferred RPITIT types to imply their own WF-ness
2023-09-22 18:55:44 +00:00
Michael Goulet
7714db873e
Add note
2023-09-07 01:31:33 +00:00
Michael Goulet
4d05da46e7
Don't emit refining_impl_trait for private items
2023-09-07 01:31:32 +00:00
Michael Goulet
4745d34bc3
Use self instead of the actual self ty
2023-09-07 00:49:09 +00:00
Michael Goulet
e10262ca0a
Implement refinement lint for RPITIT
2023-09-07 00:49:09 +00:00
Michael Goulet
07fc644132
Do not require associated types with Self: Sized to uphold bounds when confirming object candidate
2023-09-02 05:08:38 +00:00
Michael Goulet
7a6b52bf0d
RPITITs are considered object-safe, they're always on Self:Sized methods
2023-09-02 04:58:23 +00:00
Michael Goulet
f1679f7dd6
Capture lifetimes for associated type bounds destined to be lowered to opaques
2023-08-30 00:31:00 +00:00
bors
4e78abb437
Auto merge of #115326 - matthiaskrgr:rollup-qsoa8ar, r=matthiaskrgr
...
Rollup of 8 pull requests
Successful merges:
- #115164 (MIR validation: reject in-place argument/return for packed fields)
- #115240 (codegen_llvm/llvm_type: avoid matching on the Rust type)
- #115294 (More precisely detect cycle errors from type_of on opaque)
- #115310 (Document panic behavior across editions, and improve xrefs)
- #115311 (Revert "Suggest using `Arc` on `!Send`/`!Sync` types")
- #115317 (Devacationize oli-obk)
- #115319 (don't use SnapshotVec in Graph implementation, as it looks unused; use Vec instead)
- #115322 (Tweak output of `to_pretty_impl_header` involving only anon lifetimes)
r? `@ghost`
`@rustbot` modify labels: rollup
2023-08-28 19:57:32 +00:00
David Tolnay
823bacb6e3
Revert "Suggest using Arc on !Send/!Sync types"
...
This reverts commit 9de1a472b6 .
2023-08-28 03:16:48 -07:00
Michael Goulet
f8e0dcbf56
Better error message for object type with GAT
2023-08-28 01:05:34 +00:00
Michael Goulet
690bcc6619
Test variances of opaque captures
2023-08-28 01:05:34 +00:00
Michael Goulet
32a9565223
Bless tests
2023-08-28 01:05:34 +00:00
Michael Goulet
13d3e57237
RPITITs capture all their lifetimes
2023-08-28 01:05:34 +00:00
Esteban Kuber
9de1a472b6
Suggest using Arc on !Send/!Sync types
2023-08-09 14:04:10 +00:00
Michael Goulet
07695178f8
Remove dangling tests
2023-08-08 20:41:53 +00:00
Michael Goulet
420ee167a8
Install bidirectional outlives predicates for RPITITs (and RPITs) correctly
2023-08-08 09:39:42 +00:00
Matthias Krüger
f338a1f7ee
Rollup merge of #114301 - compiler-errors:dont-error-on-missing-region-outlives, r=spastorino
...
Don't check unnecessarily that impl trait is RPIT
We have this random `return_type_impl_trait` function to detect if a function returns an RPIT which is used in outlives suggestions, but removing it doesn't actually change any diagnostics. Let's just remove it.
Also, suppress a spurious outlives error from a ReError.
Fixes #114274
2023-08-02 06:22:48 +02:00
Michael Goulet
1c35634efe
Suppress unnecessary outlives
2023-08-01 17:16:47 +00:00
Michael Goulet
9295817bad
Don't check unnecessarily that impl trait is RPIT
2023-07-31 18:13:48 +00:00
Matthias Krüger
692d764e53
Rollup merge of #114267 - compiler-errors:rpitit-opaque-bounds, r=spastorino
...
Map RPITIT's opaque type bounds back from projections to opaques
An RPITIT in a program's AST is eventually translated into both a projection GAT and an opaque. The opaque is used for default trait methods, like:
```
trait Foo {
fn bar() -> impl Sized { 0i32 }
}
```
The item bounds for both the projection and opaque are identical, and both have a *projection* self ty. This is mostly okay, since we can normalize this projection within the default trait method body to the opaque, but it does two things:
1. it leads to bugs in places where we don't normalize item bounds, like `deduce_future_output_from_obligations`
2. it leads to extra match arms that are both suspicious looking and also easy to miss
This PR maps the opaque type bounds of the RPITIT's *opaque* back to the opaque's self type to avoid this quirk. Then we can fix the UI test for #108304 (1.) and also remove a bunch of match arms (2.).
Fixes #108304
r? `@spastorino`
2023-07-31 16:57:55 +02:00
Michael Goulet
0f0ab89feb
Don't install default projection bound for RPITITs
2023-07-30 21:46:29 +00:00
Michael Goulet
23776619a8
Remap explicit item bounds of RPITIT's opaque back to ty::Opaque
2023-07-30 20:31:27 +00:00
Michael Goulet
744e770939
some nits, bless test
2023-07-29 21:29:03 +00:00
Michael Goulet
50d21091ee
Implement assumed_wf_types for RPITITs' implementations
2023-07-29 21:19:33 +00:00
Michael Goulet
349a2372ed
Take RPITITs inherit the assumed_wf_types of their parent fn
2023-07-29 21:19:33 +00:00
Matthias Krüger
76f0a8c30c
Rollup merge of #114147 - compiler-errors:missing-rpitits, r=spastorino
...
Insert RPITITs that were shadowed by missing ADTs that resolve to [type error]
Comment inline explains how this can happen.
Fixes #113903
2023-07-28 19:51:16 +02:00
Michael Goulet
ea2f8b346b
Add additional test
2023-07-27 22:50:40 +00:00
Michael Goulet
a4ac773f62
Insert RPITITs that were shadowed by missing ADTs that resolve to type error
2023-07-27 22:32:58 +00:00