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

Panic at map_clone.rs:39 #2862

Closed
mmstick opened this issue Jun 20, 2018 · 1 comment · Fixed by #2864
Closed

Panic at map_clone.rs:39 #2862

mmstick opened this issue Jun 20, 2018 · 1 comment · Fixed by #2864
Labels
I-ICE Issue: Clippy panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@mmstick
Copy link

mmstick commented Jun 20, 2018

  • clippy: commit cd9044
  • rustc: nightly as of 2018-06-20

Trying to use clippy on distinst, and getting the following panic:

thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', clippy_lints/src/map_clone.rs:39:52
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:211
   3: std::panicking::default_hook
             at libstd/panicking.rs:227
   4: rustc::util::common::panic_hook
   5: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:515
   6: std::panicking::continue_panic_fmt
             at libstd/panicking.rs:426
   7: rust_begin_unwind
             at libstd/panicking.rs:337
   8: core::panicking::panic_fmt
             at libcore/panicking.rs:92
   9: core::panicking::panic_bounds_check
             at libcore/panicking.rs:60
  10: <clippy_lints::map_clone::Pass as rustc::lint::LateLintPass<'a, 'tcx>>::check_expr
             at clippy_lints/src/map_clone.rs:39
  11: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_expr
  12: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_block
  13: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_expr
  14: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_body
  15: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_nested_body
  16: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_fn
  17: rustc::hir::intravisit::walk_item
  18: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item
  19: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_mod
  20: rustc::hir::intravisit::walk_item
  21: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item
  22: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_mod
  23: rustc::hir::intravisit::walk_item
  24: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item
  25: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_mod
  26: rustc::hir::intravisit::walk_item
  27: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item
  28: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_mod
  29: rustc::hir::intravisit::walk_item
  30: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item
  31: <rustc::lint::context::LateContext<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_mod
  32: rustc::hir::intravisit::walk_crate
  33: rustc::lint::context::check_crate
  34: rustc::util::common::time
  35: rustc::ty::context::tls::enter_context
  36: <std::thread::local::LocalKey<T>>::with
  37: rustc::ty::context::TyCtxt::create_and_enter
  38: rustc_driver::driver::compile_input
  39: rustc_driver::run_compiler_with_pool
  40: <scoped_tls::ScopedKey<T>>::set
  41: syntax::with_globals
  42: rustc_driver::run_compiler
  43: clippy_driver::main
             at src/driver.rs:136
  44: std::rt::lang_start::{{closure}}
             at /checkout/src/libstd/rt.rs:74
  45: std::panicking::try::do_call
             at libstd/rt.rs:59
             at libstd/panicking.rs:310
  46: __rust_maybe_catch_panic
             at libpanic_unwind/lib.rs:105
  47: std::rt::lang_start_internal
             at libstd/panicking.rs:289
             at libstd/panic.rs:392
             at libstd/rt.rs:58
  48: std::rt::lang_start
             at /checkout/src/libstd/rt.rs:74
  49: main
  50: __libc_start_main
  51: _start
query stack during panic:
end of query stack
error: Could not compile `distinst`.
@flip1995 flip1995 added the I-ICE Issue: Clippy panicked, giving an Internal Compilation Error (ICE) ❄️ label Jun 20, 2018
@mati865
Copy link
Contributor

mati865 commented Jun 21, 2018

No so minimal repro with BoolExt borrowed from distinst:

pub trait BoolExt {
    fn map<T, F: Fn() -> T>(&self, action: F) -> Option<T>;
}

impl BoolExt for bool {
    fn map<T, F: Fn() -> T>(&self, action: F) -> Option<T> {
        if *self {
            Some(action())
        } else {
            None
        }
    }
}

fn ice() {
    let a = true;
    a.map(|| false);
}

a.map(|| false) triggers panic here:
https://github.com/rust-lang-nursery/rust-clippy/blob/bb2f6a5011f938023d0ead64a746e0fa82f91ee6/clippy_lints/src/map_clone.rs#L39

Note body.arguments is empty at this point:

Body {
    arguments: [],
    value: expr(59: false),
    is_generator: false
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I-ICE Issue: Clippy panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants