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

ICE: cargo check panics on toolchain stable-x86_64-unknown-linux-gnu #125160

Closed
bluefish43 opened this issue May 15, 2024 · 7 comments · Fixed by #124686
Closed

ICE: cargo check panics on toolchain stable-x86_64-unknown-linux-gnu #125160

bluefish43 opened this issue May 15, 2024 · 7 comments · Fixed by #124686
Assignees
Labels
A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@bluefish43
Copy link

Code

As the program is very big, I am not sure of what exactly caused the error, so I just included main.rs:

use std::process::ExitCode;

use ansi_term::Color;
use ast::{expr::{AsReferenceExpr, AssignmentExpr, BinaryExpr, BinaryOp, CallExpr, Expr, LiteralExpr, ReturnExpr}, typing::{PrimType, Type, TypeBits}, Block, Collection, Decl, FunctionDecl, Identifier, IntLit, Loc, NamespaceDecl, Prototype};
use check::Checker;

mod ast;
mod check;

fn main() -> ExitCode {
    let mut collection = Collection::new();
    let main_name = collection.add("main".to_string());
    let other_func_name = collection.add("other_func".to_string());
    let my_slot_name = collection.add("my_slot".to_string());
    let my_namespace_name = collection.add("mynamespace".to_string());
    let loc = Loc::new(0, 0, 0);
    let global = &[
        Decl::NamespaceDecl(NamespaceDecl::new(
            loc.clone(),
            Identifier(
                loc.clone(),
                my_namespace_name
            ),
            loc.clone(),
            vec![
                Decl::NamespaceDecl(NamespaceDecl::new(
                    loc.clone(),
                    Identifier(
                        loc.clone(),
                        my_namespace_name
                    ),
                    loc.clone(),
                    vec![
                        Decl::FunctionDecl(FunctionDecl::new(
                            vec![],
                            loc.clone(),
                            Prototype::new(
                                Identifier(loc.clone(), main_name),
                                loc.clone(),
                                vec![],
                                loc.clone(),
                                Box::new(Type::new_primitive(
                                    loc.clone(),
                                    PrimType::new_int(TypeBits::B64)
                                )),
                                false,
                            ),
                            Block::new(
                                loc.clone(),
                                vec![
                                    Expr::SlotDecl(
                                        Identifier(loc.clone(), my_slot_name),
                                        Type::Primitive {
                                            loc: loc.clone(),
                                            ty: PrimType::Int(TypeBits::B64),
                                        }
                                    ),
                                    Expr::Assignment(
                                        AssignmentExpr(BinaryExpr {
                                            left_hand_side: Box::new(Expr::AsReference(
                                                AsReferenceExpr(loc.clone(), Box::new(
                                                    Expr::Variable(Identifier(loc.clone(), my_slot_name))
                                                ))
                                            )),
                                            op: (loc.clone(), BinaryOp::Plus),
                                            right_hand_side: Box::new(Expr::Literal(LiteralExpr::Int(
                                                IntLit(loc.clone(), 420)
                                            )))
                                        })
                                    ),
                                    Expr::Call(
                                        CallExpr::new(
                                            Box::new(
                                                Expr::Variable(Identifier(loc.clone(), main_name)),
                                            ),
                                            vec![]
                                        )
                                    ),
                                    Expr::Return(ReturnExpr {
                                        ret_kw: loc.clone(),
                                        expr: Some(Box::new(
                                            Expr::Variable(Identifier(loc.clone(), my_slot_name)),
                                        )),
                                    }),
                                    // Expr::Return(ReturnExpr {
                                    //     ret_kw: loc.clone(),
                                    //     expr: None,
                                    // }),
                                ],
                                loc.clone(),
                            )
                        ))
                    ],
                    loc.clone()
                )),
            ],
            loc.clone()
        )),
    ];
    let mut checker = Checker::new(collection);
    checker.collect(global);

    let hir_decls = checker.pass_program(global);

    let errors = checker.errors();
    let warnings = checker.warnings();

    let report = || {
        for error in errors {
            eprintln!("{}", error.to_string(checker.collection()))
        }
        for warning in warnings {
            eprintln!("{}", warning.to_string(checker.collection(), true))
        }
        eprintln!("{:#?}", hir_decls);
        if !errors.is_empty() {
            // fail if any error occurred
            eprintln!(
                "Compilation {} with {} error{} and {} warning{}",
                Color::Red.bold().paint("FAILED"),
                errors.len(),
                if errors.len() == 1 {
                    ""
                } else {
                    "s"
                },
                warnings.len(),
                if warnings.len() == 1 {
                    ""
                } else {
                    "s"
                },
            );
    
            ExitCode::FAILURE
        } else {
            // okay otherwise
            eprintln!(
                "Compilation {} with {} error{} and {} warning{}",
                Color::Green.bold().paint("SUCCESS"),
                errors.len(),
                if errors.len() == 1 {
                    ""
                } else {
                    "s"
                },
                warnings.len(),
                if warnings.len() == 1 {
                    ""
                } else {
                    "s"
                },
            );
    
            ExitCode::SUCCESS
        }
    };

    report()
}

Meta

rustc --version --verbose:

rustc 1.77.1 (7cf61ebde 2024-03-27)
binary: rustc
commit-hash: 7cf61ebde7b22796c69757901dd346d0fe70bd97
commit-date: 2024-03-27
host: x86_64-unknown-linux-gnu
release: 1.77.1
LLVM version: 17.0.6

Error output

thread 'rustc' panicked at library/alloc/src/raw_vec.rs:570:5:
capacity overflow
[backtrace]
error: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.77.1 (7cf61ebde 2024-03-27) running on x86_64-unknown-linux-gnu

note: compiler flags: --crate-type bin -C embed-bitcode=no -C debuginfo=2 -C incremental=[REDACTED]

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

query stack during panic:
end of query stack
Backtrace

   0:     0x7f9000ba5d16 - std::backtrace_rs::backtrace::libunwind::trace::h6e4a662bea54ccfc
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/../../backtrace/src/backtrace/libunwind.rs:104:5
   1:     0x7f9000ba5d16 - std::backtrace_rs::backtrace::trace_unsynchronized::hb42b4eb2797d9c0e
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7f9000ba5d16 - std::sys_common::backtrace::_print_fmt::h2bc261f3223f4e4d
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x7f9000ba5d16 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h9cca0343d66d16a8
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7f9000bf8770 - core::fmt::rt::Argument::fmt::h8b666c45176be671
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/core/src/fmt/rt.rs:142:9
   5:     0x7f9000bf8770 - core::fmt::write::h4311bce0ee536615
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/core/src/fmt/mod.rs:1120:17
   6:     0x7f9000b9958f - std::io::Write::write_fmt::h0685c51539d0a0cd
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/io/mod.rs:1846:15
   7:     0x7f9000ba5af4 - std::sys_common::backtrace::_print::h25f19b1d64e81f86
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7f9000ba5af4 - std::sys_common::backtrace::print::h2fb8f70628a241ed
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7f9000ba8887 - std::panicking::default_hook::{{closure}}::h05093fe2e3ef454d
  10:     0x7f9000ba85e9 - std::panicking::default_hook::h5ac38aa38e0086d2
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/panicking.rs:292:9
  11:     0x7f8ffd9ab4dc - std[6985fe5dee7179c0]::panicking::update_hook::<alloc[c678e180b9908eaa]::boxed::Box<rustc_driver_impl[57d634a88fe18246]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x7f9000ba8fd6 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hce488f674cf5618d
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/alloc/src/boxed.rs:2029:9
  13:     0x7f9000ba8fd6 - std::panicking::rust_panic_with_hook::hed79743dc8b4b969
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/panicking.rs:785:13
  14:     0x7f9000ba8ce9 - std::panicking::begin_panic_handler::{{closure}}::ha437b5d58f431abf
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/panicking.rs:651:13
  15:     0x7f9000ba6216 - std::sys_common::backtrace::__rust_end_short_backtrace::hd98e82d5b39ec859
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/sys_common/backtrace.rs:171:18
  16:     0x7f9000ba8a74 - rust_begin_unwind
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/panicking.rs:647:5
  17:     0x7f9000bf4e75 - core::panicking::panic_fmt::hc69c4d258fe11477
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/core/src/panicking.rs:72:14
  18:     0x7f9000be5daf - alloc::raw_vec::capacity_overflow::h2434c0983b86c347
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/alloc/src/raw_vec.rs:570:5
  19:     0x7f8fffbf6db9 - rustc_incremental[61856d840af4295e]::persist::load::setup_dep_graph
  20:     0x7f8fffb4536e - <rustc_interface[be390c89f505a55d]::queries::Queries>::global_ctxt
  21:     0x7f8fffa8ccee - rustc_interface[be390c89f505a55d]::interface::run_compiler::<core[a93eb12aade15298]::result::Result<(), rustc_span[e4948e3682155d21]::ErrorGuaranteed>, rustc_driver_impl[57d634a88fe18246]::run_compiler::{closure#0}>::{closure#0}
  22:     0x7f8fffb34a1f - std[6985fe5dee7179c0]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[be390c89f505a55d]::util::run_in_thread_with_globals<rustc_interface[be390c89f505a55d]::interface::run_compiler<core[a93eb12aade15298]::result::Result<(), rustc_span[e4948e3682155d21]::ErrorGuaranteed>, rustc_driver_impl[57d634a88fe18246]::run_compiler::{closure#0}>::{closure#0}, core[a93eb12aade15298]::result::Result<(), rustc_span[e4948e3682155d21]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[a93eb12aade15298]::result::Result<(), rustc_span[e4948e3682155d21]::ErrorGuaranteed>>
  23:     0x7f8fffb3487d - <<std[6985fe5dee7179c0]::thread::Builder>::spawn_unchecked_<rustc_interface[be390c89f505a55d]::util::run_in_thread_with_globals<rustc_interface[be390c89f505a55d]::interface::run_compiler<core[a93eb12aade15298]::result::Result<(), rustc_span[e4948e3682155d21]::ErrorGuaranteed>, rustc_driver_impl[57d634a88fe18246]::run_compiler::{closure#0}>::{closure#0}, core[a93eb12aade15298]::result::Result<(), rustc_span[e4948e3682155d21]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[a93eb12aade15298]::result::Result<(), rustc_span[e4948e3682155d21]::ErrorGuaranteed>>::{closure#1} as core[a93eb12aade15298]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  24:     0x7f9000bb2675 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h32ae492e80523c39
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/alloc/src/boxed.rs:2015:9
  25:     0x7f9000bb2675 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hd05b2dc112b7a972
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/alloc/src/boxed.rs:2015:9
  26:     0x7f9000bb2675 - std::sys::pal::unix::thread::Thread::new::thread_start::h40e6fd3f8ce15a14
                               at /rustc/7cf61ebde7b22796c69757901dd346d0fe70bd97/library/std/src/sys/pal/unix/thread.rs:108:17
  27:     0x7f8ffaa92bb2 - start_thread
  28:     0x7f8ffab1400c - clone3
  29:                0x0 - <unknown>

@bluefish43 bluefish43 added C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels May 15, 2024
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label May 15, 2024
@matthiaskrgr matthiaskrgr added the A-incr-comp Area: Incremental compilation label May 15, 2024
@bluefish43 bluefish43 changed the title cargo check panics on toolchain stable-x86_64-unknown-linux-gnu ICE: cargo check panics on toolchain stable-x86_64-unknown-linux-gnu May 15, 2024
@bluefish43 bluefish43 closed this as not planned Won't fix, can't repro, duplicate, stale May 15, 2024
@bluefish43 bluefish43 reopened this May 15, 2024
@bluefish43
Copy link
Author

I thought the issue was gone because once I reloaded vscode's window the error did not occur. However, the error arises specifically once I edit something in my source files. So I reopened it.

@bluefish43
Copy link
Author

When I use rustup default nightly the error does not occur, so I guess it's a but in the stable toolchain only.

@lqd
Copy link
Member

lqd commented May 15, 2024

Is the full code available somewhere, so that we can try to reproduce the issue?

@bluefish43
Copy link
Author

Not yet, but I'll try to upload it to GitHub and, if I'm able to, I'll send it here.

@lqd
Copy link
Member

lqd commented May 15, 2024

Great, thank you!

@rustbot label +S-needs-repro

@rustbot rustbot added the S-needs-repro Status: This issue has no reproduction and needs a reproduction to make progress. label May 15, 2024
@bluefish43
Copy link
Author

Okay, so I've uploaded it at this link.

@saethlin saethlin removed the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label May 24, 2024
@saethlin saethlin self-assigned this May 24, 2024
@saethlin saethlin removed the S-needs-repro Status: This issue has no reproduction and needs a reproduction to make progress. label May 24, 2024
@saethlin
Copy link
Member

I believe the PR that I just linked either papers over this problem or at least significantly changes the compiler output. I'm going to close this issue because an issue filed based on the new output would look very different. Unfortunately my PR won't be in stable until 1.80, so even though I'm being all optimistic now, you might see the same ICEs for a while.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-incr-comp Area: Incremental compilation C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants