Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
2c752bc
Undeprecate env::home_dir
arlosi Feb 20, 2025
812b1de
ref_pat_eat_one_layer_2024: add context and examples to the unstable …
dianne Feb 21, 2025
9323ba5
Remove MaybeForgetReturn suggestion
compiler-errors Feb 20, 2025
a7bd4a3
Add DWARF test case for non-C-like `repr128` enums
beetrees Feb 25, 2025
fb3aa33
Revert "Derive `Clone` on fewer THIR types."
skius Feb 27, 2025
b5f0c82
Add note to Thir struct about necessity of Clone derive
skius Feb 27, 2025
b2bb7cc
Fix char count in Display for ByteStr
thaliaarchi Feb 28, 2025
41dd80a
add test to reproduce #137662 (using ty decl macro fragment in an att…
jdonszelmann Feb 26, 2025
50a37ca
miri native-call support: all previously exposed provenance is access…
RalfJung Feb 28, 2025
88f988c
use fixed-width integer types in C code
RalfJung Feb 28, 2025
476b098
adjust Layout debug printing to match the internal field names
RalfJung Feb 28, 2025
91034ad
Do not require that unsafe fields lack drop glue
jswrenn Feb 28, 2025
adff091
Check dyn flavor before registering upcast goal on wide pointer cast …
compiler-errors Feb 25, 2025
e213f4b
Improve error message for AsyncFn trait failure for RPIT
compiler-errors Mar 3, 2025
0aacfe9
interpret/provenance_map: consistently use range_is_empty
RalfJung Mar 3, 2025
133705c
[rustdoc] hide item that is not marked as doc(inline) and whose src i…
xizheyin Feb 27, 2025
a23566a
Provide more context on resolve error caused from incorrect RTN
estebank Feb 28, 2025
ab31129
Point of macro expansion from call expr if it involves macro var
compiler-errors Feb 24, 2025
e4dfca8
Point out macro expansion ident in resolver errors too
compiler-errors Feb 24, 2025
0607246
Fix associated type errors too
compiler-errors Feb 24, 2025
09e5846
Also note struct access, and fix macro expansion from foreign crates
compiler-errors Feb 24, 2025
69c4651
ci: use ubuntu 24 on arm large runner
marcoieni Mar 4, 2025
da3e736
Clarify why InhabitedPredicate::instantiate_opt exists
meithecatte Feb 28, 2025
a3d63fb
InhabitedPredicate: avoid using a wildcard branch
meithecatte Mar 3, 2025
3d62b27
Ensure that negative auto impls are always applicable
compiler-errors Feb 28, 2025
05a8060
Make rustdoc tests use always applicable negative auto impls
compiler-errors Feb 28, 2025
7923031
Update `compiler-builtins` to 0.1.151
tgross35 Mar 5, 2025
1cacddc
bootstrap and compiletest: Use size_of_val from the prelude instead o…
thaliaarchi Mar 5, 2025
056ec72
trim channel value in `get_closest_merge_commit`
onur-ozkan Mar 5, 2025
3dbf3dc
Increase the max. custom try jobs requested to `20`
Kobzol Mar 5, 2025
afc1428
Rollup merge of #137303 - compiler-errors:maybe-forgor, r=cjgillot
jieyouxu Mar 5, 2025
957f48a
Rollup merge of #137327 - arlosi:home-dir, r=Mark-Simulacrum
jieyouxu Mar 5, 2025
f97b56d
Rollup merge of #137358 - dianne:new-match-ergonomics-examples, r=Nad…
jieyouxu Mar 5, 2025
0e38ad8
Rollup merge of #137534 - xizheyin:issue-137342, r=GuillaumeGomez
jieyouxu Mar 5, 2025
3de6310
Rollup merge of #137565 - compiler-errors:macro-ex, r=estebank
jieyouxu Mar 5, 2025
e1748bb
Rollup merge of #137637 - compiler-errors:dyn-cast-from-dyn-star, r=o…
jieyouxu Mar 5, 2025
ede3cc0
Rollup merge of #137643 - beetrees:repr128-dwarf-variant-test, r=jiey…
jieyouxu Mar 5, 2025
acd2c35
Rollup merge of #137744 - skius:master, r=Nadrieril
jieyouxu Mar 5, 2025
ff89925
Rollup merge of #137758 - jdonszelmann:fix-137662, r=nnethercote
jieyouxu Mar 5, 2025
3f76128
Rollup merge of #137764 - compiler-errors:always-applicable-negative-…
jieyouxu Mar 5, 2025
9590cec
Rollup merge of #137772 - thaliaarchi:bstr-display, r=joshtriplett
jieyouxu Mar 5, 2025
9d9489d
Rollup merge of #137798 - marcoieni:ubuntu-24-large-runner-arm, r=Kobzol
jieyouxu Mar 5, 2025
b8855d8
Rollup merge of #137802 - RalfJung:miri-native-call-exposed, r=oli-obk
jieyouxu Mar 5, 2025
007cdfe
Rollup merge of #137805 - RalfJung:layout-debug-print, r=Noratrieb
jieyouxu Mar 5, 2025
0dbea0e
Rollup merge of #137808 - jswrenn:droppy-unsafe-fields, r=nnethercote
jieyouxu Mar 5, 2025
b738027
Rollup merge of #137820 - meithecatte:instantiate-opt, r=BoxyUwU
jieyouxu Mar 5, 2025
68281b7
Rollup merge of #137825 - estebank:rtn-sugg-2, r=compiler-errors
jieyouxu Mar 5, 2025
3b3e934
Rollup merge of #137910 - compiler-errors:async-fn-goal-error, r=oli-obk
jieyouxu Mar 5, 2025
9c2a21c
Rollup merge of #137920 - RalfJung:provenance-map-emptiness, r=oli-obk
jieyouxu Mar 5, 2025
78d2633
Rollup merge of #138038 - tgross35:update-builtins, r=tgross35
jieyouxu Mar 5, 2025
0b02900
Rollup merge of #138041 - thaliaarchi:use-prelude-size-of.boostrap-co…
jieyouxu Mar 5, 2025
3e983fd
Rollup merge of #138046 - onur-ozkan:trim-include-str, r=jieyouxu
jieyouxu Mar 5, 2025
e37d5bb
Rollup merge of #138053 - Kobzol:more-try-jobs, r=marcoieni
jieyouxu Mar 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Provide more context on resolve error caused from incorrect RTN
When encountering a resolve E0575 error for an associated method (when a type was expected), see if it could have been an intended return type notation bound.

```
error[E0575]: expected associated type, found associated function `Trait::method`
  --> $DIR/bad-inputs-and-output.rs:31:36
   |
LL | fn foo_qualified<T: Trait>() where <T as Trait>::method(i32): Send {}
   |                                    ^^^^^^^^^^^^^^^^^^^^^^^^^ not a associated type
   |
help: you might have meant to use the return type notation syntax
   |
LL - fn foo_qualified<T: Trait>() where <T as Trait>::method(i32): Send {}
LL + fn foo_qualified<T: Trait>() where T::method(..): Send {}
   |
```
  • Loading branch information
estebank committed Mar 3, 2025
commit a23566a57e4d53a35827becc2f65ce27951276c8
1 change: 0 additions & 1 deletion compiler/rustc_ast_lowering/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -926,7 +926,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
if let Some(first_char) = constraint.ident.as_str().chars().next()
&& first_char.is_ascii_lowercase()
{
tracing::info!(?data, ?data.inputs);
let err = match (&data.inputs[..], &data.output) {
([_, ..], FnRetTy::Default(_)) => {
errors::BadReturnTypeNotation::Inputs { span: data.inputs_span }
Expand Down
1 change: 0 additions & 1 deletion compiler/rustc_ast_lowering/src/path.rs
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
}
GenericArgs::Parenthesized(data) => match generic_args_mode {
GenericArgsMode::ReturnTypeNotation => {
tracing::info!(?data, ?data.inputs);
let err = match (&data.inputs[..], &data.output) {
([_, ..], FnRetTy::Default(_)) => {
BadReturnTypeNotation::Inputs { span: data.inputs_span }
Expand Down
18 changes: 15 additions & 3 deletions compiler/rustc_resolve/src/late.rs
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,7 @@ pub(crate) struct UnnecessaryQualification<'ra> {
pub removal_span: Span,
}

#[derive(Default)]
#[derive(Default, Debug)]
struct DiagMetadata<'ast> {
/// The current trait's associated items' ident, used for diagnostic suggestions.
current_trait_assoc_items: Option<&'ast [P<AssocItem>]>,
Expand Down Expand Up @@ -3146,6 +3146,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
PathSource::Trait(AliasPossibility::No),
Finalize::new(trait_ref.ref_id, trait_ref.path.span),
RecordPartialRes::Yes,
None,
);
self.diag_metadata.currently_processing_impl_trait = None;
if let Some(def_id) = res.expect_full_res().opt_def_id() {
Expand Down Expand Up @@ -4072,6 +4073,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
source,
Finalize::new(id, path.span),
RecordPartialRes::Yes,
None,
);
}

Expand All @@ -4083,14 +4085,21 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
source: PathSource<'ast>,
finalize: Finalize,
record_partial_res: RecordPartialRes,
parent_qself: Option<&QSelf>,
) -> PartialRes {
let ns = source.namespace();

let Finalize { node_id, path_span, .. } = finalize;
let report_errors = |this: &mut Self, res: Option<Res>| {
if this.should_report_errs() {
let (err, candidates) =
this.smart_resolve_report_errors(path, None, path_span, source, res);
let (err, candidates) = this.smart_resolve_report_errors(
path,
None,
path_span,
source,
res,
parent_qself,
);

let def_id = this.parent_scope.module.nearest_parent_mod();
let instead = res.is_some();
Expand Down Expand Up @@ -4159,6 +4168,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
path_span,
PathSource::Type,
None,
parent_qself,
);

// There are two different error messages user might receive at
Expand Down Expand Up @@ -4436,6 +4446,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
PathSource::Trait(AliasPossibility::No),
Finalize::new(finalize.node_id, qself.path_span),
RecordPartialRes::No,
Some(&qself),
);

if trait_res.expect_full_res() == Res::Err {
Expand All @@ -4460,6 +4471,7 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> {
PathSource::TraitItem(ns),
Finalize::with_root_span(finalize.node_id, finalize.path_span, qself.path_span),
RecordPartialRes::No,
Some(&qself),
);

// The remaining segments (the `C` in our example) will
Expand Down
39 changes: 38 additions & 1 deletion compiler/rustc_resolve/src/late/diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ use super::NoConstantGenericsReason;
use crate::diagnostics::{ImportSuggestion, LabelSuggestion, TypoSuggestion};
use crate::late::{
AliasPossibility, LateResolutionVisitor, LifetimeBinderKind, LifetimeRes, LifetimeRibKind,
LifetimeUseSet, RibKind,
LifetimeUseSet, QSelf, RibKind,
};
use crate::ty::fast_reject::SimplifiedType;
use crate::{
Expand Down Expand Up @@ -421,6 +421,7 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
span: Span,
source: PathSource<'_>,
res: Option<Res>,
qself: Option<&QSelf>,
) -> (Diag<'tcx>, Vec<ImportSuggestion>) {
debug!(?res, ?source);
let base_error = self.make_base_error(path, span, source, res);
Expand Down Expand Up @@ -453,6 +454,15 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {

self.suggest_self_or_self_ref(&mut err, path, span);
self.detect_assoc_type_constraint_meant_as_path(&mut err, &base_error);
self.detect_rtn_with_fully_qualified_path(
&mut err,
path,
following_seg,
span,
source,
res,
qself,
);
if self.suggest_self_ty(&mut err, source, path, span)
|| self.suggest_self_value(&mut err, source, path, span)
{
Expand Down Expand Up @@ -501,6 +511,33 @@ impl<'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
(err, candidates)
}

fn detect_rtn_with_fully_qualified_path(
&self,
err: &mut Diag<'_>,
path: &[Segment],
following_seg: Option<&Segment>,
span: Span,
source: PathSource<'_>,
res: Option<Res>,
qself: Option<&QSelf>,
) {
if let Some(Res::Def(DefKind::AssocFn, _)) = res
&& let PathSource::TraitItem(TypeNS) = source
&& let None = following_seg
&& let Some(qself) = qself
&& let TyKind::Path(None, ty_path) = &qself.ty.kind
&& ty_path.segments.len() == 1
&& self.diag_metadata.current_where_predicate.is_some()
{
err.span_suggestion_verbose(
span,
"you might have meant to use the return type notation syntax",
format!("{}::{}(..)", ty_path.segments[0].ident, path[path.len() - 1].ident),
Applicability::MaybeIncorrect,
);
}
}

fn detect_assoc_type_constraint_meant_as_path(
&self,
err: &mut Diag<'_>,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
//@ edition: 2021
//@ run-rustfix
#![feature(return_type_notation)]
#![allow(dead_code)]

trait Trait {
async fn method() {}
}

fn foo<T: Trait<method(..): Send>>() {}
//~^ ERROR argument types not allowed with return type notation

fn bar<T: Trait<method(..): Send>>() {}
//~^ ERROR return type not allowed with return type notation

fn baz<T: Trait<method(..): Send>>() {}
//~^ ERROR return type notation arguments must be elided with `..`

fn foo_path<T: Trait>() where T::method(..): Send {}
//~^ ERROR argument types not allowed with return type notation

fn bar_path<T: Trait>() where T::method(..): Send {}
//~^ ERROR return type not allowed with return type notation

fn bay_path<T: Trait>() where T::method(..): Send {}
//~^ ERROR return type not allowed with return type notation

fn baz_path<T: Trait>() where T::method(..): Send {}
//~^ ERROR return type notation arguments must be elided with `..`

fn foo_qualified<T: Trait>() where T::method(..): Send {}
//~^ ERROR expected associated type

fn bar_qualified<T: Trait>() where T::method(..): Send {}
//~^ ERROR expected associated type

fn baz_qualified<T: Trait>() where T::method(..): Send {}
//~^ ERROR expected associated type

fn main() {}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
//@ edition: 2021

//@ run-rustfix
#![feature(return_type_notation)]
#![allow(dead_code)]

trait Trait {
async fn method() {}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
error: return type not allowed with return type notation
--> $DIR/bad-inputs-and-output.rs:24:45
--> $DIR/bad-inputs-and-output.rs:25:45
|
LL | fn bay_path<T: Trait>() where T::method(..) -> (): Send {}
| ^^^^^
Expand All @@ -11,25 +11,43 @@ LL + fn bay_path<T: Trait>() where T::method(..): Send {}
|

error[E0575]: expected associated type, found associated function `Trait::method`
--> $DIR/bad-inputs-and-output.rs:30:36
--> $DIR/bad-inputs-and-output.rs:31:36
|
LL | fn foo_qualified<T: Trait>() where <T as Trait>::method(i32): Send {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^ not a associated type
|
help: you might have meant to use the return type notation syntax
|
LL - fn foo_qualified<T: Trait>() where <T as Trait>::method(i32): Send {}
LL + fn foo_qualified<T: Trait>() where T::method(..): Send {}
|

error[E0575]: expected associated type, found associated function `Trait::method`
--> $DIR/bad-inputs-and-output.rs:33:36
--> $DIR/bad-inputs-and-output.rs:34:36
|
LL | fn bar_qualified<T: Trait>() where <T as Trait>::method() -> (): Send {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not a associated type
|
help: you might have meant to use the return type notation syntax
|
LL - fn bar_qualified<T: Trait>() where <T as Trait>::method() -> (): Send {}
LL + fn bar_qualified<T: Trait>() where T::method(..): Send {}
|

error[E0575]: expected associated type, found associated function `Trait::method`
--> $DIR/bad-inputs-and-output.rs:36:36
--> $DIR/bad-inputs-and-output.rs:37:36
|
LL | fn baz_qualified<T: Trait>() where <T as Trait>::method(): Send {}
| ^^^^^^^^^^^^^^^^^^^^^^ not a associated type
|
help: you might have meant to use the return type notation syntax
|
LL - fn baz_qualified<T: Trait>() where <T as Trait>::method(): Send {}
LL + fn baz_qualified<T: Trait>() where T::method(..): Send {}
|

error: argument types not allowed with return type notation
--> $DIR/bad-inputs-and-output.rs:9:23
--> $DIR/bad-inputs-and-output.rs:10:23
|
LL | fn foo<T: Trait<method(i32): Send>>() {}
| ^^^^^
Expand All @@ -41,7 +59,7 @@ LL + fn foo<T: Trait<method(..): Send>>() {}
|

error: return type not allowed with return type notation
--> $DIR/bad-inputs-and-output.rs:12:25
--> $DIR/bad-inputs-and-output.rs:13:25
|
LL | fn bar<T: Trait<method() -> (): Send>>() {}
| ^^^^^^
Expand All @@ -53,7 +71,7 @@ LL + fn bar<T: Trait<method(..): Send>>() {}
|

error: return type notation arguments must be elided with `..`
--> $DIR/bad-inputs-and-output.rs:15:23
--> $DIR/bad-inputs-and-output.rs:16:23
|
LL | fn baz<T: Trait<method(): Send>>() {}
| ^^
Expand All @@ -64,7 +82,7 @@ LL | fn baz<T: Trait<method(..): Send>>() {}
| ++

error: argument types not allowed with return type notation
--> $DIR/bad-inputs-and-output.rs:18:40
--> $DIR/bad-inputs-and-output.rs:19:40
|
LL | fn foo_path<T: Trait>() where T::method(i32): Send {}
| ^^^^^
Expand All @@ -76,7 +94,7 @@ LL + fn foo_path<T: Trait>() where T::method(..): Send {}
|

error: return type not allowed with return type notation
--> $DIR/bad-inputs-and-output.rs:21:42
--> $DIR/bad-inputs-and-output.rs:22:42
|
LL | fn bar_path<T: Trait>() where T::method() -> (): Send {}
| ^^^^^^
Expand All @@ -88,7 +106,7 @@ LL + fn bar_path<T: Trait>() where T::method(..): Send {}
|

error: return type notation arguments must be elided with `..`
--> $DIR/bad-inputs-and-output.rs:27:40
--> $DIR/bad-inputs-and-output.rs:28:40
|
LL | fn baz_path<T: Trait>() where T::method(): Send {}
| ^^
Expand Down
Loading