rust-lang / rust-lang/rust

doing some concurrency homework and got a compile-time panic, reporting as requested

Open
#139,887 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

C-bug I-ICE S-needs-repro T-compiler
Dominant language
Rust
Stars
119k
Forks
16.1k
PR merge metrics
PR metrics pending

Description

Code
<code>
use std::thread;
use std::sync::{Mutex, Condvar};

fn main() {

    static SIZE: usize = 5;

    let m_vec = Mutex::new(vec![0,0,0,0,0]);
    let m_count = Mutex::new(0);
    let mut consume = 0;
    let mut produce = 0;
    let cv_empty = Condvar::new();
    let cv_full = Condvar::new();


    thread::scope(|t| {
        t.spawn( || {
            //update the numbers in the vector
            for _ in 0..100 {
                let mut count = m_count.lock().unwrap();

                while *count == 5 {
                    count = cv_full.wait(count).unwrap(); 
                }

                m_vec.lock().unwrap()[produce%5]=produce;
                produce+= 1;
                *count+=1;

                cv_empty.notify_one();
            }
        });
        //print the numbers the vector
        t.spawn( || {
            for _ in 0..100 {
               let mut count = m_count.lock().unwrap();
                
                while *count == 0 {
                    count = cv_empty.wait(count).unwrap();
                }

                println!("{}",m_vec.lock().unwrap()[consume%5]);
                consume+=1;
                *count-=1;

                cv_full.notify_one();
            }
        });
    });

}
Meta

rustc --version --verbose:

<version>
rustc 1.80.1 (3f5fd8dd4 2024-08-06)
binary: rustc
commit-hash: 3f5fd8dd41153bc5fdca9427e9e05be2c767ba23
commit-date: 2024-08-06
host: x86_64-unknown-linux-gnu
release: 1.80.1
LLVM version: 18.1.7
Error output
<output>
thread 'coordinator' panicked at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/compiler/rustc_codegen_ssa/src/back/write.rs:1846:6:
failed to spawn work thread: Os { code: 11, kind: WouldBlock, message: "Resource temporarily unavailable" }

[stack backtrace redacted for concision] 

error: the compiler unexpectedly panicked. this is a bug.

query stack during panic:
end of query stack
thread 'rustc' panicked at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/compiler/rustc_codegen_ssa/src/back/write.rs:2052:17:
/rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/compiler/rustc_codegen_ssa/src/back/write.rs:2052:17: panic during codegen/LLVM phase
Backtrace

<backtrace>
   0:     0x79eea6301f05 - std::backtrace_rs::backtrace::libunwind::trace::h23054e327d0d4b55
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
   1:     0x79eea6301f05 - std::backtrace_rs::backtrace::trace_unsynchronized::h0cc587407d7f7f64
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x79eea6301f05 - std::sys_common::backtrace::_print_fmt::h4feeb59774730d6b
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x79eea6301f05 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hd736fd5964392270
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x79eea6352c4b - core::fmt::rt::Argument::fmt::h105051d8ea1ade1e
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/fmt/rt.rs:165:63
   5:     0x79eea6352c4b - core::fmt::write::hc6043626647b98ea
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/fmt/mod.rs:1168:21
   6:     0x79eea62f6bdf - std::io::Write::write_fmt::h0d24b3e0473045db
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/io/mod.rs:1835:15
   7:     0x79eea6301cde - std::sys_common::backtrace::_print::h62df6fc36dcebfc8
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x79eea6301cde - std::sys_common::backtrace::print::h45eb8174d25a1e76
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x79eea6304719 - std::panicking::default_hook::{{closure}}::haf3f0170eb4f3b53
  10:     0x79eea63044ba - std::panicking::default_hook::hb5d3b27aa9f6dcda
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:298:9
  11:     0x79eea2c150c1 - std[fba9fafec3bdacf8]::panicking::update_hook::<alloc[a325a9cea6fa5e89]::boxed::Box<rustc_driver_impl[ce01f96e2e949677]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x79eea6304e4b - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h2026a29033a1b9f6
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/alloc/src/boxed.rs:2077:9
  13:     0x79eea6304e4b - std::panicking::rust_panic_with_hook::h6b49d59f86ee588c
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:799:13
  14:     0x79eea6304bc4 - std::panicking::begin_panic_handler::{{closure}}::hd4c2f7ed79b82b70
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:664:13
  15:     0x79eea63023c9 - std::sys_common::backtrace::__rust_end_short_backtrace::h2946d6d32d7ea1ad
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:171:18
  16:     0x79eea63048f7 - rust_begin_unwind
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:652:5
  17:     0x79eea634f1e3 - core::panicking::panic_fmt::ha02418e5cd774672
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/panicking.rs:72:14
  18:     0x79eea634f856 - core::result::unwrap_failed::h55f86ada3ace5ed2
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/result.rs:1679:5
  19:     0x79eea4c3d12f - rustc_codegen_ssa[735fc0e7ecd285d]::back::write::spawn_work::<rustc_codegen_llvm[7d5a1ffcd7eaee82]::LlvmCodegenBackend>
  20:     0x79eea4c3ee0d - rustc_codegen_ssa[735fc0e7ecd285d]::back::write::start_executing_work::<rustc_codegen_llvm[7d5a1ffcd7eaee82]::LlvmCodegenBackend>::{closure#5}
  21:     0x79eea4c3de42 - std[fba9fafec3bdacf8]::sys_common::backtrace::__rust_begin_short_backtrace::<<rustc_codegen_llvm[7d5a1ffcd7eaee82]::LlvmCodegenBackend as rustc_codegen_ssa[735fc0e7ecd285d]::traits::backend::ExtraBackendMethods>::spawn_named_thread<rustc_codegen_ssa[735fc0e7ecd285d]::back::write::start_executing_work<rustc_codegen_llvm[7d5a1ffcd7eaee82]::LlvmCodegenBackend>::{closure#5}, core[1a380081440346cb]::result::Result<rustc_codegen_ssa[735fc0e7ecd285d]::back::write::CompiledModules, ()>>::{closure#0}, core[1a380081440346cb]::result::Result<rustc_codegen_ssa[735fc0e7ecd285d]::back::write::CompiledModules, ()>>
  22:     0x79eea4c3dc81 - <<std[fba9fafec3bdacf8]::thread::Builder>::spawn_unchecked_<<rustc_codegen_llvm[7d5a1ffcd7eaee82]::LlvmCodegenBackend as rustc_codegen_ssa[735fc0e7ecd285d]::traits::backend::ExtraBackendMethods>::spawn_named_thread<rustc_codegen_ssa[735fc0e7ecd285d]::back::write::start_executing_work<rustc_codegen_llvm[7d5a1ffcd7eaee82]::LlvmCodegenBackend>::{closure#5}, core[1a380081440346cb]::result::Result<rustc_codegen_ssa[735fc0e7ecd285d]::back::write::CompiledModules, ()>>::{closure#0}, core[1a380081440346cb]::result::Result<rustc_codegen_ssa[735fc0e7ecd285d]::back::write::CompiledModules, ()>>::{closure#2} as core[1a380081440346cb]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  23:     0x79eea630ee3b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hdf5fcef8be77a431
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/alloc/src/boxed.rs:2063:9
  24:     0x79eea630ee3b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h8e8c5ceee46ee198
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/alloc/src/boxed.rs:2063:9
  25:     0x79eea630ee3b - std::sys::pal::unix::thread::Thread::new::thread_start::hb85dbfa54ba503d6
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys/pal/unix/thread.rs:108:17
  26:     0x79ee9f89caa4 - start_thread
                               at ./nptl/pthread_create.c:447:8
  27:     0x79ee9f929c3c - __GI___clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
  28:                0x0 - <unknown>

<beginning of second panic backtrace>

  0:     0x79eea6301f05 - std::backtrace_rs::backtrace::libunwind::trace::h23054e327d0d4b55
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/../../backtrace/src/backtrace/libunwind.rs:116:5
   1:     0x79eea6301f05 - std::backtrace_rs::backtrace::trace_unsynchronized::h0cc587407d7f7f64
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x79eea6301f05 - std::sys_common::backtrace::_print_fmt::h4feeb59774730d6b
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x79eea6301f05 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hd736fd5964392270
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x79eea6352c4b - core::fmt::rt::Argument::fmt::h105051d8ea1ade1e
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/fmt/rt.rs:165:63
   5:     0x79eea6352c4b - core::fmt::write::hc6043626647b98ea
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/core/src/fmt/mod.rs:1168:21
   6:     0x79eea62f6bdf - std::io::Write::write_fmt::h0d24b3e0473045db
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/io/mod.rs:1835:15
   7:     0x79eea6301cde - std::sys_common::backtrace::_print::h62df6fc36dcebfc8
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x79eea6301cde - std::sys_common::backtrace::print::h45eb8174d25a1e76
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x79eea6304719 - std::panicking::default_hook::{{closure}}::haf3f0170eb4f3b53
  10:     0x79eea63044ba - std::panicking::default_hook::hb5d3b27aa9f6dcda
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:298:9
  11:     0x79eea2c150c1 - std[fba9fafec3bdacf8]::panicking::update_hook::<alloc[a325a9cea6fa5e89]::boxed::Box<rustc_driver_impl[ce01f96e2e949677]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x79eea6304e4b - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h2026a29033a1b9f6
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/alloc/src/boxed.rs:2077:9
  13:     0x79eea6304e4b - std::panicking::rust_panic_with_hook::h6b49d59f86ee588c
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/panicking.rs:799:13
  14:     0x79eea30957d5 - std[fba9fafec3bdacf8]::panicking::begin_panic::<alloc[a325a9cea6fa5e89]::string::String>::{closure#0}
  15:     0x79eea3091276 - std[fba9fafec3bdacf8]::sys_common::backtrace::__rust_end_short_backtrace::<std[fba9fafec3bdacf8]::panicking::begin_panic<alloc[a325a9cea6fa5e89]::string::String>::{closure#0}, !>
  16:     0x79eea308d9f1 - std[fba9fafec3bdacf8]::panicking::begin_panic::<alloc[a325a9cea6fa5e89]::string::String>
  17:     0x79eea310e6ed - rustc_middle[ecc07153edf3c281]::util::bug::opt_span_bug_fmt::<rustc_span[4d50fd03223eefaa]::span_encoding::Span>::{closure#0}
  18:     0x79eea30f77ea - rustc_middle[ecc07153edf3c281]::ty::context::tls::with_opt::<rustc_middle[ecc07153edf3c281]::util::bug::opt_span_bug_fmt<rustc_span[4d50fd03223eefaa]::span_encoding::Span>::{closure#0}, !>::{closure#0}
  19:     0x79eea30f766b - rustc_middle[ecc07153edf3c281]::ty::context::tls::with_context_opt::<rustc_middle[ecc07153edf3c281]::ty::context::tls::with_opt<rustc_middle[ecc07153edf3c281]::util::bug::opt_span_bug_fmt<rustc_span[4d50fd03223eefaa]::span_encoding::Span>::{closure#0}, !>::{closure#0}, !>
  20:     0x79eea0cee7d0 - rustc_middle[ecc07153edf3c281]::util::bug::bug_fmt
  21:     0x79eea4e08d30 - <rustc_codegen_llvm[7d5a1ffcd7eaee82]::LlvmCodegenBackend as rustc_codegen_ssa[735fc0e7ecd285d]::traits::backend::CodegenBackend>::join_codegen
  22:     0x79eea4a8d18b - <rustc_interface[c31201428b712578]::queries::Linker>::link
  23:     0x79eea4c12862 - rustc_interface[c31201428b712578]::interface::run_compiler::<core[1a380081440346cb]::result::Result<(), rustc_span[4d50fd03223eefaa]::ErrorGuaranteed>, rustc_driver_impl[ce01f96e2e949677]::run_compiler::{closure#0}>::{closure#1}
  24:     0x79eea4d47869 - std[fba9fafec3bdacf8]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[c31201428b712578]::util::run_in_thread_with_globals<rustc_interface[c31201428b712578]::interface::run_compiler<core[1a380081440346cb]::result::Result<(), rustc_span[4d50fd03223eefaa]::ErrorGuaranteed>, rustc_driver_impl[ce01f96e2e949677]::run_compiler::{closure#0}>::{closure#1}, core[1a380081440346cb]::result::Result<(), rustc_span[4d50fd03223eefaa]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[1a380081440346cb]::result::Result<(), rustc_span[4d50fd03223eefaa]::ErrorGuaranteed>>
  25:     0x79eea4d4766a - <<std[fba9fafec3bdacf8]::thread::Builder>::spawn_unchecked_<rustc_interface[c31201428b712578]::util::run_in_thread_with_globals<rustc_interface[c31201428b712578]::interface::run_compiler<core[1a380081440346cb]::result::Result<(), rustc_span[4d50fd03223eefaa]::ErrorGuaranteed>, rustc_driver_impl[ce01f96e2e949677]::run_compiler::{closure#0}>::{closure#1}, core[1a380081440346cb]::result::Result<(), rustc_span[4d50fd03223eefaa]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[1a380081440346cb]::result::Result<(), rustc_span[4d50fd03223eefaa]::ErrorGuaranteed>>::{closure#2} as core[1a380081440346cb]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  26:     0x79eea630ee3b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::hdf5fcef8be77a431
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/alloc/src/boxed.rs:2063:9
  27:     0x79eea630ee3b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h8e8c5ceee46ee198
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/alloc/src/boxed.rs:2063:9
  28:     0x79eea630ee3b - std::sys::pal::unix::thread::Thread::new::thread_start::hb85dbfa54ba503d6
                               at /rustc/3f5fd8dd41153bc5fdca9427e9e05be2c767ba23/library/std/src/sys/pal/unix/thread.rs:108:17
  29:     0x79ee9f89caa4 - start_thread
                               at ./nptl/pthread_create.c:447:8
  30:     0x79ee9f929c3c - __GI___clone3
                               at ./misc/../sysdeps/unix/sysv/linux/x86_64/clone3.S:78
  31:                0x0 - <unknown>

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the supplied program with rustc 1.80.1 and inspect the reported locations in compiler/rustc_codegen_ssa/src/back/write.rs, especially lines 1846 and 2052. Trace the codegen thread-spawn failure and verify that the example no longer causes an unexpected compiler panic under the reported conditions.

Written by the indexing model from the issue text.

Assessment

Tech stack
rust
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.