Skip to content

ICE: 'rustc' panicked at 'index out of bounds: the len is 0 but the index is 0', ../src/libcollections/vec.rs:1362 #37697

Closed
@ehiggs

Description

@ehiggs

Writing a csv reader using only peg:

Cargo.toml:

[package]
name = "peg-reader"
version = "0.1.0"
authors = ["Ewan Higgs <ewan_higgs@yahoo.co.uk>"]

[[bin]]
name = "pegreader"

[dependencies]
peg = "0.3.0"

src/pegreader.rs:

#![feature(plugin)]
#![plugin(peg_syntax_ext)]

use std::io::BufReader;
use std::io::BufRead;
use std::fs::File;

peg! parser(r#"
#[pub]
record -> Vec<String>
    = field ** ","
field -> String
      = "\"" f:([]* {match_str.to_string() })  "\"" { f }
      / f:([^,\n]* { match_str.to_string() }) [,\n] { f }
"#);

fn main() {
    let fpath = ::std::env::args().nth(1).unwrap();
    let f = File::open(fpath).unwrap();
    let file = BufReader::new(&f);
    let mut sum = 0;
    for line in file.lines() {
        let l = line.unwrap();
        let rec = parser::record(&l).unwrap();
        sum += rec.len();
    }
    println!("{}", sum);
}

#[test]
fn test_hello() {
    assert_eq!(parser::record(r#"hello,","," ",world,"!""#).unwrap().len(), 5);
}

Yields the following ICE:

$ RUST_BACKTRACE=1 cargo test
   Compiling peg-reader v0.1.0 (file:///Users/ehiggs/src/csv-game/rust/peg-reader)
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: run with `RUST_BACKTRACE=1` for a backtrace

thread 'rustc' panicked at 'index out of bounds: the len is 0 but the index is 0', ../src/libcollections/vec.rs:1362
stack backtrace:
   1:        0x11118999a - std::sys::imp::backtrace::tracing::imp::write::he3d1bfbdbf113480
   2:        0x11119975f - std::panicking::default_hook::{{closure}}::h575f1b40d2e88f07
   3:        0x111196825 - std::panicking::default_hook::h3d5dccce8125d0cf
   4:        0x111196f56 - std::panicking::rust_panic_with_hook::h00b81bb3dcbd51f2
   5:        0x111196df4 - std::panicking::begin_panic::ha6a0d553db9869ff
   6:        0x111196d12 - std::panicking::begin_panic_fmt::h24d113aee3ee4081
   7:        0x111196c77 - rust_begin_unwind
   8:        0x1111d9b00 - core::panicking::panic_fmt::he441b2ea2036b98a
   9:        0x1111d9a78 - core::panicking::panic_bounds_check::h344fb76ff622c3e5
  10:        0x10cf84e80 - <core::iter::Map<I, F> as core::iter::iterator::Iterator>::next::h820c95c1b3aa8208
  11:        0x10cfa41f3 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::match_expr::hefe82ecad27ae537
  12:        0x10cf9637f - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  13:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  14:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  15:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  16:        0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  17:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  18:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  19:        0x10cf96872 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  20:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  21:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  22:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  23:        0x10cfa5796 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::expr_into_pattern::h2f3f166d14a49580
  24:        0x10cfec431 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  25:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  26:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  27:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  28:        0x10cfecf08 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::{{closure}}::hd672fe9a3991fc90
  29:        0x10cf95de3 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  30:        0x10cf98f8e - rustc_mir::build::expr::stmt::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::stmt_expr::h2f8718954681358b
  31:        0x10cf9926a - rustc_mir::build::expr::stmt::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::stmt_expr::h2f8718954681358b
  32:        0x10cfec25a - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  33:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  34:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  35:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  36:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  37:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  38:        0x10cfa5796 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::expr_into_pattern::h2f3f166d14a49580
  39:        0x10cfec431 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  40:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  41:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  42:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  43:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  44:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  45:        0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  46:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  47:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  48:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  49:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  50:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  51:        0x10cfa5796 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::expr_into_pattern::h2f3f166d14a49580
  52:        0x10cfec431 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  53:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  54:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  55:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  56:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  57:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  58:        0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  59:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  60:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  61:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  62:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  63:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  64:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  65:        0x10cfa4b9c - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::match_expr::hefe82ecad27ae537
  66:        0x10cf9637f - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  67:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  68:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  69:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  70:        0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  71:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  72:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  73:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  74:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  75:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  76:        0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  77:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  78:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  79:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  80:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  81:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  82:        0x10cfa5796 - rustc_mir::build::matches::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::expr_into_pattern::h2f3f166d14a49580
  83:        0x10cfec431 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  84:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  85:        0x10cf963d6 - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  86:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  87:        0x10cf95eef - rustc_mir::build::expr::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into_expr::h2896085537a60f3b
  88:        0x10cf9a77a - rustc_mir::build::into::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::into::ha3949a4528b75114
  89:        0x10cfec657 - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::{{closure}}::h49620e9305d7c725
  90:        0x10cf8ceef - rustc_mir::build::block::<impl rustc_mir::build::Builder<'a, 'gcx, 'tcx>>::ast_block::hd2f303de76753ca5
  91:        0x10cf8c9fd - rustc_mir::build::Builder::args_and_body::hc6fc40bd82a1524e
  92:        0x10cfc116e - <rustc_mir::mir_map::BuildMir<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_fn::hb919fc4d5273e06e
  93:        0x10cfbb39f - <rustc_mir::mir_map::BuildMir<'a, 'tcx> as rustc::hir::intravisit::Visitor<'tcx>>::visit_item::h5f0bf930f7d30b20
  94:        0x10cfb6e7f - rustc_mir::mir_map::build_mir_for_crate::h4bf661fe4fbb6129
  95:        0x10cab8b82 - rustc_driver::driver::phase_3_run_analysis_passes::{{closure}}::hb062c53ab7b33bac
  96:        0x10ca84616 - rustc_driver::driver::phase_3_run_analysis_passes::h016090d638ff1d7f
  97:        0x10ca775b5 - rustc_driver::driver::compile_input::h21840cdf516c3ab1
  98:        0x10caa1d39 - rustc_driver::run_compiler::h81a62653df4e7b03
  99:        0x10c9e0d18 - std::panicking::try::do_call::h54deb93462da3a7f
  100:        0x111199d1a - __rust_maybe_catch_panic
 ... <frames omitted>

error: Could not compile `peg-reader`.

To learn more, run the command again with --verbose.

Rustc version:

$ rustc --version --verbose
rustc 1.14.0-nightly (cae6ab1c4 2016-11-05)
binary: rustc
commit-hash: cae6ab1c458ade22b4c228fcd4195917c96e2465
commit-date: 2016-11-05
host: x86_64-apple-darwin
release: 1.14.0-nightly
LLVM version: 3.9

I wasn't sure if it should compile, but I didn't expect an ICE.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-MIRArea: Mid-level IR (MIR) - https://blog.rust-lang.org/2016/04/19/MIR.htmlI-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions