-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Open
Labels
C-bugCategory: bugCategory: bugS-triageStatus: This issue is waiting on initial triage.Status: This issue is waiting on initial triage.Z-build-stdNightly: build-stdNightly: build-std
Description
Combining a no-harness test with a panic=abort
key in the Cargo.toml leads to duplicate lang item errors if compiled with cargo test -Zbuild-std=core
.
Steps to Reproduce
MRE by @hoodmane from #15058
Make a folder with the following two files:
Cargo.toml
[package]
name = "test"
edition = "2024"
[profile.dev]
panic = "abort"
[[bin]]
name = "test"
path = "main.rs"
main.rs
pub fn main() { }
Bash
rustup install nightly-2025-01-13
cargo +nightly-2025-01-13 build -Zbuild-std
Result
Compiling tmp v0.0.0 (/home/rchatham/Documents/programming/rust-wasm-eh-test-2)
error[E0152]: duplicate lang item in crate `core`: `sized`
|
= note: the lang item is first defined in crate `core` (which `std` depends on)
= note: first definition in `core` loaded from /home/rchatham/Documents/programming/rust-wasm-eh-test-2/target/wasm32-unknown-emscripten/debug/deps/libcore-05cdacbb5559ef58.rlib, /home/rchatham/Documents/programming/rust-wasm-eh-test-2/target/wasm32-unknown-emscripten/debug/deps/libcore-05cdacbb5559ef58.rmeta
= note: second definition in `core` loaded from /home/rchatham/.rustup/toolchains/nightly-2025-01-13-x86_64-unknown-linux-gnu/lib/rustlib/wasm32-unknown-emscripten/lib/libcore-9c3bca22b80bc54a.rlib
For more information about this error, try `rustc --explain E0152`.
error: could not compile `test` (bin "test") due to 1 previous error
Original MRE from the issue author
-
Create a new cargo project with the following contents:
Cargo.toml
:[package] name = "playground" version = "0.1.0" authors = ["Philipp Oppermann <[email protected]>"] edition = "2018" [lib] harness = false [dependencies] [profile.dev] panic = "abort" # it works if this line is removed
src/lib.rs
:#![no_std] #![cfg_attr(test, no_main)] #[cfg(test)] #[panic_handler] fn panic(_info: &core::panic::PanicInfo) -> ! { loop {} }
target.json
:{ "llvm-target": "x86_64-unknown-none", "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", "arch": "x86_64", "target-endian": "little", "target-pointer-width": "64", "target-c-int-width": "32", "os": "none", "executables": true, "linker-flavor": "ld.lld", "linker": "rust-lld", "panic-strategy": "abort", "disable-redzone": true, "features": "-mmx,-sse,+soft-float" }
-
Run
cargo test --target target.json -Z build-std=core --no-run
The following error occurs:
cargo test --target target.json -Z build-std=core Compiling playground v0.1.0 (…) error: duplicate lang item in crate `core`: `bool`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `char`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `str`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `slice`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `slice_u8`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `const_ptr`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `mut_ptr`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `i8`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `i16`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `i32`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `i64`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `i128`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `isize`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `u8`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `u16`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `u32`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `u64`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `u128`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `usize`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `f32`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `f64`. | error: duplicate lang item in crate `core`: `bool`. = note: first defined in crate `core`. | error: duplicate lang item in crate `core`: `sized`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `char`. | error: duplicate lang item in crate `core`: `unsize`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `str`. | error: duplicate lang item in crate `core`: `copy`. | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `slice`. | error: duplicate lang item in crate `core`: `clone`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `slice_u8`. | error: duplicate lang item in crate `core`: `sync`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `const_ptr`. | error: duplicate lang item in crate `core`: `freeze`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `mut_ptr`. | error: duplicate lang item in crate `core`: `drop`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `i8`. | error: duplicate lang item in crate `core`: `coerce_unsized`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `i16`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `dispatch_from_dyn`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `i32`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `add`. | error: duplicate lang item in crate `core`: `i64`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `sub`. | error: duplicate lang item in crate `core`: `i128`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `mul`. | error: duplicate lang item in crate `core`: `isize`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `div`. | error: duplicate lang item in crate `core`: `u8`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `rem`. | error: duplicate lang item in crate `core`: `u16`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `neg`. | error: duplicate lang item in crate `core`: `u32`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `not`. | error: duplicate lang item in crate `core`: `u64`. | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitxor`. | error: duplicate lang item in crate `core`: `u128`. | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitand`. | error: duplicate lang item in crate `core`: `usize`. | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitor`. error: duplicate lang item in crate `core`: `f32`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `shl`. error: duplicate lang item in crate `core`: `f64`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `shr`. error: duplicate lang item in crate `core`: `sized`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `add_assign`. error: duplicate lang item in crate `core`: `unsize`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `sub_assign`. error: duplicate lang item in crate `core`: `copy`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `mul_assign`. error: duplicate lang item in crate `core`: `clone`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `div_assign`. error: duplicate lang item in crate `core`: `sync`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `rem_assign`. error: duplicate lang item in crate `core`: `freeze`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitxor_assign`. error: duplicate lang item in crate `core`: `drop`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitand_assign`. error: duplicate lang item in crate `core`: `coerce_unsized`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitor_assign`. error: duplicate lang item in crate `core`: `dispatch_from_dyn`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `shl_assign`. error: duplicate lang item in crate `core`: `add`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `sub`. error: duplicate lang item in crate `core`: `shr_assign`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `index`. error: duplicate lang item in crate `core`: `mul`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `index_mut`. error: duplicate lang item in crate `core`: `div`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `rem`. error: duplicate lang item in crate `core`: `unsafe_cell`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `neg`. | error: duplicate lang item in crate `core`: `va_list`. = note: first defined in crate `core`. | error: duplicate lang item in crate `core`: `not`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitxor`. | error: duplicate lang item in crate `core`: `deref`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitand`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `deref_mut`. error: duplicate lang item in crate `core`: `bitor`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `receiver`. error: duplicate lang item in crate `core`: `shl`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `fn`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `fn_mut`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `fn_once`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `future_trait`. error: duplicate lang item in crate `core`: `shr`. | = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `add_assign`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `sub_assign`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `mul_assign`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `div_assign`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `rem_assign`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitxor_assign`. error: duplicate lang item in crate `core`: `generator_state`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitand_assign`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `bitor_assign`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `shl_assign`. | = note: first defined in crate `core`. | error: duplicate lang item in crate `core`: `shr_assign`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `index`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `index_mut`. | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `unsafe_cell`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `generator`. error: duplicate lang item in crate `core`: `va_list`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `deref`. | error: duplicate lang item in crate `core`: `unpin`. = note: first defined in crate `core`. | error: duplicate lang item in crate `core`: `deref_mut`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `receiver`. error: duplicate lang item in crate `core`: `pin`. | = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `fn`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `eq`. error: duplicate lang item in crate `core`: `fn_mut`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `fn_once`. | error: duplicate lang item in crate `core`: `partial_ord`. = note: first defined in crate `core`. | error: duplicate lang item in crate `core`: `future_trait`. | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `generator_state`. | error: duplicate lang item in crate `core`: `ord`. | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `generator`. | error: duplicate lang item in crate `core`: `panic`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `unpin`. | error: duplicate lang item in crate `core`: `panic_bounds_check`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `pin`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `eq`. error: duplicate lang item in crate `core`: `panic_info`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `partial_ord`. error: duplicate lang item in crate `core`: `drop_in_place`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `ord`. error: duplicate lang item in crate `core`: `alloc_layout`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `panic`. error: duplicate lang item in crate `core`: `phantom_data`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `panic_bounds_check`. error: duplicate lang item in crate `core`: `manually_drop`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `panic_info`. error: duplicate lang item in crate `core`: `maybe_uninit`. | | = note: first defined in crate `core`. = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `drop_in_place`. | error: duplicate lang item in crate `core`: `align_offset`. = note: first defined in crate `core`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `alloc_layout`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `phantom_data`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `manually_drop`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `maybe_uninit`. | = note: first defined in crate `core`. error: duplicate lang item in crate `core`: `align_offset`. | = note: first defined in crate `core`. error: aborting due to 79 previous errors error: argument should be `&PanicInfo` --> src/lib.rs:6:17 | 6 | fn panic(_info: &core::panic::PanicInfo) -> ! { | ^^^^^^^^^^^^^^^^^^^^^^^ error: Could not compile `playground`. warning: build failed, waiting for other jobs to finish... error: aborting due to 80 previous errors error: Could not compile `playground`. To learn more, run the command again with --verbose.
-
Remove the
panic=abort
line from the Cargo.toml -
Rerun the command from step 2 (
cargo test --target target.json -Z build-std=core --no-run
). It works now.
My Guess
My guess is that the core
library is somehow compiled twice when the panic=abort
line is specified.
Version
cargo 1.39.0-nightly (fe0e5a4 2019-09-04)
torokati44, BSFishy, Qubasa, logistic-bot, gui-baeta and 13 more
Metadata
Metadata
Assignees
Labels
C-bugCategory: bugCategory: bugS-triageStatus: This issue is waiting on initial triage.Status: This issue is waiting on initial triage.Z-build-stdNightly: build-stdNightly: build-std