Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
defcc44
Make `unexpected` always "return" `PResult<()>` & add `unexpected_any`
WaffleLapkin Mar 15, 2024
75d940f
Use `do yeet ()` and `do yeet _` instead of `None?` and `Err(_)?` in …
WaffleLapkin Mar 15, 2024
ead18f4
reorder clippy rules to their original order before passing them
onur-ozkan Feb 24, 2024
b43dc06
add unit test: `order_of_clippy_rules`
onur-ozkan Feb 24, 2024
1945e8f
pass ignored lints after manual ones
onur-ozkan Feb 24, 2024
a61bf30
use `--cap-lints` only when deny and forbid rules are not specified
onur-ozkan Feb 24, 2024
d82d419
Expose ucred::peer_cred on QNX targets to enable dist builds
Hoverbear Mar 19, 2024
3d56178
Remove redundant coroutine captures note
compiler-errors Mar 19, 2024
49dd50f
Add "put" as a confusable for insert on hash map/set
Sky9x Mar 19, 2024
de38888
Reduce `pub` usage in `rustc_session`.
nnethercote Mar 19, 2024
81d7d7a
resolve clippy errors
onur-ozkan Feb 24, 2024
4f3050b
Rollup merge of #121543 - onur-ozkan:clippy-args, r=oli-obk
matthiaskrgr Mar 20, 2024
9fb40ef
Rollup merge of #122540 - WaffleLapkin:ununexpected, r=estebank
matthiaskrgr Mar 20, 2024
2cf93ac
Rollup merge of #122730 - ferrocene:hoverbear/qnx-ucred-cfgs, r=Amanieu
matthiaskrgr Mar 20, 2024
ffdb147
Rollup merge of #122732 - compiler-errors:coroutine-captures-note, r=…
matthiaskrgr Mar 20, 2024
d7209bf
Rollup merge of #122739 - Sky9x:insert-put, r=jhpratt
matthiaskrgr Mar 20, 2024
53a753e
Rollup merge of #122748 - nnethercote:rustc_session-pub, r=jackh726
matthiaskrgr Mar 20, 2024
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
Original file line number Diff line number Diff line change
Expand Up @@ -3209,71 +3209,69 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
}
};

// Don't print the tuple of capture types
'print: {
if !is_upvar_tys_infer_tuple {
let ty_str = tcx.short_ty_string(ty, &mut long_ty_file);
let msg = format!("required because it appears within the type `{ty_str}`");
match ty.kind() {
ty::Adt(def, _) => match tcx.opt_item_ident(def.did()) {
Some(ident) => err.span_note(ident.span, msg),
None => err.note(msg),
},
ty::Alias(ty::Opaque, ty::AliasTy { def_id, .. }) => {
// If the previous type is async fn, this is the future generated by the body of an async function.
// Avoid printing it twice (it was already printed in the `ty::Coroutine` arm below).
let is_future = tcx.ty_is_opaque_future(ty);
debug!(
?obligated_types,
?is_future,
"note_obligation_cause_code: check for async fn"
);
if is_future
&& obligated_types.last().is_some_and(|ty| match ty.kind() {
ty::Coroutine(last_def_id, ..) => {
tcx.coroutine_is_async(*last_def_id)
}
_ => false,
})
{
break 'print;
}
err.span_note(tcx.def_span(def_id), msg)
if !is_upvar_tys_infer_tuple {
let ty_str = tcx.short_ty_string(ty, &mut long_ty_file);
let msg = format!("required because it appears within the type `{ty_str}`");
match ty.kind() {
ty::Adt(def, _) => match tcx.opt_item_ident(def.did()) {
Some(ident) => {
err.span_note(ident.span, msg);
}
ty::CoroutineWitness(def_id, args) => {
use std::fmt::Write;

// FIXME: this is kind of an unusual format for rustc, can we make it more clear?
// Maybe we should just remove this note altogether?
// FIXME: only print types which don't meet the trait requirement
let mut msg =
"required because it captures the following types: ".to_owned();
for bty in tcx.coroutine_hidden_types(*def_id) {
let ty = bty.instantiate(tcx, args);
write!(msg, "`{ty}`, ").unwrap();
}
err.note(msg.trim_end_matches(", ").to_string())
None => {
err.note(msg);
}
ty::Coroutine(def_id, _) => {
let sp = tcx.def_span(def_id);

// Special-case this to say "async block" instead of `[static coroutine]`.
let kind = tcx.coroutine_kind(def_id).unwrap();
err.span_note(
sp,
with_forced_trimmed_paths!(format!(
"required because it's used within this {kind:#}",
)),
)
},
ty::Alias(ty::Opaque, ty::AliasTy { def_id, .. }) => {
// If the previous type is async fn, this is the future generated by the body of an async function.
// Avoid printing it twice (it was already printed in the `ty::Coroutine` arm below).
let is_future = tcx.ty_is_opaque_future(ty);
debug!(
?obligated_types,
?is_future,
"note_obligation_cause_code: check for async fn"
);
if is_future
&& obligated_types.last().is_some_and(|ty| match ty.kind() {
ty::Coroutine(last_def_id, ..) => {
tcx.coroutine_is_async(*last_def_id)
}
_ => false,
})
{
// See comment above; skip printing twice.
} else {
err.span_note(tcx.def_span(def_id), msg);
}
ty::Closure(def_id, _) => err.span_note(
}
ty::Coroutine(def_id, _) => {
let sp = tcx.def_span(def_id);

// Special-case this to say "async block" instead of `[static coroutine]`.
let kind = tcx.coroutine_kind(def_id).unwrap();
err.span_note(
sp,
with_forced_trimmed_paths!(format!(
"required because it's used within this {kind:#}",
)),
);
}
ty::CoroutineWitness(..) => {
// Skip printing coroutine-witnesses, since we'll drill into
// the bad field in another derived obligation cause.
}
ty::Closure(def_id, _) | ty::CoroutineClosure(def_id, _) => {
err.span_note(
tcx.def_span(def_id),
"required because it's used within this closure",
),
ty::Str => err.note("`str` is considered to contain a `[u8]` slice for auto trait purposes"),
_ => err.note(msg),
};
}
);
}
ty::Str => {
err.note("`str` is considered to contain a `[u8]` slice for auto trait purposes");
}
_ => {
err.note(msg);
}
};
}

obligated_types.push(ty);
Expand Down
1 change: 0 additions & 1 deletion tests/ui/async-await/async-await-let-else.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,6 @@ LL | async fn bar2<T>(_: T) -> ! {
LL | | panic!()
LL | | }
| |_^
= note: required because it captures the following types: `impl Future<Output = !>`
note: required because it's used within this `async` fn body
--> $DIR/async-await-let-else.rs:18:32
|
Expand Down
1 change: 0 additions & 1 deletion tests/ui/async-await/issue-68112.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ note: required because it appears within the type `impl Future<Output = Arc<RefC
|
LL | fn make_non_send_future2() -> impl Future<Output = Arc<RefCell<i32>>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: required because it captures the following types: `impl Future<Output = Arc<RefCell<i32>>>`, `Ready<i32>`
note: required because it's used within this `async` block
--> $DIR/issue-68112.rs:57:20
|
Expand Down
2 changes: 0 additions & 2 deletions tests/ui/async-await/issue-70935-complex-spans.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ LL | async fn baz<T>(_c: impl FnMut() -> T) where T: Future<Output=()> {
| ___________________________________________________________________^
LL | | }
| |_^
= note: required because it captures the following types: `impl Future<Output = ()>`
note: required because it's used within this `async` block
--> $DIR/issue-70935-complex-spans.rs:18:5
|
Expand Down Expand Up @@ -63,7 +62,6 @@ LL | async fn baz<T>(_c: impl FnMut() -> T) where T: Future<Output=()> {
| ___________________________________________________________________^
LL | | }
| |_^
= note: required because it captures the following types: `impl Future<Output = ()>`
note: required because it's used within this `async` block
--> $DIR/issue-70935-complex-spans.rs:18:5
|
Expand Down
1 change: 0 additions & 1 deletion tests/ui/async-await/issues/issue-67893.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ LL | pub async fn run() {
| ------------------ within this `impl Future<Output = ()>`
|
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `MutexGuard<'_, ()>`, which is required by `impl Future<Output = ()>: Send`
= note: required because it captures the following types: `Arc<Mutex<()>>`, `MutexGuard<'_, ()>`, `impl Future<Output = ()>`
note: required because it's used within this `async` fn body
--> $DIR/auxiliary/issue_67893.rs:9:20
|
Expand Down
1 change: 0 additions & 1 deletion tests/ui/async-await/partial-drop-partial-reinit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ fn main() {
//~| NOTE cannot be sent
//~| NOTE bound introduced by
//~| NOTE appears within the type
//~| NOTE captures the following types
}

fn gimme_send<T: Send>(t: T) {
Expand Down
5 changes: 2 additions & 3 deletions tests/ui/async-await/partial-drop-partial-reinit.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,8 @@ LL | async fn foo() {
|
= help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `NotSend`, which is required by `impl Future<Output = ()>: Send`
= note: required because it appears within the type `(NotSend,)`
= note: required because it captures the following types: `(NotSend,)`, `impl Future<Output = ()>`
note: required because it's used within this `async` fn body
--> $DIR/partial-drop-partial-reinit.rs:28:16
--> $DIR/partial-drop-partial-reinit.rs:27:16
|
LL | async fn foo() {
| ________________^
Expand All @@ -25,7 +24,7 @@ LL | | bar().await;
LL | | }
| |_^
note: required by a bound in `gimme_send`
--> $DIR/partial-drop-partial-reinit.rs:14:18
--> $DIR/partial-drop-partial-reinit.rs:13:18
|
LL | fn gimme_send<T: Send>(t: T) {
| ^^^^ required by this bound in `gimme_send`
Expand Down
1 change: 0 additions & 1 deletion tests/ui/coroutine/issue-68112.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ fn test2() {
//~^ ERROR `RefCell<i32>` cannot be shared between threads safely
//~| NOTE `RefCell<i32>` cannot be shared between threads safely
//~| NOTE required for
//~| NOTE captures the following types
//~| NOTE use `std::sync::RwLock` instead
}

Expand Down
1 change: 0 additions & 1 deletion tests/ui/coroutine/issue-68112.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,6 @@ note: required because it appears within the type `impl Coroutine<Return = Arc<R
|
LL | fn make_non_send_coroutine2() -> impl Coroutine<Return = Arc<RefCell<i32>>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: required because it captures the following types: `impl Coroutine<Return = Arc<RefCell<i32>>>`
note: required because it's used within this coroutine
--> $DIR/issue-68112.rs:60:20
|
Expand Down
1 change: 0 additions & 1 deletion tests/ui/coroutine/print/coroutine-print-verbose-1.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ note: required because it appears within the type `Opaque(DefId(0:36 ~ coroutine
|
LL | fn make_non_send_coroutine2() -> impl Coroutine<Return = Arc<RefCell<i32>>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: required because it captures the following types: `Opaque(DefId(0:36 ~ coroutine_print_verbose_1[75fb]::make_non_send_coroutine2::{opaque#0}), [])`
note: required because it's used within this coroutine
--> $DIR/coroutine-print-verbose-1.rs:52:20
|
Expand Down