Skip to content
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

rustc panicked while introducing a base trait #108657

Open
jmmv opened this issue Mar 2, 2023 · 2 comments · May be fixed by #109050
Open

rustc panicked while introducing a base trait #108657

jmmv opened this issue Mar 2, 2023 · 2 comments · May be fixed by #109050
Labels
A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@jmmv
Copy link

jmmv commented Mar 2, 2023

Code

I don't have a minimal repro, but I do have a relatively small diff of the change that triggered the problem. I am hiding it behind a "Details" section, like the backtrace, to keep the overview of the bug report short.

What I am doing, essentially, is adding a new trait to act as the supertrait of other two traits, and moving one common function to it.

Code diff

diff --git a/data/src/db/mod.rs b/data/src/db/mod.rs
index 9d67e43..fab55b8 100644
--- a/data/src/db/mod.rs
+++ b/data/src/db/mod.rs
@@ -5,7 +5,7 @@
 
 use crate::geo::CountryIsoCode;
 use crate::model::*;
-use rest_utils::db::{DbError, DbResult};
+use rest_utils::db::{BareTx, DbError, DbResult};
 use std::collections::BTreeMap;
 use uuid::Uuid;
 #[cfg(test)]
@@ -25,10 +25,7 @@ impl From<ModelError> for DbError {
 
 /// A transaction with high-level operations that deal with our types.
 #[async_trait::async_trait]
-pub(crate) trait DataTx {
-    /// Commits the transaction.  The transaction is rolled back on drop unless this is called.
-    async fn commit(self) -> DbResult<()>;
-
+pub(crate) trait DataTx: BareTx {
     /// Gets a `Site` based on its `site_id`.
     async fn get_site(&mut self, site_id: Uuid) -> DbResult<Site>;
 
diff --git a/data/src/db/pgsql.rs b/data/src/db/pgsql.rs
index 0e24aff..1f9566b 100644
--- a/data/src/db/pgsql.rs
+++ b/data/src/db/pgsql.rs
@@ -7,6 +7,7 @@ use crate::db::{count_as_usize, parse_country_iso_code, parse_url, DataTx, DbErr
 use crate::geo::CountryIsoCode;
 use crate::model::*;
 use futures::TryStreamExt;
+use rest_utils::db::BareTx;
 use sqlx::postgres::PgDatabaseError;
 use sqlx::{Postgres, Row, Transaction};
 use std::collections::BTreeMap;
@@ -56,11 +57,14 @@ impl From<Transaction<'static, Postgres>> for PostgresDataTx {
 }
 
 #[async_trait::async_trait]
-impl DataTx for PostgresDataTx {
+impl BareTx for PostgresDataTx {
     async fn commit(mut self) -> DbResult<()> {
         self.tx.commit().await.map_err(map_sqlx_error)
     }
+}
 
+#[async_trait::async_trait]
+impl DataTx for PostgresDataTx {
     async fn get_site(&mut self, site_id: Uuid) -> DbResult<Site> {
         let query_str = "SELECT title, email FROM sites WHERE site_id = $1";
         let row = sqlx::query(query_str)
diff --git a/data/src/db/sqlite.rs b/data/src/db/sqlite.rs
index 7edc250..f571266 100644
--- a/data/src/db/sqlite.rs
+++ b/data/src/db/sqlite.rs
@@ -9,6 +9,7 @@ use crate::model::*;
 use futures::lock::Mutex;
 use futures::TryStreamExt;
 use rest_utils::db::sqlite::map_sqlx_error;
+use rest_utils::db::BareTx;
 use sqlx::{Row, Sqlite, Transaction};
 use std::collections::BTreeMap;
 use std::convert::{TryFrom, TryInto};
@@ -95,12 +96,15 @@ impl From<Mutex<Transaction<'static, Sqlite>>> for SqliteDataTx {
 }
 
 #[async_trait::async_trait]
-impl DataTx for SqliteDataTx {
-    async fn commit(self) -> DbResult<()> {
+impl BareTx for SqliteDataTx {
+    async fn commit(mut self) -> DbResult<()> {
         let tx = self.tx.into_inner();
         tx.commit().await.map_err(map_sqlx_error)
     }
+}
 
+#[async_trait::async_trait]
+impl DataTx for SqliteDataTx {
     async fn get_site(&mut self, site_id: Uuid) -> DbResult<Site> {
         let mut tx = self.tx.lock().await;
 
diff --git a/data/src/driver/batch.rs b/data/src/driver/batch.rs
index f8c5d8a..df618b1 100644
--- a/data/src/driver/batch.rs
+++ b/data/src/driver/batch.rs
@@ -8,7 +8,7 @@ use crate::abuse::AbusePolicy;
 use crate::db::DataTx;
 use crate::model::{Comment, HttpMethod, Request, VoteCounts, VoteId, VoteReaction};
 use log::warn;
-use rest_utils::db::{Db, DbError};
+use rest_utils::db::{BareTx, Db, DbError};
 use uuid::Uuid;
 
 /// Operations requested in batch for the page.
diff --git a/data/src/driver/count_votes.rs b/data/src/driver/count_votes.rs
index d061f06..dbc9922 100644
--- a/data/src/driver/count_votes.rs
+++ b/data/src/driver/count_votes.rs
@@ -9,7 +9,7 @@ use crate::{
     db::DataTx,
     model::{VoteCounts, VoteId, VoteReaction},
 };
-use rest_utils::db::{Db, DbError};
+use rest_utils::db::{BareTx, Db, DbError};
 use url::Url;
 use uuid::Uuid;
 
diff --git a/data/src/driver/delete_vote.rs b/data/src/driver/delete_vote.rs
index 992ea16..2bf3089 100644
--- a/data/src/driver/delete_vote.rs
+++ b/data/src/driver/delete_vote.rs
@@ -5,7 +5,7 @@
 
 use super::{ensure_path_in_site, Driver, DriverResult};
 use crate::{abuse::AbusePolicy, db::DataTx, model::VoteId};
-use rest_utils::db::Db;
+use rest_utils::db::{BareTx, Db};
 
 impl<A, D> Driver<A, D>
 where
diff --git a/data/src/driver/get_comments.rs b/data/src/driver/get_comments.rs
index a56982b..6f96803 100644
--- a/data/src/driver/get_comments.rs
+++ b/data/src/driver/get_comments.rs
@@ -5,7 +5,7 @@
 
 use super::{ensure_path_in_site, Driver, DriverResult};
 use crate::{abuse::AbusePolicy, db::DataTx, model::Comment};
-use rest_utils::db::Db;
+use rest_utils::db::{BareTx, Db};
 use url::Url;
 use uuid::Uuid;
 
diff --git a/data/src/driver/put_comment.rs b/data/src/driver/put_comment.rs
index a7ebb77..2824344 100644
--- a/data/src/driver/put_comment.rs
+++ b/data/src/driver/put_comment.rs
@@ -5,7 +5,7 @@
 
 use super::{ensure_path_in_site, Driver, DriverResult};
 use crate::{abuse::AbusePolicy, db::DataTx, model::Comment};
-use rest_utils::db::Db;
+use rest_utils::db::{BareTx, Db};
 use uuid::Uuid;
 
 impl<A, D> Driver<A, D>
diff --git a/data/src/driver/put_request.rs b/data/src/driver/put_request.rs
index ff497d9..fddbb3f 100644
--- a/data/src/driver/put_request.rs
+++ b/data/src/driver/put_request.rs
@@ -6,7 +6,7 @@
 use super::{ensure_path_in_site, Driver, DriverResult};
 use crate::{abuse::AbusePolicy, db::DataTx, model::Request};
 use log::warn;
-use rest_utils::db::Db;
+use rest_utils::db::{BareTx, Db};
 use uuid::Uuid;
 
 /// Information computed when storing a request that may be useful to the client.
diff --git a/data/src/driver/put_vote.rs b/data/src/driver/put_vote.rs
index 1acbfc8..a816561 100644
--- a/data/src/driver/put_vote.rs
+++ b/data/src/driver/put_vote.rs
@@ -7,7 +7,7 @@ use super::{ensure_path_in_site, Driver, DriverResult};
 use crate::abuse::AbusePolicy;
 use crate::db::DataTx;
 use crate::model::{Vote, VoteId};
-use rest_utils::db::Db;
+use rest_utils::db::{BareTx, Db};
 
 impl<A, D> Driver<A, D>
 where
diff --git a/rest-utils/src/db/mod.rs b/rest-utils/src/db/mod.rs
index 420331a..61b0713 100644
--- a/rest-utils/src/db/mod.rs
+++ b/rest-utils/src/db/mod.rs
@@ -3,6 +3,8 @@
 
 //! Generic features and types to access a database.
 
+use async_trait::async_trait;
+
 #[cfg(feature = "postgres")]
 pub mod postgres;
 #[cfg(feature = "sqlite")]
@@ -38,15 +40,21 @@ pub enum DbError {
 pub type DbResult<T> = Result<T, DbError>;
 
 /// Abstraction over the database connection.
-#[async_trait::async_trait]
+#[async_trait]
 pub trait Db {
     /// Type of the wrapped sqlx transaction.
     type SqlxTx;
 
     /// Type of the transaction wrapper type to generate.
-    // DO NOT SUBMIT: Add BareTx.
-    type Tx: From<Self::SqlxTx> + Send + Sync + 'static;
+    type Tx: BareTx + From<Self::SqlxTx> + Send + Sync + 'static;
 
     /// Begins a transaction.
     async fn begin(&self) -> DbResult<Self::Tx>;
 }
+
+/// Common operations for all transactions.
+#[async_trait]
+pub trait BareTx {
+    /// Commits the transaction.
+    async fn commit(mut self) -> DbResult<()>;
+}
diff --git a/rest-utils/src/db/postgres.rs b/rest-utils/src/db/postgres.rs
index a887d1f..e2398f3 100644
--- a/rest-utils/src/db/postgres.rs
+++ b/rest-utils/src/db/postgres.rs
@@ -3,7 +3,7 @@
 
 //! Common utilities to interact with a PostgreSQL database.
 
-use crate::db::{Db, DbError, DbResult};
+use crate::db::{BareTx, Db, DbError, DbResult};
 use derivative::Derivative;
 use sqlx::postgres::{PgConnectOptions, PgDatabaseError, PgPool, PgPoolOptions, Postgres};
 use sqlx::Transaction;
@@ -96,7 +96,7 @@ impl PostgresOptions {
 #[derivative(Clone(bound = ""))]
 pub struct PostgresDb<T>
 where
-    T: From<Transaction<'static, Postgres>> + Send + Sync + 'static,
+    T: BareTx + From<Transaction<'static, Postgres>> + Send + Sync + 'static,
 {
     /// Shared PostgreSQL connection pool.  This is a cloneable type that all concurrent
     /// transactions can use it concurrently.
@@ -108,7 +108,7 @@ where
 
 impl<T> PostgresDb<T>
 where
-    T: From<Transaction<'static, Postgres>> + Send + Sync + 'static,
+    T: BareTx + From<Transaction<'static, Postgres>> + Send + Sync + 'static,
 {
     /// Creates a new connection with a set of pool options.
     fn connect_lazy_with_pool_options(opts: PostgresOptions, pool_options: PgPoolOptions) -> Self {
@@ -173,7 +173,7 @@ where
 
 impl<T> Drop for PostgresDb<T>
 where
-    T: From<Transaction<'static, Postgres>> + Send + Sync + 'static,
+    T: BareTx + From<Transaction<'static, Postgres>> + Send + Sync + 'static,
 {
     #[allow(unused_must_use)]
     fn drop(&mut self) {
@@ -190,7 +190,7 @@ where
 #[async_trait::async_trait]
 impl<T> Db for PostgresDb<T>
 where
-    T: From<Transaction<'static, Postgres>> + Send + Sync + 'static,
+    T: BareTx + From<Transaction<'static, Postgres>> + Send + Sync + 'static,
 {
     type SqlxTx = Transaction<'static, Postgres>;
     type Tx = T;
@@ -209,7 +209,7 @@ pub mod testutils {
     /// Creates a new connection to the test database and initializes it.
     pub async fn setup<T>(schema: &str) -> PostgresDb<T>
     where
-        T: From<Transaction<'static, Postgres>> + Send + Sync + 'static,
+        T: BareTx + From<Transaction<'static, Postgres>> + Send + Sync + 'static,
     {
         let _can_fail = env_logger::builder().is_test(true).try_init();
 
diff --git a/rest-utils/src/db/sqlite.rs b/rest-utils/src/db/sqlite.rs
index 5e29399..afd5435 100644
--- a/rest-utils/src/db/sqlite.rs
+++ b/rest-utils/src/db/sqlite.rs
@@ -3,14 +3,13 @@
 
 //! Common utilities to interact with an SQLite database.
 
-use std::marker::PhantomData;
-
-use crate::db::{Db, DbError, DbResult};
+use crate::db::{BareTx, Db, DbError, DbResult};
 use derivative::Derivative;
 use futures::lock::Mutex;
 use futures::TryStreamExt;
 use sqlx::sqlite::{Sqlite, SqlitePool};
 use sqlx::Transaction;
+use std::marker::PhantomData;
 
 /// Takes a raw SQLx error `e` and converts it to our generic error type.
 pub fn map_sqlx_error(e: sqlx::Error) -> DbError {
@@ -28,7 +27,7 @@ pub fn map_sqlx_error(e: sqlx::Error) -> DbError {
 #[derivative(Clone(bound = ""))]
 pub struct SqliteDb<T>
 where
-    T: From<Mutex<Transaction<'static, Sqlite>>> + Send + Sync + 'static,
+    T: BareTx + From<Mutex<Transaction<'static, Sqlite>>> + Send + Sync + 'static,
 {
     /// Shared SQLite connection pool.  This is a cloneable type that all concurrent
     /// transactions can use it concurrently.
@@ -40,7 +39,7 @@ where
 
 impl<T> SqliteDb<T>
 where
-    T: From<Mutex<Transaction<'static, Sqlite>>> + Send + Sync + 'static,
+    T: BareTx + From<Mutex<Transaction<'static, Sqlite>>> + Send + Sync + 'static,
 {
     /// Creates a new connection and sets the database schema.
     pub async fn connect(schema: &str) -> DbResult<Self> {
@@ -62,7 +61,7 @@ where
 #[async_trait::async_trait]
 impl<T> Db for SqliteDb<T>
 where
-    T: From<Mutex<Transaction<'static, Sqlite>>> + Send + Sync + 'static,
+    T: BareTx + From<Mutex<Transaction<'static, Sqlite>>> + Send + Sync + 'static,
 {
     type SqlxTx = Mutex<Transaction<'static, Sqlite>>;
     type Tx = T;
@@ -81,7 +80,7 @@ pub mod testutils {
     /// Initializes the test database with a schema.
     pub async fn setup<T>(schema: &str) -> SqliteDb<T>
     where
-        T: From<Mutex<Transaction<'static, Sqlite>>> + Send + Sync + 'static,
+        T: BareTx + From<Mutex<Transaction<'static, Sqlite>>> + Send + Sync + 'static,
     {
         let _can_fail = env_logger::builder().is_test(true).try_init();

Meta

rustc --version --verbose:

note: rustc 1.67.1 (d5a82bbd2 2023-02-07) running on x86_64-unknown-linux-gnu

note: compiler flags: -C embed-bitcode=no -C debuginfo=2 -C linker=clang -C incremental=[REDACTED] -C link-arg=-fuse-ld=/usr/bin/mold

Error output

thread 'rustc' panicked at 'forcing query with already existing `DepNode`
- query-key: Canonical { max_universe: U0, variables: [], value: ParamEnvAnd { param_env: ParamEnv { caller_bounds: [Binder(TraitPredicate(<<D as rest_utils::db::Db>::Tx as std::convert::From<<D as rest_utils::db::Db>::SqlxTx>>, polarity:Positive), []), Binder(TraitPredicate(<<D as rest_utils::db::Db>::Tx as std::marker::Sized>, polarity:Positive), []), Binder(TraitPredicate(<<D as rest_utils::db::Db>::Tx as db::DataTx>, polarity:Positive), []), Binder(TraitPredicate(<<D as rest_utils::db::Db>::Tx as rest_utils::db::BareTx>, polarity:Positive), []), Binder(TraitPredicate(<D as rest_utils::db::Db>, polarity:Positive), []), Binder(TraitPredicate(<D as std::marker::Sized>, polarity:Positive), [])], reveal: UserFacing, constness: NotConst }, value: Normalize { value: [async fn body@data/src/db/testutils.rs:214:1: 283:2] } } }
- dep-node: type_op_normalize_ty(85797b8fca3b0266-a115299a28e80846)', /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/compiler/rustc_query_system/src/dep_graph/graph.rs:316:9
Backtrace

   Compiling service-data v0.0.0 (/home/jmmv/os/service/data)
thread 'rustc' panicked at 'forcing query with already existing `DepNode`
- query-key: Canonical { max_universe: U0, variables: [], value: ParamEnvAnd { param_env: ParamEnv { caller_bounds: [Binder(TraitPredicate(<<D as rest_utils::db::Db>::Tx as std::convert::From<<D as rest_utils::db::Db>::SqlxTx>>, polarity:Positive), []), Binder(TraitPredicate(<<D as rest_utils::db::Db>::Tx as std::marker::Sized>, polarity:Positive), []), Binder(TraitPredicate(<<D as rest_utils::db::Db>::Tx as db::DataTx>, polarity:Positive), []), Binder(TraitPredicate(<<D as rest_utils::db::Db>::Tx as rest_utils::db::BareTx>, polarity:Positive), []), Binder(TraitPredicate(<D as rest_utils::db::Db>, polarity:Positive), []), Binder(TraitPredicate(<D as std::marker::Sized>, polarity:Positive), [])], reveal: UserFacing, constness: NotConst }, value: Normalize { value: [async fn body@data/src/db/testutils.rs:214:1: 283:2] } } }
- dep-node: type_op_normalize_ty(85797b8fca3b0266-a115299a28e80846)', /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/compiler/rustc_query_system/src/dep_graph/graph.rs:316:9
stack backtrace:
   0:     0x7f27979656fa - std::backtrace_rs::backtrace::libunwind::trace::h79937bc171ada62c
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:     0x7f27979656fa - std::backtrace_rs::backtrace::trace_unsynchronized::h2292bca8571cb919
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f27979656fa - std::sys_common::backtrace::_print_fmt::h9c461f248e4ae90d
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:65:5
   3:     0x7f27979656fa - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::he9fe6bf1a39182e1
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7f27979c825e - core::fmt::write::h032658c119c720d7
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/core/src/fmt/mod.rs:1208:17
   5:     0x7f2797955a85 - std::io::Write::write_fmt::h299fc90dfae41c0d
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/io/mod.rs:1682:15
   6:     0x7f27979654c5 - std::sys_common::backtrace::_print::heb70d25df9937e3f
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:47:5
   7:     0x7f27979654c5 - std::sys_common::backtrace::print::had745c0a76b8b521
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:34:9
   8:     0x7f279796820f - std::panicking::default_hook::{{closure}}::h1ea782cdfa2fd097
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:267:22
   9:     0x7f2797967f4b - std::panicking::default_hook::h1cc3af63455a163c
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:286:9
  10:     0x7f279ac60ab1 - <rustc_driver[5c3b90d1fb3964ba]::DEFAULT_HOOK::{closure#0}::{closure#0} as core[e6a29f2585b3d454]::ops::function::FnOnce<(&core[e6a29f2585b3d454]::panic::panic_info::PanicInfo,)>>::call_once::{shim:vtable#0}
  11:     0x7f2797968a4d - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h6e4950ba7c0fd82a
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/alloc/src/boxed.rs:2032:9
  12:     0x7f2797968a4d - std::panicking::rust_panic_with_hook::h5cafdc4b3bfd5528
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:692:13
  13:     0x7f27979687c9 - std::panicking::begin_panic_handler::{{closure}}::hf31c60f40775892c
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:579:13
  14:     0x7f2797965bac - std::sys_common::backtrace::__rust_end_short_backtrace::h28a5c7be595826cd
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:137:18
  15:     0x7f27979684d2 - rust_begin_unwind
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:575:5
  16:     0x7f27979c4c43 - core::panicking::panic_fmt::h8fa27a0b37dd98b7
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/core/src/panicking.rs:64:14
  17:     0x7f2799f7f2e0 - <rustc_query_system[7dbbccfee5a2d054]::dep_graph::graph::DepGraph<rustc_middle[83f907612b22699d]::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle[83f907612b22699d]::ty::context::TyCtxt, rustc_middle[83f907612b22699d]::infer::canonical::Canonical<rustc_middle[83f907612b22699d]::ty::ParamEnvAnd<rustc_middle[83f907612b22699d]::traits::query::type_op::Normalize<rustc_middle[83f907612b22699d]::ty::Ty>>>, core[e6a29f2585b3d454]::result::Result<&rustc_middle[83f907612b22699d]::infer::canonical::Canonical<rustc_middle[83f907612b22699d]::infer::canonical::QueryResponse<rustc_middle[83f907612b22699d]::ty::Ty>>, rustc_middle[83f907612b22699d]::traits::query::NoSolution>>
  18:     0x7f2799f7d7e9 - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::try_execute_query::<rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt, rustc_query_system[7dbbccfee5a2d054]::query::caches::DefaultCache<rustc_middle[83f907612b22699d]::infer::canonical::Canonical<rustc_middle[83f907612b22699d]::ty::ParamEnvAnd<rustc_middle[83f907612b22699d]::traits::query::type_op::Normalize<rustc_middle[83f907612b22699d]::ty::Ty>>>, core[e6a29f2585b3d454]::result::Result<&rustc_middle[83f907612b22699d]::infer::canonical::Canonical<rustc_middle[83f907612b22699d]::infer::canonical::QueryResponse<rustc_middle[83f907612b22699d]::ty::Ty>>, rustc_middle[83f907612b22699d]::traits::query::NoSolution>>>
  19:     0x7f2799f7cf5d - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::get_query::<rustc_query_impl[e214cefb6de2a99d]::queries::type_op_normalize_ty, rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt>
  20:     0x7f2799f7cea3 - <rustc_query_impl[e214cefb6de2a99d]::Queries as rustc_middle[83f907612b22699d]::ty::query::QueryEngine>::type_op_normalize_ty
  21:     0x7f2799ac6dce - <rustc_middle[83f907612b22699d]::ty::ParamEnvAnd<rustc_middle[83f907612b22699d]::traits::query::type_op::Normalize<rustc_middle[83f907612b22699d]::ty::Ty>> as rustc_trait_selection[945b70100f8dd3ec]::traits::query::type_op::TypeOp>::fully_perform
  22:     0x7f2799a8c1a6 - <&mut <rustc_borrowck[323b14a08f10fded]::type_check::free_region_relations::UniversalRegionRelationsBuilder>::create::{closure#0} as core[e6a29f2585b3d454]::ops::function::FnOnce<(rustc_middle[83f907612b22699d]::ty::Ty,)>>::call_once
  23:     0x7f2799a8ba92 - <alloc[89959c1738bdde42]::vec::Vec<&rustc_middle[83f907612b22699d]::infer::canonical::QueryRegionConstraints> as alloc[89959c1738bdde42]::vec::spec_from_iter::SpecFromIter<&rustc_middle[83f907612b22699d]::infer::canonical::QueryRegionConstraints, core[e6a29f2585b3d454]::iter::adapters::flatten::FlatMap<core[e6a29f2585b3d454]::iter::adapters::chain::Chain<core[e6a29f2585b3d454]::iter::adapters::cloned::Cloned<core[e6a29f2585b3d454]::slice::iter::Iter<rustc_middle[83f907612b22699d]::ty::Ty>>, core[e6a29f2585b3d454]::option::IntoIter<rustc_middle[83f907612b22699d]::ty::Ty>>, core[e6a29f2585b3d454]::iter::adapters::chain::Chain<core[e6a29f2585b3d454]::iter::adapters::chain::Chain<core[e6a29f2585b3d454]::option::IntoIter<&rustc_middle[83f907612b22699d]::infer::canonical::QueryRegionConstraints>, core[e6a29f2585b3d454]::option::IntoIter<&rustc_middle[83f907612b22699d]::infer::canonical::QueryRegionConstraints>>, core[e6a29f2585b3d454]::option::IntoIter<&rustc_middle[83f907612b22699d]::infer::canonical::QueryRegionConstraints>>, <rustc_borrowck[323b14a08f10fded]::type_check::free_region_relations::UniversalRegionRelationsBuilder>::create::{closure#0}>>>::from_iter
  24:     0x7f2799a86b29 - rustc_borrowck[323b14a08f10fded]::type_check::free_region_relations::create
  25:     0x7f2799a7b248 - rustc_borrowck[323b14a08f10fded]::type_check::type_check
  26:     0x7f2799a52165 - rustc_borrowck[323b14a08f10fded]::nll::compute_regions
  27:     0x7f2799a2fdcb - rustc_borrowck[323b14a08f10fded]::do_mir_borrowck
  28:     0x7f2799a2bbf9 - rustc_borrowck[323b14a08f10fded]::mir_borrowck
  29:     0x7f2799a2b0d5 - <rustc_borrowck[323b14a08f10fded]::provide::{closure#0} as core[e6a29f2585b3d454]::ops::function::FnOnce<(rustc_middle[83f907612b22699d]::ty::context::TyCtxt, rustc_span[41a321a6411ba4fa]::def_id::LocalDefId)>>::call_once
  30:     0x7f2799d222ac - <rustc_query_system[7dbbccfee5a2d054]::dep_graph::graph::DepGraph<rustc_middle[83f907612b22699d]::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle[83f907612b22699d]::ty::context::TyCtxt, rustc_span[41a321a6411ba4fa]::def_id::LocalDefId, &rustc_middle[83f907612b22699d]::mir::query::BorrowCheckResult>
  31:     0x7f2799d20fbc - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::try_execute_query::<rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt, rustc_query_system[7dbbccfee5a2d054]::query::caches::VecCache<rustc_span[41a321a6411ba4fa]::def_id::LocalDefId, &rustc_middle[83f907612b22699d]::mir::query::BorrowCheckResult>>
  32:     0x7f279a60640a - <rustc_query_impl[e214cefb6de2a99d]::Queries as rustc_middle[83f907612b22699d]::ty::query::QueryEngine>::mir_borrowck
  33:     0x7f2799b1b811 - <rustc_borrowck[323b14a08f10fded]::type_check::TypeChecker>::prove_closure_bounds
  34:     0x7f2799af6a26 - <rustc_borrowck[323b14a08f10fded]::type_check::TypeChecker>::typeck_mir
  35:     0x7f2799a7b5c3 - rustc_borrowck[323b14a08f10fded]::type_check::type_check
  36:     0x7f2799a52165 - rustc_borrowck[323b14a08f10fded]::nll::compute_regions
  37:     0x7f2799a2fdcb - rustc_borrowck[323b14a08f10fded]::do_mir_borrowck
  38:     0x7f2799a2bbf9 - rustc_borrowck[323b14a08f10fded]::mir_borrowck
  39:     0x7f2799a2b0d5 - <rustc_borrowck[323b14a08f10fded]::provide::{closure#0} as core[e6a29f2585b3d454]::ops::function::FnOnce<(rustc_middle[83f907612b22699d]::ty::context::TyCtxt, rustc_span[41a321a6411ba4fa]::def_id::LocalDefId)>>::call_once
  40:     0x7f2799d222ac - <rustc_query_system[7dbbccfee5a2d054]::dep_graph::graph::DepGraph<rustc_middle[83f907612b22699d]::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle[83f907612b22699d]::ty::context::TyCtxt, rustc_span[41a321a6411ba4fa]::def_id::LocalDefId, &rustc_middle[83f907612b22699d]::mir::query::BorrowCheckResult>
  41:     0x7f2799d20fbc - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::try_execute_query::<rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt, rustc_query_system[7dbbccfee5a2d054]::query::caches::VecCache<rustc_span[41a321a6411ba4fa]::def_id::LocalDefId, &rustc_middle[83f907612b22699d]::mir::query::BorrowCheckResult>>
  42:     0x7f279b41bab6 - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::force_query::<rustc_query_impl[e214cefb6de2a99d]::queries::mir_borrowck, rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt>
  43:     0x7f279b5901d1 - rustc_query_impl[e214cefb6de2a99d]::plumbing::force_from_dep_node::<rustc_query_impl[e214cefb6de2a99d]::queries::mir_borrowck>
  44:     0x7f2798cbb039 - <rustc_query_system[7dbbccfee5a2d054]::dep_graph::graph::DepGraph<rustc_middle[83f907612b22699d]::dep_graph::dep_node::DepKind>>::try_mark_previous_green::<rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt>
  45:     0x7f2799587bf9 - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::get_query::<rustc_query_impl[e214cefb6de2a99d]::queries::type_of, rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt>
  46:     0x7f27996484bc - rustc_hir_analysis[44326659f1d3f01d]::check::check::check_mod_item_types
  47:     0x7f279980877c - <rustc_query_system[7dbbccfee5a2d054]::dep_graph::graph::DepGraph<rustc_middle[83f907612b22699d]::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle[83f907612b22699d]::ty::context::TyCtxt, rustc_span[41a321a6411ba4fa]::def_id::LocalDefId, ()>
  48:     0x7f279980668e - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::try_execute_query::<rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt, rustc_query_system[7dbbccfee5a2d054]::query::caches::VecCache<rustc_span[41a321a6411ba4fa]::def_id::LocalDefId, ()>>
  49:     0x7f279a002a83 - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::get_query::<rustc_query_impl[e214cefb6de2a99d]::queries::check_mod_item_types, rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt>
  50:     0x7f279a2db4c5 - <rustc_middle[83f907612b22699d]::hir::map::Map>::for_each_module::<rustc_hir_analysis[44326659f1d3f01d]::check_crate::{closure#6}::{closure#0}>
  51:     0x7f279915ad42 - rustc_hir_analysis[44326659f1d3f01d]::check_crate
  52:     0x7f279915a98b - rustc_interface[65dcc5dffb099e04]::passes::analysis
  53:     0x7f279a41291f - <rustc_query_system[7dbbccfee5a2d054]::dep_graph::graph::DepGraph<rustc_middle[83f907612b22699d]::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle[83f907612b22699d]::ty::context::TyCtxt, (), core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>
  54:     0x7f279a411a17 - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::try_execute_query::<rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt, rustc_query_system[7dbbccfee5a2d054]::query::caches::DefaultCache<(), core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>>
  55:     0x7f279a411470 - rustc_query_system[7dbbccfee5a2d054]::query::plumbing::get_query::<rustc_query_impl[e214cefb6de2a99d]::queries::analysis, rustc_query_impl[e214cefb6de2a99d]::plumbing::QueryCtxt>
  56:     0x7f2799e241b3 - <rustc_interface[65dcc5dffb099e04]::passes::QueryContext>::enter::<rustc_driver[5c3b90d1fb3964ba]::run_compiler::{closure#1}::{closure#2}::{closure#2}, core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>
  57:     0x7f2799e20733 - <rustc_interface[65dcc5dffb099e04]::interface::Compiler>::enter::<rustc_driver[5c3b90d1fb3964ba]::run_compiler::{closure#1}::{closure#2}, core[e6a29f2585b3d454]::result::Result<core[e6a29f2585b3d454]::option::Option<rustc_interface[65dcc5dffb099e04]::queries::Linker>, rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>
  58:     0x7f2799e1b788 - rustc_span[41a321a6411ba4fa]::with_source_map::<core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>, rustc_interface[65dcc5dffb099e04]::interface::run_compiler<core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>, rustc_driver[5c3b90d1fb3964ba]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
  59:     0x7f2799e1b275 - <scoped_tls[393dd8f8fd825c8d]::ScopedKey<rustc_span[41a321a6411ba4fa]::SessionGlobals>>::set::<rustc_interface[65dcc5dffb099e04]::interface::run_compiler<core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>, rustc_driver[5c3b90d1fb3964ba]::run_compiler::{closure#1}>::{closure#0}, core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>
  60:     0x7f2799e1a862 - std[359ab902947f5f0b]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[65dcc5dffb099e04]::util::run_in_thread_pool_with_globals<rustc_interface[65dcc5dffb099e04]::interface::run_compiler<core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>, rustc_driver[5c3b90d1fb3964ba]::run_compiler::{closure#1}>::{closure#0}, core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>
  61:     0x7f279a513b7a - <<std[359ab902947f5f0b]::thread::Builder>::spawn_unchecked_<rustc_interface[65dcc5dffb099e04]::util::run_in_thread_pool_with_globals<rustc_interface[65dcc5dffb099e04]::interface::run_compiler<core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>, rustc_driver[5c3b90d1fb3964ba]::run_compiler::{closure#1}>::{closure#0}, core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[e6a29f2585b3d454]::result::Result<(), rustc_errors[d24ea2395205e4f0]::ErrorGuaranteed>>::{closure#1} as core[e6a29f2585b3d454]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  62:     0x7f2797972803 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hb77d8d72ebcf79c4
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/alloc/src/boxed.rs:2000:9
  63:     0x7f2797972803 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hc08c3353e1568487
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/alloc/src/boxed.rs:2000:9
  64:     0x7f2797972803 - std::sys::unix::thread::Thread::new::thread_start::h7168e596cd5e5ce6
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys/unix/thread.rs:108:17
  65:     0x7f2797706fd4 - <unknown>
  66:     0x7f279778766c - <unknown>
  67:                0x0 - <unknown>

error: internal compiler error: unexpected panic

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.67.1 (d5a82bbd2 2023-02-07) running on x86_64-unknown-linux-gnu

note: compiler flags: -C embed-bitcode=no -C debuginfo=2 -C linker=clang -C incremental=[REDACTED] -C link-arg=-fuse-ld=/usr/bin/mold

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
#0 [type_op_normalize_ty] normalizing `[async fn body@data/src/db/testutils.rs:214:1: 283:2]`
#1 [mir_borrowck] borrow-checking `db::testutils::test_count_requests_for_page::{closure#0}`
#2 [mir_borrowck] borrow-checking `db::testutils::test_count_requests_for_page`
#3 [type_of] computing type of `db::testutils::test_count_requests_for_page::{opaque#0}`
#4 [check_mod_item_types] checking item types in module `db::testutils`
#5 [analysis] running analysis passes on this crate
end of query stack
error: could not compile `service-data`

@jmmv jmmv added C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Mar 2, 2023
@jmmv
Copy link
Author

jmmv commented Mar 2, 2023

I do not know what the problem is, but I have found a way to workaround it. I removed the following trait bound from all places where it appeared, like this:

-    D::Tx: DataTx + From<D::SqlxTx>,
+    D::Tx: DataTx,

And the compiler stopped crashing. The From bound above was unnecessary here.

Edit: never mind... this seems to have stopped the ICE when running clippy, but not when running test...

@matthiaskrgr matthiaskrgr added the A-incr-comp Area: Incremental compilation label Mar 2, 2023
@jmmv
Copy link
Author

jmmv commented Mar 2, 2023

Hah, I was having trouble narrowing down the problem because I commented most of the code out and was trying to add it back piece by piece... and could not reproduce the issue. I see now the addition of the A-incr-comp label, which I guess explains this odd behavior from the last comment I posted.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants