Skip to content

Compiler unexpectedly panics #52170

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
wagk opened this issue Jul 9, 2018 · 2 comments
Closed

Compiler unexpectedly panics #52170

wagk opened this issue Jul 9, 2018 · 2 comments
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@wagk
Copy link

wagk commented Jul 9, 2018

I was told I should submit a report with regards to an internal compiler error.

I tried this code:

src\lib.rs

mod read;
use read::read;

src\read\mod.rs

mod parse;
use std::io;

#[derive(Debug)]
pub enum UserInput {
    EOF,
    Value(String),
}

pub fn read() -> UserInput {
    let stream = io::stdin();
    let handle = stream.lock();
    read_line(handle).unwrap()
}

fn read_line<R>(mut reader: R) -> io::Result<UserInput>
where
    R: io::BufRead,
{
    let mut input = String::new();
    match reader.read_line(&mut input)? {
        0 => Ok(UserInput::EOF),
        _ => Ok(UserInput::Value(input)),
    }
}

#[cfg(test)]
mod tests {

    use super::*;

    // This might be the wrong way to implement testing input strings
    fn test_string(string: &str) {
        let input = string;
        let result = {
            let buffer = io::BufReader::new(input.as_bytes());
            match read_line(buffer).unwrap() {
                UserInput::EOF => panic!("The input should not be empty"),
                UserInput::Value(output) => output,
            }
        };

        assert_eq!(input, result);
    }

    #[test]
    fn test_read_line() {
        test_string("abcABC123");
        test_string("hello mal world");
        test_string("[]{}'\" ;:()");
        test_string("hello world abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789 (;:() []{}\"'* ;:() []{}\"'* ;:() []{}\"'*)");
    }

}

src\read\parse.rs

extern crate regex;
use self::regex::Regex;

fn tokenize_re(input: &str) -> Vec<String> {
    let mut _tags = Vec::<String>::new();
    let mut _stream = input.chars();

    let _regexpr = r".";

    let _matcher = Regex::new(_regexpr).unwrap();

    _tags
}

#[cfg(test)]
mod tests {

    use super::*;

    #[test]
    fn test_tokenize() {
        let test_tokens = |input: &str, expected: Vec<&str>| {
            tokenize_re(input)
                .iter()
                .zip(expected.iter())
                .inspect(|(&x, &y)| {
                    println!("{}, {}", x, y);
                })
                .for_each(|(x, y)| {
                    assert_eq!(x, y);
                });
        };

        test_tokens("()", vec!["(", ")"]);
        test_tokens("(some)", vec!["(", "some", ")"]);
    }

}

Output

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: (MoveData { move_paths: [MovePath { place: _0 }, MovePath { place: _1 }, MovePath { place: _2 }, MovePath { place: _3 }, MovePath { place: _4 }, MovePath { place: _5 }, MovePath { place: _6 }, MovePath { place: _7 }, MovePath { place: _8 }, MovePath { place: _9 }, MovePath { place: _10 }, MovePath { place: _11 }, MovePath { place: _12 }, MovePath { place: _13 }, MovePath { place: _14 }, MovePath { place: _15 }, MovePath { place: _16 }, MovePath { place: _17 }, MovePath { place: _18 }, MovePath { place: _19 }, MovePath { place: _20 }, MovePath { place: _21 }, MovePath { place: _22 }, MovePath { place: _23 }, MovePath { place: _24 }, MovePath { place: _25 }, MovePath { place: _26 }, MovePath { place: _27 }, MovePath { place: _28 }, MovePath { place: _29 }, MovePath { place: _30 }, MovePath { place: _31 }, MovePath { place: _32 }, MovePath { place: _33 }, MovePath { place: _34 }, MovePath { place: _35 }, MovePath { place: _36 }, MovePath { place: _37 }, MovePath { place: _38 }, MovePath { place: _39 }, MovePath { place: _40 }, MovePath { place: _41 }, MovePath { place: _42 }, MovePath { place: _43 }, MovePath { place: _44 }, MovePath { place: _45 }, MovePath { place: _46 }, MovePath { place: _47 }, MovePath { place: _48 }], moves: [mp8@bb0[10], mp8@bb0[11], mp22@bb0[21], mp23@bb0[21], mp23@bb0[22], mp22@bb0[23], mp28@bb0[34], mp29@bb0[34], mp29@bb2[0], mp28@bb2[1], mp31@bb2[7], mp32@bb2[7], mp3@bb3[0], mp32@bb4[0], mp31@bb4[1], mp27@bb4[2], mp30@bb4[2], mp30@bb4[3], mp27@bb4[4], mp26@bb4[5], mp25@bb4[6], mp18@bb4[9], mp18@bb4[10], mp34@bb4[16], mp34@bb4[17], mp7@bb4[18], mp17@bb4[18], mp33@bb4[18], mp33@bb5[0], mp17@bb5[1], mp7@bb5[2], mp6@bb5[3], mp6@bb6[0], mp35@bb6[1], mp19@bb6[2], mp20@bb6[3], mp21@bb6[4], mp9@bb6[5], mp4@bb6[7], mp3@bb6[8], mp3@bb7[0], mp0@bb7[1]], loc_map: LocationMap { map: [[[], [], [], [], [], [], [], [], [], [], [mo0], [mo1], [], [], [], [], [], [], [], [], [], [mo2, mo3], [mo4], [mo5], [], [], [], [], [], [], [], [], [], [], [mo6, mo7]], [[]], [[mo8], [mo9], [], [], [], [], [], [mo10, mo11]], [[mo12]], [[mo13], [mo14], [mo15, mo16], [mo17], [mo18], [mo19], [mo20], [], [], [mo21], [mo22], [], [], [], [], [], [mo23], [mo24], [mo25, mo26, mo27]], [[mo28], [mo29], [mo30], [mo31]], [[mo32], [mo33], [mo34], [mo35], [mo36], [mo37], [], [mo38], [mo39]], [[mo40], [mo41]]] }, path_map: [[mo41], [], [], [mo12, mo39, mo40], [mo38], [], [mo31, mo32], [mo25, mo30], [mo0, mo1], [mo37], [], [], [], [], [], [], [], [mo26, mo29], [mo21, mo22], [mo34], [mo35], [mo36], [mo2, mo5], [mo3, mo4], [], [mo20], [mo19], [mo15, mo18], [mo6, mo9], [mo7, mo8], [mo16, mo17], [mo10, mo14], [mo11, mo13], [mo27, mo28], [mo23, mo24], [mo33], [], [], [], [], [], [], [], [], [], [], [], [], []], rev_lookup: MovePathLookup { locals: [mp0, mp1, mp2, mp3, mp4, mp5, mp6, mp7, mp8, mp9, mp10, mp11, mp12, mp13, mp14, mp15, mp16, mp17, mp18, mp19, mp20, mp21, mp22, mp23, mp24, mp25, mp26, mp27, mp28, mp29, mp30, mp31, mp32, mp33, mp34, mp35, mp36, mp37, mp38, mp39, mp40, mp41, mp42, mp43, mp44, mp45, mp46, mp47, mp48], projections: {} }, inits: [mp1@slur\src\read\parse.rs:144:26: 146:18 (Deep), mp2@slur\src\read\parse.rs:144:27: 144:35 (Deep), mp3@slur\src\read\parse.rs:144:29: 144:30 (Deep), mp4@slur\src\read\parse.rs:144:33: 144:34 (Deep), mp9@<println macros>:3:18: 3:43 (Deep), mp8@<println macros>:3:18: 3:43 (Deep), mp7@<println macros>:3:18: 3:43 (Deep), mp22@slur\src\read\parse.rs:145:40: 145:41 (Deep), mp23@slur\src\read\parse.rs:145:43: 145:44 (Deep), mp21@<println macros>:3:18: 3:43 (Deep), mp24@<println macros>:3:18: 3:43 (Deep), mp25@slur\src\lib.rs:1:1: 1:1 (Deep), mp26@slur\src\lib.rs:1:1: 1:1 (Deep), mp28@slur\src\read\parse.rs:145:40: 145:41 (Deep), mp29@slur\src\read\parse.rs:145:40: 145:41 (Deep), mp27@<print macros>:2:27: 2:58 (NonPanicPathOnly), mp31@slur\src\read\parse.rs:145:43: 145:44 (Deep), mp32@slur\src\read\parse.rs:145:43: 145:44 (Deep), mp30@<print macros>:2:27: 2:58 (NonPanicPathOnly), mp20@<println macros>:3:18: 3:43 (Deep), mp19@<println macros>:3:18: 3:43 (Deep), mp18@<println macros>:3:18: 3:43 (Deep), mp17@<println macros>:3:18: 3:43 (Deep), mp35@<print macros>:2:27: 2:58 (Deep), mp34@<print macros>:2:27: 2:58 (Deep), mp33@<print macros>:2:27: 2:58 (Deep), mp6@<print macros>:2:27: 2:58 (NonPanicPathOnly), mp5@<print macros>:2:1: 2:60 (NonPanicPathOnly), mp0@slur\src\read\parse.rs:144:37: 146:18 (Deep)], init_loc_map: LocationMap { map: [[[], [in2], [], [in3], [], [], [], [], [in4], [in5], [in6], [], [], [], [], [], [], [], [in7], [], [in8], [in9], [], [], [in10], [], [in11], [], [in12], [], [], [in13], [], [in14], [in15]], [[]], [[], [], [], [], [in16], [], [in17], [in18]], [[]], [[], [], [in19], [], [], [], [], [in20], [in21], [in22], [], [], [], [], [in23], [in24], [in25], [], [in26]], [[], [], [], [in27]], [[], [], [], [], [], [], [in28], [], []], [[], []]] }, init_path_map: [[in28], [in0], [in1], [in2], [in3], [in27], [in26], [in6], [in5], [in4], [], [], [], [], [], [], [], [in22], [in21], [in20], [in19], [in9], [in7], [in8], [in10], [in11], [in12], [in15], [in13], [in14], [in18], [in16], [in17], [in25], [in24], [in23], [], [], [], [], [], [], [], [], [], [], [], [], []] }, [IllegalMove { cannot_move_out_of: IllegalMoveOrigin { span: slur\src\read\parse.rs:144:29: 144:30, kind: BorrowedContent } }])', libcore\result.rs:945: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.27.0 (3eda71b00 2018-06-19) running on x86_64-pc-windows-msvc

note: compiler flags: -C debuginfo=2 -C incremental

note: some of the compiler flags provided by cargo are hidden
@d3lio
Copy link

d3lio commented Jul 9, 2018

I've hit the exact same issue and managed to reproduce it with a smaller example:

let a = (1, vec![1, 2, 3]);
let mut acc = Vec::new();
let mut f: Box<FnMut(&(i32, Vec<i32>))> = Box::new(|(_, mut v)| {
    acc.append(&mut v);
});
f(&a);

Which panics with:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: (MoveData { move_paths: [MovePath { place: _0 }, MovePath { place: _1 }, MovePath { place: _2 }, MovePath { place: _3 }, MovePath { place: _4 }, MovePath { place: _5 }, MovePath { place: _6 }, MovePath { place: _7 }], moves: [mp5@bb0[8], mp6@bb0[8], mp6@bb2[0], mp5@bb2[1], mp7@bb2[2], mp3@bb2[4], mp3@bb3[0], mp3@bb4[0], mp0@bb4[1]], loc_map: LocationMap { map: [[[], [], [], [], [], [], [], [], [mo0, mo1]], [[]], [[mo2], [mo3], [mo4], [], [mo5]], [[mo6]], [[mo7], [mo8]]] }, path_map: [[mo8], [], [], [mo5, mo6, mo7], [], [mo0, mo3], [mo1, mo2], [mo4]], rev_lookup: MovePathLookup { locals: [mp0, mp1, mp2, mp3, mp4, mp5, mp6, mp7], projections: {} }, inits: [mp1@src/main.rs:4:56: 6:6 (Deep), mp2@src/main.rs:4:57: 4:67 (Deep), mp3@src/main.rs:4:61: 4:66 (Deep), mp5@src/main.rs:5:9: 5:12 (Deep), mp7@src/main.rs:5:20: 5:26 (Deep), mp6@src/main.rs:5:20: 5:26 (Deep), mp4@src/main.rs:5:9: 5:27 (NonPanicPathOnly), mp0@src/main.rs:4:69: 6:6 (Deep)], init_loc_map: LocationMap { map: [[[], [in2], [], [in3], [], [], [in4], [in5], [in6]], [[]], [[], [], [], [in7], []], [[]], [[], []]] }, init_path_map: [[in7], [in0], [in1], [in2], [in6], [in3], [in5], [in4]] }, [IllegalMove { cannot_move_out_of: IllegalMoveOrigin { span: src/main.rs:4:61: 4:66, kind: BorrowedContent } }])', libcore/result.rs:945: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.27.0 (3eda71b00 2018-06-19) running on x86_64-unknown-linux-gnu

note: compiler flags: -C codegen-units=1 -C debuginfo=2 --crate-type bin

note: some of the compiler flags provided by cargo are hidden

error: Could not compile `playground`.

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

If you add the & to (_, mut v) it prints a normal error.
I would assume this bug is introduced by allowing the syntax to omit & with #49394 (Pattern matching will now automatically apply dereferences.)

@varkor varkor added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Jul 12, 2018
@estebank
Copy link
Contributor

Current output:

error[E0507]: cannot move out of borrowed content
 --> src/main.rs:4:53
  |
4 | let mut f: Box<FnMut(&(i32, Vec<i32>))> = Box::new(|(_, mut v)| {
  |                                                     ^^^^-----^
  |                                                     |   |
  |                                                     |   data moved here
  |                                                     cannot move out of borrowed content
  |
note: move occurs because `v` has type `std::vec::Vec<i32>`, which does not implement the `Copy` trait
 --> src/main.rs:4:57
  |
4 | let mut f: Box<FnMut(&(i32, Vec<i32>))> = Box::new(|(_, mut v)| {
  |                                                         ^^^^^

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

4 participants