-
Notifications
You must be signed in to change notification settings - Fork 91
Open
Description
c-variadic:
./tests/codegen/c-variadic.rs
// ignore-wasm32-bare compiled with panic=abort by default
// compile-flags: -C no-prepopulate-passes -Copt-level=0
//
#![crate_type = "lib"]
#![feature(c_variadic)]
#![feature(c_unwind)]
#![no_std]
use core::ffi::VaList;
extern "C" {
fn foreign_c_variadic_0(_: i32, ...);
fn foreign_c_variadic_1(_: VaList, ...);
}
pub unsafe extern "C" fn use_foreign_c_variadic_0() {
// Ensure that we correctly call foreign C-variadic functions.
// CHECK: call void (i32, ...) @foreign_c_variadic_0([[PARAM:i32( signext)?]] 0)
foreign_c_variadic_0(0);
// CHECK: call void (i32, ...) @foreign_c_variadic_0([[PARAM]] 0, [[PARAM]] 42)
foreign_c_variadic_0(0, 42i32);
// CHECK: call void (i32, ...) @foreign_c_variadic_0([[PARAM]] 0, [[PARAM]] 42, [[PARAM]] 1024)
foreign_c_variadic_0(0, 42i32, 1024i32);
// CHECK: call void (i32, ...) @foreign_c_variadic_0([[PARAM]] 0, [[PARAM]] 42, [[PARAM]] 1024, [[PARAM]] 0)
foreign_c_variadic_0(0, 42i32, 1024i32, 0i32);
}
// Ensure that we do not remove the `va_list` passed to the foreign function when
// removing the "spoofed" `VaListImpl` that is used by Rust defined C-variadics.
pub unsafe extern "C" fn use_foreign_c_variadic_1_0(ap: VaList) {
// CHECK: call void ({{.*}}, ...) @foreign_c_variadic_1({{.*}} %ap)
foreign_c_variadic_1(ap);
}
pub unsafe extern "C" fn use_foreign_c_variadic_1_1(ap: VaList) {
// CHECK: call void ({{.*}}, ...) @foreign_c_variadic_1({{.*}} %ap, [[PARAM]] 42)
foreign_c_variadic_1(ap, 42i32);
}
pub unsafe extern "C" fn use_foreign_c_variadic_1_2(ap: VaList) {
// CHECK: call void ({{.*}}, ...) @foreign_c_variadic_1({{.*}} %ap, [[PARAM]] 2, [[PARAM]] 42)
foreign_c_variadic_1(ap, 2i32, 42i32);
}
pub unsafe extern "C" fn use_foreign_c_variadic_1_3(ap: VaList) {
// CHECK: call void ({{.*}}, ...) @foreign_c_variadic_1({{.*}} %ap, [[PARAM]] 2, [[PARAM]] 42, [[PARAM]] 0)
foreign_c_variadic_1(ap, 2i32, 42i32, 0i32);
}
// Ensure that `va_start` and `va_end` are properly injected.
#[no_mangle]
pub unsafe extern "C" fn c_variadic(n: i32, mut ap: ...) -> i32 {
// CHECK: call void @llvm.va_start
let mut sum = 0;
for _ in 0..n {
sum += ap.arg::<i32>();
}
sum
// CHECK: call void @llvm.va_end
}
// Ensure that we generate the correct `call` signature when calling a Rust
// defined C-variadic.
pub unsafe fn test_c_variadic_call() {
// CHECK: call [[RET:(signext )?i32]] (i32, ...) @c_variadic([[PARAM]] 0)
c_variadic(0);
// CHECK: call [[RET]] (i32, ...) @c_variadic([[PARAM]] 0, [[PARAM]] 42)
c_variadic(0, 42i32);
// CHECK: call [[RET]] (i32, ...) @c_variadic([[PARAM]] 0, [[PARAM]] 42, [[PARAM]] 1024)
c_variadic(0, 42i32, 1024i32);
// CHECK: call [[RET]] (i32, ...) @c_variadic([[PARAM]] 0, [[PARAM]] 42, [[PARAM]] 1024, [[PARAM]] 0)
c_variadic(0, 42i32, 1024i32, 0i32);
}thread 'rustc' panicked at 'not implemented', src/intrinsic/mod.rs:141:21
stack backtrace:
0: 0x7f74e2d67e11 - std::backtrace_rs::backtrace::libunwind::trace::h184786643c1f8146
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
1: 0x7f74e2d67e11 - std::backtrace_rs::backtrace::trace_unsynchronized::h10cef21dd42edd42
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
2: 0x7f74e2d67e11 - std::sys_common::backtrace::_print_fmt::hca8722c6f82eccd9
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/sys_common/backtrace.rs:65:5
3: 0x7f74e2d67e11 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h4b170c65cdf95c48
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/sys_common/backtrace.rs:44:22
4: 0x7f74e2dc94bf - core::fmt::rt::Argument::fmt::h7e50834cab28e102
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/core/src/fmt/rt.rs:138:9
5: 0x7f74e2dc94bf - core::fmt::write::h8bd64fe81f89dd81
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/core/src/fmt/mod.rs:1094:21
6: 0x7f74e2d5a977 - std::io::Write::write_fmt::hc75a842b3ecac8bc
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/io/mod.rs:1714:15
7: 0x7f74e2d67c25 - std::sys_common::backtrace::_print::hdb7a31bd8c54eb49
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/sys_common/backtrace.rs:47:5
8: 0x7f74e2d67c25 - std::sys_common::backtrace::print::hbcf968a4222dc0b5
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/sys_common/backtrace.rs:34:9
9: 0x7f74e2d6a9d3 - std::panicking::default_hook::{{closure}}::h02987b13cfa1387d
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/panicking.rs:269:22
10: 0x7f74e2d6a764 - std::panicking::default_hook::hcb3fd44404995c49
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/panicking.rs:288:9
11: 0x7f74e5fabd6b - <rustc_driver_impl[7175fdba515aac6e]::install_ice_hook::{closure#0} as core[baaa20f768102eef]::ops::function::FnOnce<(&core[baaa20f768102eef]::panic::panic_info::PanicInfo,)>>::call_once::{shim:vtable#0}
12: 0x7f74e2d6b1fe - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::hec1e31de726d1657
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/alloc/src/boxed.rs:2007:9
13: 0x7f74e2d6b1fe - std::panicking::rust_panic_with_hook::h223f39091438ac61
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/panicking.rs:709:13
14: 0x7f74e2d6af41 - std::panicking::begin_panic_handler::{{closure}}::h4644cfd73fc4a198
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/panicking.rs:595:13
15: 0x7f74e2d68246 - std::sys_common::backtrace::__rust_end_short_backtrace::hfbaa4867b3658893
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/sys_common/backtrace.rs:151:18
16: 0x7f74e2d6acd2 - rust_begin_unwind
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/panicking.rs:593:5
17: 0x7f74e2dc5743 - core::panicking::panic_fmt::hbd4e3abda5ea01cd
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/core/src/panicking.rs:67:14
18: 0x7f74e2dc57d3 - core::panicking::panic::h30709005efaa563b
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/core/src/panicking.rs:117:5
19: 0x7f74d8079a75 - rustc_codegen_gcc::intrinsic::<impl rustc_codegen_ssa::traits::intrinsic::IntrinsicCallMethods for rustc_codegen_gcc::builder::Builder>::codegen_intrinsic_call::h3ca3394648f12282
20: 0x7f74d81af6b5 - rustc_codegen_ssa::mir::intrinsic::<impl rustc_codegen_ssa::mir::FunctionCx<Bx>>::codegen_intrinsic_call::h5e2d44caa5e7f5d8
21: 0x7f74d81a3c53 - rustc_codegen_ssa::mir::block::<impl rustc_codegen_ssa::mir::FunctionCx<Bx>>::codegen_terminator::hdaf13f128cded52e
22: 0x7f74d819e56f - rustc_codegen_ssa::mir::codegen_mir::h3ad98a26028d240e
23: 0x7f74d8083015 - rustc_codegen_ssa::base::codegen_instance::h4de2a7fcd42b8fec
24: 0x7f74d80b779f - <rustc_middle::mir::mono::MonoItem as rustc_codegen_ssa::mono_item::MonoItemExt>::define::h3ba430a5d5241f22
25: 0x7f74d817aa8a - rustc_codegen_gcc::base::compile_codegen_unit::module_codegen::he6166c6882b2cbb7
26: 0x7f74d817999e - rustc_codegen_gcc::base::compile_codegen_unit::hee038d1e76e08ed1
27: 0x7f74d80a96fd - <rustc_codegen_gcc::GccCodegenBackend as rustc_codegen_ssa::traits::backend::ExtraBackendMethods>::compile_codegen_unit::h9454ef5ee5ef580e
28: 0x7f74d808276d - rustc_codegen_ssa::base::codegen_crate::h1a4124ddfd8d676d
29: 0x7f74d80a932a - <rustc_codegen_gcc::GccCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate::hfb6d3003355e12ad
30: 0x7f74e54dcbc2 - <rustc_session[ebb9057f9195e4cc]::session::Session>::time::<alloc[d1ea88cdd25af2a4]::boxed::Box<dyn core[baaa20f768102eef]::any::Any>, rustc_interface[e3841d12b9b221e7]::passes::start_codegen::{closure#0}>
31: 0x7f74e54dc73b - rustc_interface[e3841d12b9b221e7]::passes::start_codegen
32: 0x7f74e54d749d - <rustc_middle[56c503886228b671]::ty::context::GlobalCtxt>::enter::<<rustc_interface[e3841d12b9b221e7]::queries::Queries>::ongoing_codegen::{closure#0}::{closure#0}, core[baaa20f768102eef]::result::Result<alloc[d1ea88cdd25af2a4]::boxed::Box<dyn core[baaa20f768102eef]::any::Any>, rustc_span[1e0547ff349d1bca]::ErrorGuaranteed>>
33: 0x7f74e54d66cd - <rustc_interface[e3841d12b9b221e7]::queries::Queries>::ongoing_codegen
34: 0x7f74e54d57f0 - <rustc_interface[e3841d12b9b221e7]::interface::Compiler>::enter::<rustc_driver_impl[7175fdba515aac6e]::run_compiler::{closure#1}::{closure#2}, core[baaa20f768102eef]::result::Result<core[baaa20f768102eef]::option::Option<rustc_interface[e3841d12b9b221e7]::queries::Linker>, rustc_span[1e0547ff349d1bca]::ErrorGuaranteed>>
35: 0x7f74e54d2e21 - std[755122e38bdf80bb]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[e3841d12b9b221e7]::util::run_in_thread_pool_with_globals<rustc_interface[e3841d12b9b221e7]::interface::run_compiler<core[baaa20f768102eef]::result::Result<(), rustc_span[1e0547ff349d1bca]::ErrorGuaranteed>, rustc_driver_impl[7175fdba515aac6e]::run_compiler::{closure#1}>::{closure#0}, core[baaa20f768102eef]::result::Result<(), rustc_span[1e0547ff349d1bca]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[baaa20f768102eef]::result::Result<(), rustc_span[1e0547ff349d1bca]::ErrorGuaranteed>>
36: 0x7f74e54d25a5 - <<std[755122e38bdf80bb]::thread::Builder>::spawn_unchecked_<rustc_interface[e3841d12b9b221e7]::util::run_in_thread_pool_with_globals<rustc_interface[e3841d12b9b221e7]::interface::run_compiler<core[baaa20f768102eef]::result::Result<(), rustc_span[1e0547ff349d1bca]::ErrorGuaranteed>, rustc_driver_impl[7175fdba515aac6e]::run_compiler::{closure#1}>::{closure#0}, core[baaa20f768102eef]::result::Result<(), rustc_span[1e0547ff349d1bca]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[baaa20f768102eef]::result::Result<(), rustc_span[1e0547ff349d1bca]::ErrorGuaranteed>>::{closure#1} as core[baaa20f768102eef]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
37: 0x7f74e2d75685 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h59d6baf462325ed4
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/alloc/src/boxed.rs:1993:9
38: 0x7f74e2d75685 - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h4eca0dd82537346f
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/alloc/src/boxed.rs:1993:9
39: 0x7f74e2d75685 - std::sys::unix::thread::Thread::new::thread_start::h38e13b8ca4256fdb
at /rustc/2d0aa57684e10f7b3d3fe740ee18d431181583ad/library/std/src/sys/unix/thread.rs:108:17
40: 0x7f74e2b0d44b - <unknown>
41: 0x7f74e2b90e40 - <unknown>
42: 0x0 - <unknown>
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.72.0-nightly (2d0aa5768 2023-06-18) running on x86_64-unknown-linux-gnu
note: compiler flags: -Z codegen-backend=/home/matthias/vcs/github/rustc_codegen_gcc_attempt2/rustc_codegen_gcc/target/release/librustc_codegen_gcc.so
query stack during panic:
end of query stack
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels