Skip to content

Passing a mutable reference of a closure to a polymorphic function causes a panic #39

@coord-e

Description

@coord-e

9e92551

fn next<F>(f: &mut F) {}

fn main() {
    let mut f = || {};
    next(&mut f);
}
thread 'rustc' panicked at src/analyze/basic_block.rs:622:9:
assertion failed: place.projection.last() == Some(&mir::ProjectionElem::Deref)
stack backtrace:
   0: rust_begin_unwind
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/std/src/panicking.rs:645:5
   1: core::panicking::panic_fmt
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/panicking.rs:72:14
   2: core::panicking::panic
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/panicking.rs:145:5
   3: thrust::analyze::basic_block::Analyzer::elaborate_place_for_borrow
             at ./src/analyze/basic_block.rs:622:9
   4: thrust::analyze::basic_block::Analyzer::mutable_borrow
             at ./src/analyze/basic_block.rs:659:21
   5: thrust::analyze::basic_block::Analyzer::analyze_assignment
             at ./src/analyze/basic_block.rs:694:23
   6: thrust::analyze::basic_block::Analyzer::analyze_statements
             at ./src/analyze/basic_block.rs:732:21
   7: thrust::analyze::basic_block::Analyzer::run
             at ./src/analyze/basic_block.rs:1126:9
   8: thrust::analyze::local_def::Analyzer::analyze_basic_blocks
             at ./src/analyze/local_def.rs:663:13
   9: thrust::analyze::local_def::Analyzer::run
             at ./src/analyze/local_def.rs:796:9
  10: thrust::analyze::crate_::Analyzer::analyze_local_defs
             at ./src/analyze/crate_.rs:135:13
  11: thrust::analyze::crate_::Analyzer::run
             at ./src/analyze/crate_.rs:240:9
  12: <thrust_rustc::CompilerCalls as rustc_driver_impl::Callbacks>::after_analysis::{{closure}}
             at ./src/main.rs:54:13
  13: rustc_middle::ty::context::GlobalCtxt::enter::{{closure}}
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_middle/src/ty/context.rs:649:37
  14: rustc_middle::ty::context::tls::enter_context::{{closure}}
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_middle/src/ty/context/tls.rs:82:9
  15: std::thread::local::LocalKey<T>::try_with
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/std/src/thread/local.rs:284:16
  16: std::thread::local::LocalKey<T>::with
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/std/src/thread/local.rs:260:9
  17: rustc_middle::ty::context::tls::enter_context
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_middle/src/ty/context/tls.rs:79:9
  18: rustc_middle::ty::context::GlobalCtxt::enter
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_middle/src/ty/context.rs:649:9
  19: rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>::enter
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_interface/src/queries.rs:71:9
  20: <thrust_rustc::CompilerCalls as rustc_driver_impl::Callbacks>::after_analysis
             at ./src/main.rs:51:9
  21: rustc_interface::interface::run_compiler::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions