-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Check that the types in return position impl Trait
in traits are well-formed
#101676
Conversation
r? @lcnr (rust-highfive has picked a reviewer for you, use r? to override) |
&& tcx.def_kind(proj.item_def_id) == DefKind::ImplTraitPlaceholder | ||
&& tcx.impl_trait_in_trait_parent(proj.item_def_id) == fn_def_id.to_def_id() | ||
{ | ||
let bounds = wfcx.tcx().explicit_item_bounds(proj.item_def_id); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do we prove the actual item bounds somewhere else? do we already have a test for
#![feature(return_position_impl_trait_in_trait)]
trait Trait {
fn foo() -> impl Copy { String::new() }
}
this is currently still broken as the following also has the same error 😁
#![feature(return_position_impl_trait_in_trait)]
trait Trait {
fn foo() -> impl Copy { 3u8 }
}
idk if that's already known
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
That is already known, and fixed by another PR
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(#101679 is that issue)
@bors r+ rollup |
Rollup of 9 pull requests Successful merges: - rust-lang#100293 (Add inline-llvm option for disabling/enabling LLVM inlining) - rust-lang#100767 (Remove manual <[u8]>::escape_ascii) - rust-lang#101668 (Suggest pub instead of public for const type item) - rust-lang#101671 (Fix naming format of IEEE 754 standard) - rust-lang#101676 (Check that the types in return position `impl Trait` in traits are well-formed) - rust-lang#101681 (Deny return-position `impl Trait` in traits for object safety) - rust-lang#101693 (Update browser UI test 0 10) - rust-lang#101701 (Rustdoc-Json: Add tests for trait impls.) - rust-lang#101706 (rustdoc: remove no-op `#search`) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This effectively duplicates
check_associated_type_bounds
, but that shouldn't be for long, since we're going to remove it once we refactor RPITITs into regular associated items.Fixes #101663
We don't check
currently, but that's for a different reason, which is that we don't currently check that a trait function's return type is sized (i.e.
fn bar() -> [u8]
also works in a trait).