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

internal compiler error: unexpected panic #49241

Closed
bronvic opened this issue Mar 21, 2018 · 0 comments
Closed

internal compiler error: unexpected panic #49241

bronvic opened this issue Mar 21, 2018 · 0 comments
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@bronvic
Copy link

bronvic commented Mar 21, 2018

I get this in the console:

error[E0434]: can't capture dynamic environment in a fn item
  --> sroriqa.rs:24:30
   |
24 |     const dimention: usize = lines.count();
   |                              ^^^^^
   |
   = help: use the `|| { ... }` closure form instead

thread 'rustc' panicked at 'LocalTableInContext: key not found', libcore/option.rs:916:5
note: Run with `RUST_BACKTRACE=1` for a backtrace.

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/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.26.0-nightly (75af15ee6 2018-03-20) running on x86_64-unknown-linux-gnu

Here is my code:

use std::fs::File;
use std::io::prelude::*;
use std::path::Path;
use std::error::Error;

fn main() {
    let path = Path::new("input");
    let display = path.display();

    let mut file = match File::open(&path) {
        Err(why) => panic!("couldn't open {}: {}", display, why.description()),
        Ok(file) => file,
    };

    let mut contents = String::new();
    match file.read_to_string(&mut contents) {
        Err(why) => panic!("couldn't read {}: {}", display, why.description()),
        Ok(_) => println!("\"{}\" contains:\n{}", display, contents),
    };

    // Files can end with empty string
    // Remove it and all empty strings that can appear by accident to calculate correct dimension of matrix
    let lines = contents.lines().filter(|x| !x.is_empty());
    const dimention: usize = lines.count();

    println!("Dimention: {:?}", dimention);

    let lines: [str; dimention] = lines.collect();

    for line in lines {
        println!("Line: {}", line);
    }
}

Meta

rustc --version --verbose
rustc 1.26.0-nightly (75af15ee6 2018-03-20)
binary: rustc
commit-hash: 75af15ee6ca0c12b699a17984b033363cd25e9c3
commit-date: 2018-03-20
host: x86_64-unknown-linux-gnu
release: 1.26.0-nightly
LLVM version: 6.0

Backtrace:

error[E0434]: can't capture dynamic environment in a fn item
  --> sroriqa.rs:24:30
   |
24 |     const dimention: usize = lines.count();
   |                              ^^^^^
   |
   = help: use the `|| { ... }` closure form instead

thread 'rustc' panicked at 'LocalTableInContext: key not found', libcore/option.rs:916:5
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::print
             at libstd/sys_common/backtrace.rs:71
             at libstd/sys_common/backtrace.rs:59
   2: std::panicking::default_hook::{{closure}}
             at libstd/panicking.rs:207
   3: std::panicking::default_hook
             at libstd/panicking.rs:223
   4: core::ops::function::Fn::call
   5: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:403
   6: std::panicking::begin_panic_fmt
             at libstd/panicking.rs:349
   7: rust_begin_unwind
             at libstd/panicking.rs:325
   8: core::panicking::panic_fmt
             at libcore/panicking.rs:72
   9: core::option::expect_failed
             at libcore/option.rs:916
  10: <rustc::ty::context::LocalTableInContext<'a, V> as core::ops::index::Index<rustc::hir::HirId>>::index
  11: <rustc_passes::rvalue_promotion::CheckCrateVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_expr
  12: <rustc_passes::rvalue_promotion::CheckCrateVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_nested_body
  13: rustc_passes::rvalue_promotion::rvalue_promotable_map
  14: rustc::dep_graph::graph::DepGraph::with_task_impl
  15: rustc_errors::Handler::track_diagnostics
  16: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  17: rustc::ty::maps::<impl rustc::ty::maps::queries::rvalue_promotable_map<'tcx>>::force
  18: rustc::ty::maps::<impl rustc::ty::maps::queries::rvalue_promotable_map<'tcx>>::try_get
  19: rustc::ty::maps::TyCtxtAt::rvalue_promotable_map
  20: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::rvalue_promotable_map
  21: rustc_passes::rvalue_promotion::const_is_rvalue_promotable_to_static
  22: rustc::dep_graph::graph::DepGraph::with_task_impl
  23: rustc_errors::Handler::track_diagnostics
  24: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  25: rustc::ty::maps::<impl rustc::ty::maps::queries::const_is_rvalue_promotable_to_static<'tcx>>::force
  26: rustc::ty::maps::<impl rustc::ty::maps::queries::const_is_rvalue_promotable_to_static<'tcx>>::try_get
  27: rustc::ty::maps::TyCtxtAt::const_is_rvalue_promotable_to_static
  28: <rustc_passes::rvalue_promotion::CheckCrateVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_expr
  29: <rustc_passes::rvalue_promotion::CheckCrateVisitor<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_nested_body
  30: rustc_passes::rvalue_promotion::rvalue_promotable_map
  31: rustc::dep_graph::graph::DepGraph::with_task_impl
  32: rustc_errors::Handler::track_diagnostics
  33: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  34: rustc::ty::maps::<impl rustc::ty::maps::queries::rvalue_promotable_map<'tcx>>::force
  35: rustc::ty::maps::<impl rustc::ty::maps::queries::rvalue_promotable_map<'tcx>>::try_get
  36: rustc::ty::maps::TyCtxtAt::rvalue_promotable_map
  37: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::rvalue_promotable_map
  38: rustc_borrowck::borrowck::gather_loans::gather_loans_in_fn
  39: rustc_borrowck::borrowck::borrowck
  40: rustc::dep_graph::graph::DepGraph::with_task_impl
  41: rustc_errors::Handler::track_diagnostics
  42: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  43: rustc::ty::maps::<impl rustc::ty::maps::queries::borrowck<'tcx>>::force
  44: rustc::ty::maps::<impl rustc::ty::maps::queries::borrowck<'tcx>>::try_get
  45: rustc::ty::maps::TyCtxtAt::borrowck
  46: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::borrowck
  47: rustc_mir::transform::optimized_mir
  48: rustc::ty::maps::<impl rustc::ty::maps::queries::optimized_mir<'tcx>>::compute_result
  49: rustc::dep_graph::graph::DepGraph::with_task_impl
  50: rustc_errors::Handler::track_diagnostics
  51: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  52: rustc::ty::maps::<impl rustc::ty::maps::queries::optimized_mir<'tcx>>::force
  53: rustc::ty::maps::<impl rustc::ty::maps::queries::optimized_mir<'tcx>>::try_get
  54: rustc::ty::maps::TyCtxtAt::optimized_mir
  55: rustc::ty::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::maybe_optimized_mir
  56: <rustc_mir::interpret::eval_context::EvalContext<'a, 'mir, 'tcx, M>>::load_mir
  57: rustc_mir::interpret::const_eval::eval_body_and_ecx
  58: rustc_mir::interpret::const_eval::const_eval_provider
  59: rustc::ty::maps::<impl rustc::ty::maps::queries::const_eval<'tcx>>::compute_result
  60: rustc::dep_graph::graph::DepGraph::with_task_impl
  61: rustc_errors::Handler::track_diagnostics
  62: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  63: rustc::ty::maps::<impl rustc::ty::maps::queries::const_eval<'tcx>>::force
  64: rustc::ty::maps::<impl rustc::ty::maps::queries::const_eval<'tcx>>::try_get
  65: rustc::ty::maps::TyCtxtAt::const_eval
  66: <rustc::traits::project::AssociatedTypeNormalizer<'a, 'b, 'gcx, 'tcx> as rustc::ty::fold::TypeFolder<'gcx, 'tcx>>::fold_const
  67: rustc::ty::structural_impls::<impl rustc::ty::fold::TypeFoldable<'tcx> for &'tcx rustc::ty::TyS<'tcx>>::super_fold_with
  68: <rustc::traits::project::AssociatedTypeNormalizer<'a, 'b, 'gcx, 'tcx> as rustc::ty::fold::TypeFolder<'gcx, 'tcx>>::fold_ty
  69: rustc::traits::project::normalize
  70: rustc::infer::InferCtxt::partially_normalize_associated_types_in
  71: <rustc_typeck::check::FnCtxt<'a, 'gcx, 'tcx> as rustc_typeck::astconv::AstConv<'gcx, 'tcx>>::normalize_ty
  72: <rustc_typeck::astconv::AstConv<'gcx, 'tcx> + 'o>::ast_ty_to_ty
  73: <rustc_typeck::check::GatherLocalsVisitor<'a, 'gcx, 'tcx> as rustc::hir::intravisit::Visitor<'gcx>>::visit_local
  74: rustc::hir::intravisit::walk_expr
  75: rustc_typeck::check::check_fn
  76: rustc::ty::context::tls::enter
  77: rustc::infer::InferCtxtBuilder::enter
  78: rustc_typeck::check::typeck_tables_of
  79: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::compute_result
  80: rustc::dep_graph::graph::DepGraph::with_task_impl
  81: rustc_errors::Handler::track_diagnostics
  82: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  83: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::force
  84: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::try_get
  85: rustc::ty::maps::TyCtxtAt::typeck_tables_of
  86: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_tables_of<'tcx>>::ensure
  87: rustc::session::Session::track_errors
  88: rustc_typeck::check::typeck_item_bodies
  89: rustc::dep_graph::graph::DepGraph::with_task_impl
  90: rustc_errors::Handler::track_diagnostics
  91: rustc::ty::maps::plumbing::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::cycle_check
  92: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_item_bodies<'tcx>>::force
  93: rustc::ty::maps::<impl rustc::ty::maps::queries::typeck_item_bodies<'tcx>>::try_get
  94: rustc::ty::maps::TyCtxtAt::typeck_item_bodies
  95: rustc::ty::maps::<impl rustc::ty::context::TyCtxt<'a, 'tcx, 'lcx>>::typeck_item_bodies
  96: rustc_typeck::check_crate
  97: <std::thread::local::LocalKey<T>>::with
  98: <std::thread::local::LocalKey<T>>::with
  99: rustc::ty::context::TyCtxt::create_and_enter

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/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.26.0-nightly (75af15ee6 2018-03-20) running on x86_64-unknown-linux-gnu
@estebank estebank added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Mar 21, 2018
kennytm added a commit to kennytm/rust that referenced this issue Mar 22, 2018
…odCall, r=estebank

Fix type_dependent_defs ICE on method calls

Fixes rust-lang#49241.
bors added a commit that referenced this issue Jul 1, 2018
Always check type_dependent_defs

Directly indexing into `type_dependent_defs` has caused multiple ICEs in the past (#46771, #49241, etc.) and is almost certainly responsible for #51798 too. This PR ensures we always check `type_dependent_defs` first, which should prevent any more of these (or at least make them easier to track down).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

2 participants