Skip to content

index out of bounds: the len is 0 but the index is 0 (overloaded_calls + generics ?) #15055

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

Closed
Majavar opened this issue Jun 20, 2014 · 1 comment

Comments

@Majavar
Copy link

Majavar commented Jun 20, 2014

The following code generates an ICE:

#![feature(overloaded_calls)]

use std::num::Float;
use std::ops::Fn;

pub struct S<T>;

impl<T: Float> Fn<(T,), T> for S<T> {
    fn call(&self, (t,): (T,)) -> T {
        t + t
    }
}

pub fn main() -> () {
    println!("{}", S(0.0))
}

Here is the backtrace:

$ RUST_BACKTRACE=1 rustc ./main.rs
error: internal compiler error: unexpected failure
note: the compiler hit an unexpected failure path. this is a bug.
note: we would appreciate a bug report: http://doc.rust-lang.org/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' failed at 'index out of bounds: the len is 0 but the index is 0', /rust/src/librustc/lib.rs:1

stack backtrace:
   1:     0x7f61d152a750 - rt::backtrace::imp::write::hbf594bfcbd976c5fKGp::v0.11.0.pre
   2:     0x7f61d1531e80 - failure::on_fail::h6739855b3b361e06Z1p::v0.11.0.pre
   3:     0x7f61d1cfb620 - unwind::begin_unwind_inner::h864a3681c67107aaQRd::v0.11.0.pre
   4:     0x7f61d1cfb0b0 - unwind::begin_unwind_fmt::hd3ad2f53733e11c5jPd::v0.11.0.pre
   5:     0x7f61d1cfb070 - rust_begin_unwind
   6:     0x7f61d1d440c0 - failure::begin_unwind::h6f9ec3a7f2e1757dk2v::v0.11.0.pre
   7:     0x7f61d1d47eb0 - failure::fail_bounds_check::h6fe47fa176892fd2w0v::v0.11.0.pre
   8:     0x7f61d23feb00 - middle::trans::common::find_vtable::hbe052284cb335e25R7i::v0.11.0.pre
   9:     0x7f61d23cbfd0 - middle::trans::meth::trans_method_callee::h58fa59227ba3a74fKrw::v0.11.0.pre
  10:     0x7f61d23f4590 - middle::trans::expr::trans_overloaded_op::closure.63613
  11:     0x7f61d23ca150 - middle::trans::callee::trans_call_inner::hbd8c565da23a49abWTe::v0.11.0.pre
  12:     0x7f61d23ed5d0 - middle::trans::expr::trans_overloaded_op::h1c6e729ace8ee326gxh::v0.11.0.pre
  13:     0x7f61d23d5540 - middle::trans::expr::trans_rvalue_dps_unadjusted::h207b9e37238436aaTmg::v0.11.0.pre
  14:     0x7f61d2392e00 - middle::trans::expr::trans_into::hb921ddb303092b34Nvf::v0.11.0.pre
  15:     0x7f61d23933a0 - middle::trans::controlflow::trans_block::hcea995d6d8ecc6462ic::v0.11.0.pre
  16:     0x7f61d24579c0 - middle::trans::base::trans_closure::h3afd19bf5d2e4f00Bkq::v0.11.0.pre
  17:     0x7f61d2361fc0 - middle::trans::base::trans_fn::h6fadcbab5d002eb2Csq::v0.11.0.pre
  18:     0x7f61d2362bc0 - middle::trans::monomorphize::monomorphic_fn::h4825ebffa29fec37kGb::v0.11.0.pre
  19:     0x7f61d23bedb0 - middle::trans::callee::trans_fn_ref_with_vtables::hc015559cb0b0e1832ve::v0.11.0.pre
  20:     0x7f61d23ba1d0 - middle::trans::callee::trans_fn_ref::h0c9b3835ccc04010pqe::v0.11.0.pre
  21:     0x7f61d23cbfd0 - middle::trans::meth::trans_method_callee::h58fa59227ba3a74fKrw::v0.11.0.pre
  22:     0x7f61d23f46b0 - middle::trans::expr::trans_overloaded_call::closure.63627
  23:     0x7f61d23ca150 - middle::trans::callee::trans_call_inner::hbd8c565da23a49abWTe::v0.11.0.pre
  24:     0x7f61d23d5540 - middle::trans::expr::trans_rvalue_dps_unadjusted::h207b9e37238436aaTmg::v0.11.0.pre
  25:     0x7f61d23d46e0 - middle::trans::expr::trans_unadjusted::h1aed4cecf279ea75NSf::v0.11.0.pre
  26:     0x7f61d2395080 - middle::trans::expr::trans::h67b57614b1975c03Izf::v0.11.0.pre
  27:     0x7f61d2392ca0 - middle::trans::expr::trans_to_lvalue::h60cae01626f0c74eQRf::v0.11.0.pre
  28:     0x7f61d23e2770 - middle::trans::expr::trans_addr_of::hffce5114dcb238e3jeh::v0.11.0.pre
  29:     0x7f61d23d46e0 - middle::trans::expr::trans_unadjusted::h1aed4cecf279ea75NSf::v0.11.0.pre
  30:     0x7f61d2392e00 - middle::trans::expr::trans_into::hb921ddb303092b34Nvf::v0.11.0.pre
  31:     0x7f61d23eb1b0 - middle::trans::expr::trans_adt::hc13c96bd7a794dfcSXg::v0.11.0.pre
  32:     0x7f61d23d5540 - middle::trans::expr::trans_rvalue_dps_unadjusted::h207b9e37238436aaTmg::v0.11.0.pre
  33:     0x7f61d23d46e0 - middle::trans::expr::trans_unadjusted::h1aed4cecf279ea75NSf::v0.11.0.pre
  34:     0x7f61d2395080 - middle::trans::expr::trans::h67b57614b1975c03Izf::v0.11.0.pre
  35:     0x7f61d2392ca0 - middle::trans::expr::trans_to_lvalue::h60cae01626f0c74eQRf::v0.11.0.pre
  36:     0x7f61d23e91c0 - middle::trans::_match::trans_match::h3af1523d93f128c4Flu::v0.11.0.pre
  37:     0x7f61d23d5540 - middle::trans::expr::trans_rvalue_dps_unadjusted::h207b9e37238436aaTmg::v0.11.0.pre
  38:     0x7f61d2392e00 - middle::trans::expr::trans_into::hb921ddb303092b34Nvf::v0.11.0.pre
  39:     0x7f61d23933a0 - middle::trans::controlflow::trans_block::hcea995d6d8ecc6462ic::v0.11.0.pre
  40:     0x7f61d24579c0 - middle::trans::base::trans_closure::h3afd19bf5d2e4f00Bkq::v0.11.0.pre
  41:     0x7f61d2361fc0 - middle::trans::base::trans_fn::h6fadcbab5d002eb2Csq::v0.11.0.pre
  42:     0x7f61d235a9d0 - middle::trans::base::trans_item::h77d5111e85e2fe471Iq::v0.11.0.pre
  43:     0x7f61d2468ca0 - middle::trans::base::trans_crate::h2241c8ee71ebb180yCr::v0.11.0.pre
  44:     0x7f61d2c99d40 - driver::driver::phase_4_translate_to_llvm::h8b6e7a93a6991bed3Wv::v0.11.0.pre
  45:     0x7f61d2c8e080 - driver::driver::compile_input::h6676b0f936d4595a7Bv::v0.11.0.pre
  46:     0x7f61d2d5c690 - driver::run_compiler::h64d024e3859b33d4Jly::v0.11.0.pre
  47:     0x7f61d2d5c5a0 - driver::main_args::closure.99065
  48:     0x7f61d2d71ff0 - task::TaskBuilder<S>::try_future::closure.100143
  49:     0x7f61d2d71c10 - task::TaskBuilder<S>::spawn_internal::closure.100126
  50:     0x7f61d4cfa840 - task::spawn_opts::closure.7265
  51:     0x7f61d1cf81f0 - task::Task::run::closure.5343
  52:     0x7f61d1d5d940 - rust_try
  53:     0x7f61d1cfac40 - unwind::try::h2fd6a632e046fdd3fGd::v0.11.0.pre
  54:     0x7f61d1cf8070 - task::Task::run::h71b51f0ef0858bf9VVc::v0.11.0.pre
  55:     0x7f61d4cfa5e0 - task::spawn_opts::closure.7238
  56:     0x7f61d1cfa200 - thread::thread_start::h4693ff282bb7590akdd::v0.11.0.pre
  57:     0x7f61d0f9dc20 - start_thread
  58:     0x7f61d19b7a89 - clone
  59:                0x0 - <unknown>

$ rustc -v
rustc 0.11.0-pre (311890c 2014-06-20 11:01:33 +0000)
host: x86_64-unknown-linux-gnu

There is no ICE if the function returns t instead of t + t
There is no ICE if I don't use a generic structure (I tried with f64 instead of T)
There is no ICE if I don't use the trait Fn and deactivate the feature overloaded_calls (same function but in impl<T: Float> S<T>)

@alexcrichton
Copy link
Member

Closing as a dupe of #13655 (using the Fn trait as well)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants