-
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
Tracking issue for future-incompatibility lint uncovered_param_in_projection
#124559
Comments
Lazily normalize inside trait ref during orphan check & consider ty params in rigid alias types to be uncovered Fixes rust-lang#99554, fixes rust-lang/types-team#104. Fixes rust-lang#114061. Supersedes rust-lang#100555. Tracking issue for the future compatibility lint: rust-lang#124559. r? lcnr
This change affects diesel in a major feature breaking way 😞 You can reproduce this by using the following steps:
Which produces the following warning:
The relevant impl generated by the proc macro looks like this: impl<Col, Expr>
diesel::insertable::InsertValues<
Col::Table,
super::multi_connection_impl::backend::MultiBackend,
>
for diesel::insertable::DefaultableColumnInsertValue<
diesel::insertable::ColumnInsertValue<Col, Expr>,
>
where
Col: diesel::prelude::Column,
Expr: diesel::prelude::Expression<SqlType = Col::SqlType>,
Expr: diesel::prelude::AppearsOnTable<
diesel::internal::derives::multiconnection::NoFromClause,
>,
Self: diesel::query_builder::QueryFragment<
super::multi_connection_impl::backend::MultiBackend,
>,
diesel::insertable::DefaultableColumnInsertValue<
diesel::insertable::ColumnInsertValue<Col, Expr>,
>: diesel::insertable::InsertValues<
Col::Table,
<PgConnection as diesel::connection::Connection>::Backend,
>,
diesel::insertable::DefaultableColumnInsertValue<
diesel::insertable::ColumnInsertValue<Col, Expr>,
>: diesel::insertable::InsertValues<
Col::Table,
<SqliteConnection as diesel::connection::Connection>::Backend,
>,
{
fn column_names(
&self,
mut out: diesel::query_builder::AstPass<
'_,
'_,
super::multi_connection_impl::backend::MultiBackend,
>,
) -> QueryResult<()> {
use diesel::internal::derives::multiconnection::AstPassHelper;
match out.backend(){
super::backend::MultiBackend::Pg(_) => {
<Self as diesel::insertable::InsertValues<Col::Table, <PgConnection as diesel::connection::Connection> ::Backend>> ::column_names(&self,out.cast_database(super::bind_collector::MultiBindCollector::pg,super::query_builder::MultiQueryBuilder::pg,super::backend::MultiBackend::pg, |l|{
<PgConnection as diesel::internal::derives::multiconnection::MultiConnectionHelper> ::from_any(l).expect("It's possible to downcast the metadata lookup type to the correct type")
},),)
},
super::backend::MultiBackend::Sqlite(_) => {
<Self as diesel::insertable::InsertValues<Col::Table, <SqliteConnection as diesel::connection::Connection> ::Backend>> ::column_names(&self,out.cast_database(super::bind_collector::MultiBindCollector::sqlite,super::query_builder::MultiQueryBuilder::sqlite,super::backend::MultiBackend::sqlite, |l|{
<SqliteConnection as diesel::internal::derives::multiconnection::MultiConnectionHelper> ::from_any(l).expect("It's possible to downcast the metadata lookup type to the correct type")
},),)
},
}
}
} As far as I understand this issue this is the desired behavior that these impls are no longer valid . Removing this behavior is highly problematic for diesel as I do not see any other way to write that impl without major breaking changes to diesel itself. It's even likely that this would force us to remove a large popular feature from diesel itself in response to this breaking change. |
I will look into this later. Note that the current orphan rules are unsound. It's possible that the warning emitted for Let me see what is the case for |
I'm curious as to why |
@fmease Did you already had some time to investigate that. I would like to resolve this before cutting a new diesel release. |
I've pm'ed you. |
@fmease I've filled diesel-rs/diesel#4050 on diesels side to fix this. This was likely not picked up by crates as it is a change that only landed on the master branch yet. It's not in any released diesel version yet. |
See rust-lang/rust#124559 for more info.
The generic Mul for Scalar impl violated orphan rules, but used to be accepted by rustc due to a bug. Replace the impl with separate concrete impls for f32, i32, and u32. See rust-lang/rust#124559 for more info. See rust-lang/rust#124559 for more info.
The generic Mul for Scalar impl violated orphan rules, but used to be accepted by rustc due to a bug. Replace the impl with separate concrete impls for f32, i32, and u32. See rust-lang/rust#124559 for more info.
The generic Mul for Scalar impl violated orphan rules, but used to be accepted by rustc due to a bug. Replace the impl with separate concrete impls for f32, i32, and u32. See rust-lang/rust#124559 for more info.
uncovered_param_in_projection
uncovered_param_in_projection
The generic Mul for Scalar impl violated orphan rules, but used to be accepted by rustc due to a bug. Replace the impl with separate concrete impls for f32, i32, and u32. See rust-lang/rust#124559 for more info.
The generic Mul for Scalar impl violated orphan rules, but used to be accepted by rustc due to a bug. Replace the impl with separate concrete impls for f32, i32, and u32. See rust-lang/rust#124559 for more info.
This is a tracking issue for the lint
uncovered_param_in_projection
which was added in #117164.The lint detects a violation of one of Rust's orphan rules for foreign trait implementations that concerns the use of type parameters inside trait associated type paths ("projections") whose output may not be a local type that is mistakenly considered to "cover" said parameters which is unsound and which will be rejected by a future version of the compiler.
Originally reported in #99554 (kept open) and tracked in rust-lang/types-team#104.
Example
This will produce:
The text was updated successfully, but these errors were encountered: