Skip to content

Passing a mutable reference of an empty tuple to a function causes a panic #40

@coord-e

Description

@coord-e

9e92551

fn next(x: &mut ()) {}

fn main() {
    let mut s = ();
    next(&mut s);
}
thread 'rustc' panicked at src/chc/clause_builder.rs:113:32:
unbound var t1
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: thrust::chc::clause_builder::ClauseBuilder::mapped_var::{{closure}}
             at ./src/chc/clause_builder.rs:113:32
   3: core::option::Option<T>::unwrap_or_else
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/option.rs:978:21
   4: thrust::chc::clause_builder::ClauseBuilder::mapped_var
             at ./src/chc/clause_builder.rs:110:9
   5: <thrust::refine::env::Env<T> as thrust::rty::subtyping::ClauseScope>::build_clause::{{closure}}
             at ./src/refine/env.rs:574:41
   6: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/ops/function.rs:294:13
   7: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/ops/function.rs:294:13
   8: thrust::chc::Term<V>::map_var::{{closure}}
             at ./src/chc.rs:546:38
   9: <alloc::boxed::Box<F,A> as core::ops::function::FnMut<Args>>::call_mut
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/boxed.rs:2023:9
  10: <alloc::boxed::Box<F,A> as core::ops::function::FnMut<Args>>::call_mut
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/boxed.rs:2023:9
  11: core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/ops/function.rs:294:13
  12: <alloc::boxed::Box<F,A> as core::ops::function::FnMut<Args>>::call_mut
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/boxed.rs:2023:9
  13: thrust::chc::Term<V>::subst_var_impl
             at ./src/chc.rs:509:29
  14: thrust::chc::Term<V>::subst_var
             at ./src/chc.rs:539:9
  15: thrust::chc::Term<V>::subst_var_impl
             at ./src/chc.rs:515:36
  16: thrust::chc::Term<V>::subst_var
             at ./src/chc.rs:539:9
  17: thrust::chc::Term<V>::subst_var_impl
             at ./src/chc.rs:519:58
  18: thrust::chc::Term<V>::subst_var
             at ./src/chc.rs:539:9
  19: thrust::chc::Term<V>::map_var
             at ./src/chc.rs:546:9
  20: thrust::chc::Atom<V>::map_var::{{closure}}
             at ./src/chc.rs:1149:49
  21: core::iter::adapters::map::map_try_fold::{{closure}}
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/iter/adapters/map.rs:96:28
  22: core::iter::traits::iterator::Iterator::try_fold
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/iter/traits/iterator.rs:2409:21
  23: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/iter/adapters/map.rs:122:9
  24: <I as alloc::vec::in_place_collect::SpecInPlaceCollect<T,I>>::collect_in_place
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/vec/in_place_collect.rs:366:13
  25: alloc::vec::in_place_collect::<impl alloc::vec::spec_from_iter::SpecFromIter<T,I> for alloc::vec::Vec<T>>::from_iter
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/vec/in_place_collect.rs:253:28
  26: <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/vec/mod.rs:2860:9
  27: core::iter::traits::iterator::Iterator::collect
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/iter/traits/iterator.rs:2003:9
  28: thrust::chc::Atom<V>::map_var
             at ./src/chc.rs:1149:19
  29: thrust::chc::Body<V>::map_var::{{closure}}
             at ./src/chc.rs:1521:51
  30: core::iter::adapters::map::map_try_fold::{{closure}}
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/iter/adapters/map.rs:96:28
  31: core::iter::traits::iterator::Iterator::try_fold
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/iter/traits/iterator.rs:2409:21
  32: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::try_fold
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/iter/adapters/map.rs:122:9
  33: <I as alloc::vec::in_place_collect::SpecInPlaceCollect<T,I>>::collect_in_place
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/vec/in_place_collect.rs:366:13
  34: alloc::vec::in_place_collect::<impl alloc::vec::spec_from_iter::SpecFromIter<T,I> for alloc::vec::Vec<T>>::from_iter
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/vec/in_place_collect.rs:253:28
  35: <alloc::vec::Vec<T> as core::iter::traits::collect::FromIterator<T>>::from_iter
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/alloc/src/vec/mod.rs:2860:9
  36: core::iter::traits::iterator::Iterator::collect
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/core/src/iter/traits/iterator.rs:2003:9
  37: thrust::chc::Body<V>::map_var
             at ./src/chc.rs:1521:20
  38: <thrust::refine::env::Env<T> as thrust::rty::subtyping::ClauseScope>::build_clause
             at ./src/refine/env.rs:573:48
  39: <C as thrust::rty::subtyping::Subtyping>::relate_sub_refined_type
             at ./src/rty/subtyping.rs:139:18
  40: thrust::analyze::basic_block::Analyzer::type_rvalue
             at ./src/analyze/basic_block.rs:457:23
  41: thrust::analyze::basic_block::Analyzer::type_operand
             at ./src/analyze/basic_block.rs:466:9
  42: thrust::analyze::basic_block::Analyzer::type_return
             at ./src/analyze/basic_block.rs:470:9
  43: thrust::analyze::basic_block::Analyzer::analyze_terminator_goto
             at ./src/analyze/basic_block.rs:798:17
  44: thrust::analyze::basic_block::Analyzer::run
             at ./src/analyze/basic_block.rs:1131:9
  45: thrust::analyze::local_def::Analyzer::analyze_basic_blocks
             at ./src/analyze/local_def.rs:663:13
  46: thrust::analyze::local_def::Analyzer::run
             at ./src/analyze/local_def.rs:796:9
  47: thrust::analyze::crate_::Analyzer::analyze_local_defs
             at ./src/analyze/crate_.rs:135:13
  48: thrust::analyze::crate_::Analyzer::run
             at ./src/analyze/crate_.rs:240:9
  49: <thrust_rustc::CompilerCalls as rustc_driver_impl::Callbacks>::after_analysis::{{closure}}
             at ./src/main.rs:54:13
  50: rustc_middle::ty::context::GlobalCtxt::enter::{{closure}}
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_middle/src/ty/context.rs:649:37
  51: rustc_middle::ty::context::tls::enter_context::{{closure}}
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_middle/src/ty/context/tls.rs:82:9
  52: std::thread::local::LocalKey<T>::try_with
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/std/src/thread/local.rs:284:16
  53: std::thread::local::LocalKey<T>::with
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/library/std/src/thread/local.rs:260:9
  54: rustc_middle::ty::context::tls::enter_context
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_middle/src/ty/context/tls.rs:79:9
  55: rustc_middle::ty::context::GlobalCtxt::enter
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_middle/src/ty/context.rs:649:9
  56: rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>::enter
             at /rustc/9c3ad802d9b9633d60d3a74668eb1be819212d34/compiler/rustc_interface/src/queries.rs:71:9
  57: <thrust_rustc::CompilerCalls as rustc_driver_impl::Callbacks>::after_analysis
             at ./src/main.rs:51:9
  58: 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