Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fill in prose to describe the async_fn_in_trait lint #1

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

Merged
compiler-errors merged 1 commit into compiler-errors:afit-lint from traviscross:ce/afit-lint
Sep 30, 2023

Conversation

Copy link

@traviscross traviscross commented Sep 30, 2023

We're stabilizing async fn in trait (AFIT), but we have some reservations about how people might use this in the definitions of publicly-visible traits, so we're going to lint about that.

This is a bit of an odd lint for rustc. We normally don't lint just to have people confirm that they understand how Rust works. But in this one exceptional case, this seems like the right thing to do as compared to the other plausible alternatives.

In this commit, we describe the nature of this odd lint.

We're stabilizing `async fn` in trait (AFIT), but we have some
reservations about how people might use this in the definitions of
publicly-visible traits, so we're going to lint about that.
This is a bit of an odd lint for `rustc`. We normally don't lint just
to have people confirm that they understand how Rust works. But in
this one exceptional case, this seems like the right thing to do as
compared to the other plausible alternatives.
In this commit, we describe the nature of this odd lint.
@compiler-errors compiler-errors merged commit 3001237 into compiler-errors:afit-lint Sep 30, 2023
rust-cloud-vms bot pushed a commit that referenced this pull request Dec 5, 2023
Change prefetch to avoid deadlock
Was abled to reproduce the deadlock in rust-lang#118205 and created a coredump when it happen. When looking at the backtraces I noticed that the prefetch of exported_symbols (Thread 17 frame 4) started after the "actual" exported_symbols (Thread 2 frame 18) but it also is working on some of the collect_crate_mono_items (Thread 17 frame12 ) that Thread 2 is blocked on resulting in a deadlock.
This PR results in less parallell work that can be done at the same time but from what I can find we do not call the query exported_symbols from multiple places in the same join call any more.
```
Thread 17 (Thread 0x7f87b6299700 (LWP 11370)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007f87be5166a9 in <parking_lot::condvar::Condvar>::wait_until_internal () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
#2 0x00007f87be12d854 in <rustc_query_system::query::job::QueryLatch>::wait_on () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#3 0x00007f87bd27d16f in rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::VecCache<rustc_span::def_id::CrateNum, rustc_middle::query::erase::Erased<[u8; 16]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#4 0x00007f87bd0b5b6a in rustc_query_impl::query_impl::exported_symbols::get_query_non_incr::__rust_end_short_backtrace () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#5 0x00007f87bdaebb0a in rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}::{closure#1} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#6 0x00007f87bdae1509 in rayon_core::join::join_context::call_b::<core::option::Option<rustc_data_structures::marker::FromDyn<&[(rustc_middle::middle::exported_symbols::ExportedSymbol, rustc_middle::middle::exported_symbols::SymbolExportInfo)]>>, rayon_core::join::join::call<core::option::Option<rustc_data_structures::marker::FromDyn<&[(rustc_middle::middle::exported_symbols::ExportedSymbol, rustc_middle::middle::exported_symbols::SymbolExportInfo)]>>, rustc_data_structures::sync::parallel::enabled::join<rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}::{closure#1}, (), &[(rustc_middle::middle::exported_symbols::ExportedSymbol, rustc_middle::middle::exported_symbols::SymbolExportInfo)]>::{closure#0}::{closure#1}>::{closure#0}>::{closure#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#7 0x00007f87bdae32ff in <rayon_core::job::StackJob<rayon_core::latch::SpinLatch, rayon_core::join::join_context::call_b<core::option::Option<rustc_data_structures::marker::FromDyn<&[(rustc_middle::middle::exported_symbols::ExportedSymbol, rustc_middle::middle::exported_symbols::SymbolExportInfo)]>>, rayon_core::join::join::call<core::option::Option<rustc_data_structures::marker::FromDyn<&[(rustc_middle::middle::exported_symbols::ExportedSymbol, rustc_middle::middle::exported_symbols::SymbolExportInfo)]>>, rustc_data_structures::sync::parallel::enabled::join<rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}::{closure#1}, (), &[(rustc_middle::middle::exported_symbols::ExportedSymbol, rustc_middle::middle::exported_symbols::SymbolExportInfo)]>::{closure#0}::{closure#1}>::{closure#0}>::{closure#0}, core::option::Option<rustc_data_structures::marker::FromDyn<&[(rustc_middle::middle::exported_symbols::ExportedSymbol, rustc_middle::middle::exported_symbols::SymbolExportInfo)]>>> as rayon_core::job::Job>::execute () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#8 0x00007f87b8338823 in <rayon_core::registry::WorkerThread>::wait_until_cold () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#9 0x00007f87bc2edbaf in rayon_core::join::join_context::<rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#0}, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#1}, (), ()>::{closure#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#10 0x00007f87bc2ed313 in rayon_core::registry::in_worker::<rayon_core::join::join_context<rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#0}, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#1}, (), ()>::{closure#0}, ((), ())> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#11 0x00007f87bc2db2a4 in rayon::iter::plumbing::bridge_producer_consumer::helper::<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#12 0x00007f87bc2eead2 in <rayon_core::job::StackJob<rayon_core::latch::SpinLatch, rayon_core::join::join_context::call_b<(), rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#1}>::{closure#0}, ()> as rayon_core::job::Job>::execute () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#13 0x00007f87b8338823 in <rayon_core::registry::WorkerThread>::wait_until_cold () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#14 0x00007f87be52d1f9 in <rayon_core::registry::ThreadBuilder>::run () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#15 0x00007f87b8461c57 in <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#0}::{closure#0}, ()> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#16 0x00007f87b846e465 in rustc_span::set_session_globals_then::<(), rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#0}::{closure#0}> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#17 0x00007f87b844f282 in <<crossbeam_utils::thread::ScopedThreadBuilder>::spawn<<rayon_core::ThreadPoolBuilder>::build_scoped<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#0}, rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#1}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}::{closure#0}, ()>::{closure#0} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#18 0x00007f87b846af58 in <<std::thread::Builder>::spawn_unchecked_<alloc::boxed::Box<dyn core::ops::function::FnOnce<(), Output = ()> + core::marker::Send>, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#19 0x00007f87b7898e85 in std::sys::unix::thread::Thread::new::thread_start () from /home/andjo403/.rustup/toolchains/stage1/lib/libstd-d570b0650d35d951.so
rust-lang#20 0x00007f87b7615609 in start_thread (arg=<optimized out>) at pthread_create.c:477
rust-lang#21 0x00007f87b7755133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Thread 2 (Thread 0x7f87b729b700 (LWP 11368)):
#0 syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1 0x00007f87b7887b51 in std::sys::unix::locks::futex_condvar::Condvar::wait () from /home/andjo403/.rustup/toolchains/stage1/lib/libstd-d570b0650d35d951.so
#2 0x00007f87b8339478 in <rayon_core::sleep::Sleep>::sleep () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#3 0x00007f87b83387c3 in <rayon_core::registry::WorkerThread>::wait_until_cold () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#4 0x00007f87bc2edbaf in rayon_core::join::join_context::<rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#0}, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#1}, (), ()>::{closure#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#5 0x00007f87bc2ed313 in rayon_core::registry::in_worker::<rayon_core::join::join_context<rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#0}, rayon::iter::plumbing::bridge_producer_consumer::helper<rayon::vec::DrainProducer<rustc_middle::mir::mono::MonoItem>, rayon::iter::for_each::ForEachConsumer<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}>>::{closure#1}, (), ()>::{closure#0}, ((), ())> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#6 0x00007f87bc2db50c in <rayon::vec::IntoIter<rustc_middle::mir::mono::MonoItem> as rayon::iter::ParallelIterator>::for_each::<rustc_data_structures::sync::parallel::enabled::par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#7 0x00007f87bc2e8cd7 in <rustc_session::session::Session>::time::<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#8 0x00007f87bc2b8f2c in rustc_monomorphize::collector::collect_crate_mono_items () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#9 0x00007f87bc2c30d9 in rustc_monomorphize::partitioning::collect_and_partition_mono_items () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#10 0x00007f87bcf2cde6 in rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::collect_and_partition_mono_items::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 24]>> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#11 0x00007f87bd156a3c in <rustc_query_impl::query_impl::collect_and_partition_mono_items::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, ())>>::call_once () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#12 0x00007f87bd1c6a7d in rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 24]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#13 0x00007f87bd15df40 in rustc_query_impl::query_impl::collect_and_partition_mono_items::get_query_non_incr::__rust_end_short_backtrace () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#14 0x00007f87bd7a0ad9 in rustc_codegen_ssa::back::symbol_export::exported_symbols_provider_local () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#15 0x00007f87bcf29acb in rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::exported_symbols::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 16]>> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#16 0x00007f87bcfdb350 in <rustc_query_impl::query_impl::exported_symbols::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_span::def_id::CrateNum)>>::call_once () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#17 0x00007f87bd27d64f in rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::VecCache<rustc_span::def_id::CrateNum, rustc_middle::query::erase::Erased<[u8; 16]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, false> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#18 0x00007f87bd0b5b6a in rustc_query_impl::query_impl::exported_symbols::get_query_non_incr::__rust_end_short_backtrace () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#19 0x00007f87bda927ce in rustc_middle::query::plumbing::query_get_at::<rustc_query_system::query::caches::VecCache<rustc_span::def_id::CrateNum, rustc_middle::query::erase::Erased<[u8; 16]>>> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#20 0x00007f87bda9c93f in <rustc_metadata::rmeta::encoder::EncodeContext>::encode_crate_root () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#21 0x00007f87bdaa6ef7 in rustc_metadata::rmeta::encoder::encode_metadata_impl () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#22 0x00007f87bdae0b77 in rayon_core::join::join_context::<rayon_core::join::join::call<core::option::Option<rustc_data_structures::marker::FromDyn<()>>, rustc_data_structures::sync::parallel::enabled::join<rustc_metadata::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}, (), ()>::{closure#0}::{closure#0}>::{closure#0}, rayon_core::join::join::call<core::option::Option<rustc_data_structures::marker::FromDyn<()>>, rustc_data_structures::sync::parallel::enabled::join<rustc_metadata::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}, (), ()>::{closure#0}::{closure#1}>::{closure#0}, core::option::Option<rustc_data_structures::marker::FromDyn<()>>, core::option::Option<rustc_data_structures::marker::FromDyn<()>>>::{closure#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#23 0x00007f87bdaded2f in rayon_core::registry::in_worker::<rayon_core::join::join_context<rayon_core::join::join::call<core::option::Option<rustc_data_structures::marker::FromDyn<()>>, rustc_data_structures::sync::parallel::enabled::join<rustc_metadata::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}, (), ()>::{closure#0}::{closure#0}>::{closure#0}, rayon_core::join::join::call<core::option::Option<rustc_data_structures::marker::FromDyn<()>>, rustc_data_structures::sync::parallel::enabled::join<rustc_metadata::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata::rmeta::encoder::encode_metadata::{closure#1}, (), ()>::{closure#0}::{closure#1}>::{closure#0}, core::option::Option<rustc_data_structures::marker::FromDyn<()>>, core::option::Option<rustc_data_structures::marker::FromDyn<()>>>::{closure#0}, (core::option::Option<rustc_data_structures::marker::FromDyn<()>>, core::option::Option<rustc_data_structures::marker::FromDyn<()>>)> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#24 0x00007f87bdaa5a03 in rustc_metadata::rmeta::encoder::encode_metadata () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#25 0x00007f87bdaed628 in rustc_metadata::fs::encode_and_write_metadata () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#26 0x00007f87b86608be in rustc_interface::passes::start_codegen () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#27 0x00007f87b8664946 in <rustc_middle::ty::context::GlobalCtxt>::enter::<<rustc_interface::queries::Queries>::codegen_and_build_linker::{closure#0}, core::result::Result<rustc_interface::queries::Linker, rustc_span::ErrorGuaranteed>> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#28 0x00007f87b864db00 in <rustc_interface::queries::Queries>::codegen_and_build_linker () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#29 0x00007f87b849400f in <rustc_interface::interface::Compiler>::enter::<rustc_driver_impl::run_compiler::{closure#0}::{closure#0}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#30 0x00007f87b846e067 in rustc_span::set_source_map::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}::{closure#0}> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#31 0x00007f87b844dc13 in <rayon_core::thread_pool::ThreadPool>::install::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#32 0x00007f87b84509a1 in <rayon_core::job::StackJob<rayon_core::latch::LatchRef<rayon_core::latch::LockLatch>, <rayon_core::registry::Registry>::in_worker_cold<<rayon_core::thread_pool::ThreadPool>::install<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>> as rayon_core::job::Job>::execute () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#33 0x00007f87b8338823 in <rayon_core::registry::WorkerThread>::wait_until_cold () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#34 0x00007f87be52d1f9 in <rayon_core::registry::ThreadBuilder>::run () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#35 0x00007f87b8461c57 in <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#0}::{closure#0}, ()> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#36 0x00007f87b846e465 in rustc_span::set_session_globals_then::<(), rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#0}::{closure#0}> () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#37 0x00007f87b844f282 in <<crossbeam_utils::thread::ScopedThreadBuilder>::spawn<<rayon_core::ThreadPoolBuilder>::build_scoped<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#0}, rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#3}::{closure#0}::{closure#1}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}::{closure#0}, ()>::{closure#0} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#38 0x00007f87b846af58 in <<std::thread::Builder>::spawn_unchecked_<alloc::boxed::Box<dyn core::ops::function::FnOnce<(), Output = ()> + core::marker::Send>, ()>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0} () from /home/andjo403/.rustup/toolchains/stage1/lib/librustc_driver-70ddb84e8f7ce707.so
rust-lang#39 0x00007f87b7898e85 in std::sys::unix::thread::Thread::new::thread_start () from /home/andjo403/.rustup/toolchains/stage1/lib/libstd-d570b0650d35d951.so
rust-lang#40 0x00007f87b7615609 in start_thread (arg=<optimized out>) at pthread_create.c:477
rust-lang#41 0x00007f87b7755133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
```
fixes rust-lang#118205
fixes rust-lang#117759 from the latest logs it is the same query map as in rust-lang#118205
fixes rust-lang#118529
fixes rust-lang#117784
cc rust-lang#118206
r? `@SparrowLii`
compiler-errors pushed a commit that referenced this pull request May 19, 2024
...r=Mark-Simulacrum
lldb-formatters: Use StdSliceSyntheticProvider for &str
&str has associated summary provider which correctly displays string values in debugger, but while working on rust-lang#124458 I've noticed that a &str inside an enum displays a blob of memory until a 0 is reached (as a c-string) which makes a very bizarre experience when debugging
However there is already StdSliceSyntheticProvider which we use for other slices. This PR enables the same synthetic provider to be used for &str, however the summary provider is still fixed to return the string value
I've added a test `debuginfo/strings-and-strs.rs` which prior to this PR would output the following in LLDB:
```
* thread #1, name = 'a', stop reason = breakpoint 1.1
 frame #0: 0x0000555555556383 a`strings_and_strs::main::h1d2b5f9227b8767d at strings-and-strs.rs:47:5
 44 	 let plain_str = "Hello";
 45 	 let str_in_struct = Foo { inner: "Hello" };
 46 	 let str_in_tuple = ("Hello", "World");
-> 47 	 zzz(); // #break
 48 	}
 49
 50 	fn zzz() {
(lldb) frame var
(alloc::string::String) plain_string = "Hello" {
 vec = size=5 {
 [0] = 'H'
 [1] = 'e'
 [2] = 'l'
 [3] = 'l'
 [4] = 'o'
 }
}
(&str) plain_str = "Hello" {
 data_ptr = 0x0000555555557263 "HelloWorld\U00000001gdb_load_rust_pretty_printers.py"
 length = 5
}
(strings_and_strs::Foo) str_in_struct = {
 inner = "Hello" {
 data_ptr = 0x0000555555557263 "HelloWorld\U00000001gdb_load_rust_pretty_printers.py"
 length = 5
 }
}
((&str, &str)) str_in_tuple = {
 0 = "Hello" {
 data_ptr = 0x0000555555557263 "HelloWorld\U00000001gdb_load_rust_pretty_printers.py"
 length = 5
 }
 1 = "World" {
 data_ptr = 0x0000555555557268 "World\U00000001gdb_load_rust_pretty_printers.py"
 length = 5
 }
}
```
After this PR it would look the following way:
```
* thread #1, name = 'a', stop reason = breakpoint 1.1
 frame #0: 0x0000555555556383 a`strings_and_strs::main::h1d2b5f9227b8767d at strings-and-strs.rs:47:5
 44 	 let plain_str = "Hello";
 45 	 let str_in_struct = Foo { inner: "Hello" };
 46 	 let str_in_tuple = ("Hello", "World");
-> 47 	 zzz(); // #break
 48 	}
 49
 50 	fn zzz() {
(lldb) frame var
(alloc::string::String) plain_string = "Hello" {
 vec = size=5 {
 [0] = 'H'
 [1] = 'e'
 [2] = 'l'
 [3] = 'l'
 [4] = 'o'
 }
}
(&str) plain_str = "Hello" {
 [0] = 'H'
 [1] = 'e'
 [2] = 'l'
 [3] = 'l'
 [4] = 'o'
}
(strings_and_strs::Foo) str_in_struct = {
 inner = "Hello" {
 [0] = 'H'
 [1] = 'e'
 [2] = 'l'
 [3] = 'l'
 [4] = 'o'
 }
}
((&str, &str)) str_in_tuple = {
 0 = "Hello" {
 [0] = 'H'
 [1] = 'e'
 [2] = 'l'
 [3] = 'l'
 [4] = 'o'
 }
 1 = "World" {
 [0] = 'W'
 [1] = 'o'
 [2] = 'r'
 [3] = 'l'
 [4] = 'd'
 }
}
```
compiler-errors pushed a commit that referenced this pull request Jun 7, 2024
...-codegen-tests, r=erikdesjardins,workingjubilee
Repair several `riscv64gc-unknown-linux-gnu` codegen tests
Together with joshua.zivkovic@codethink.co.uk, we've been starting to explore improving the state of the `riscv64gc-unknown-linux-gnu` target. Additionally, I'm looking to add support for this platform in [Ferrocene](https://github.com/ferrocene/ferrocene) ([Related PR](ferrocene/ferrocene#618)).
While running the test suite, we noted several tests were failing.
It appears that several of the riscv64gc-unknown-linux-gnu codegen tests have not been updated in some time and seem to have experienced a small amount of bitrot.
After speaking with `@workingjubilee` (as I have little expertise in LLVM codegen) I believe these changes to be correct.
### `tests/codegen/riscv-abi/call-llvm-intrinsics.rs`
I believe this change does not alter what the test is testing and is harmless.
### `tests/codegen/riscv-abi/riscv64-lp64d-abi.rs`
The changes largely mirrors those from loongarch64:
https://github.com/rust-lang/rust/blob/550d1b4fb6de23990f4108815c3b1a9d1659e5c4/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs#L13-L15
https://github.com/rust-lang/rust/blob/550d1b4fb6de23990f4108815c3b1a9d1659e5c4/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs#L153-L155
https://github.com/rust-lang/rust/blob/550d1b4fb6de23990f4108815c3b1a9d1659e5c4/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs#L259-L261
https://github.com/rust-lang/rust/blob/550d1b4fb6de23990f4108815c3b1a9d1659e5c4/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs#L263-L267
### `tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs`
The changes largely mirror that from loongarch64 or llvm:
https://github.com/rust-lang/rust/blob/550d1b4fb6de23990f4108815c3b1a9d1659e5c4/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs#L13-L26
https://github.com/rust-lang/llvm-project/blob/5399a24c66cb6164cf32280e7d300488c90d5765/clang/test/CodeGen/RISCV/riscv64-abi.c#L612-L617
### `tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs`
The test is ignored since `-Csplit-debuginfo=unpacked` is not supported on this platform. Context can be found in rust-lang#120518.
## Reproducing the failures
Using a `config.toml` with the following:
```toml
# ...
target = [
 # ...
 "riscv64gc-unknown-linux-gnu",
]
```
> [!NOTE]
> You may need to install a RICV-V toolchain! We get ours from [here](https://www.embecosm.com/resources/tool-chain-downloads/#riscv-linux).
>
> If you are using an old (20.04) Ubuntu container the compiler in the repositories (`gcc-riscv64-linux-gnu`) won't work!
Run the following test suite:
```bash
./x.py test tests/codegen
```
<details>
<summary>Expected output</summary>
```
ana@Autonoma:~/git/rust-lang/rust$ ./x.py test tests/codegen
Building bootstrap
 Finished `dev` profile [unoptimized] target(s) in 0.03s
WARNING: The `change-id` is missing in the `config.toml`. This means that you will not be able to track the major changes made to the bootstrap configurations.
NOTE: to silence this warning, add `change-id = 124501` at the top of `config.toml`
Building stage0 library artifacts (x86_64-unknown-linux-gnu)
 Finished `release` profile [optimized] target(s) in 0.11s
Building compiler artifacts (stage0 -> stage1, x86_64-unknown-linux-gnu)
 Finished `release` profile [optimized] target(s) in 0.18s
Creating a sysroot for stage1 compiler (use `rustup toolchain link 'name' build/host/stage1`)
Building stage1 library artifacts (x86_64-unknown-linux-gnu)
 Finished `release` profile [optimized] target(s) in 0.11s
Building stage0 tool compiletest (x86_64-unknown-linux-gnu)
 Finished `release` profile [optimized] target(s) in 0.11s
Testing stage1 compiletest suite=codegen mode=codegen (x86_64-unknown-linux-gnu)
running 652 tests
iii......ii...iiiiiii...........ii..iii....i......i......i......iii...iiiii..i..i...i... 88/652
.............i............iii..iiii.....................i............................... 176/652
iiiiiii.............iiiiiiiii.iii....i.................i....................i...ii....i. 264/652
..i........i.........i..i........iii.........i............ii................ii..i....... 352/652
...............i...i....ii.i.....i......................ii.ii...iiiiiiiiiiiiiiiiiiiiiiii 440/652
iii....................iiiiiiiiiiiiiiii.........................iii.i..........i........ 528/652
...i...ii...........i...ii.i..i..........i..............................ii.....ii.i..ii. 616/652
.ii.................................
test result: ok. 498 passed; 0 failed; 154 ignored; 0 measured; 0 filtered out; finished in 4.76s
Building stage1 library artifacts (x86_64-unknown-linux-gnu -> riscv64gc-unknown-linux-gnu)
 Finished `release` profile [optimized] target(s) in 0.10s
Testing stage1 compiletest suite=codegen mode=codegen (x86_64-unknown-linux-gnu -> riscv64gc-unknown-linux-gnu)
running 652 tests
iii......ii..iiiiiii.....i..i..i.i...i........i..i.......i......iii...iiiii..i.i....i... 88/652
.............i............iii..iiii....................i...............................i 176/652
iiiiii..............iiiiiiiii.iii.....i................i..................i.....ii....i. 264/652
..i........i..........i.i........iii..........i...........ii................ii..i....... 352/652
...............i...i....ii.i.....i......................i.......iii.iiiiiiiiiiiiiiiiiiii 440/652
iiii...................iiiiiiiiiiiiiiii................
[codegen] tests/codegen/riscv-abi/call-llvm-intrinsics.rs ... F
.....
[codegen] tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs ... F
..iii.i.
[codegen] tests/codegen/riscv-abi/riscv64-lp64d-abi.rs ... F
........i........ 528/652
...i...ii...........i...ii..i.i..........i..............................ii.....ii.i..ii. 616/652
.ii.................................
failures:
---- [codegen] tests/codegen/riscv-abi/call-llvm-intrinsics.rs stdout ----
error: verification with 'FileCheck' failed
status: exit status: 1
command: "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/llvm/build/bin/FileCheck" "--input-file" "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/call-llvm-intrinsics/call-llvm-intrinsics.ll" "/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/call-llvm-intrinsics.rs" "--check-prefix=CHECK" "--check-prefix" "NONMSVC" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/call-llvm-intrinsics.rs:26:12: error: CHECK: expected string not found in input
 // CHECK: store float 4.000000e+00, float* %{{.}}, align 4
 ^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/call-llvm-intrinsics/call-llvm-intrinsics.ll:1:1: note: scanning from here
; ModuleID = 'call_llvm_intrinsics.b4a95fd5831b1bb7-cgu.0'
^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/call-llvm-intrinsics/call-llvm-intrinsics.ll:53:2: note: possible intended match here
 store float 4.000000e+00, ptr %3, align 4
 ^
Input file: /home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/call-llvm-intrinsics/call-llvm-intrinsics.ll
Check file: /home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/call-llvm-intrinsics.rs
-dump-input=help explains the following input dump.
Input was:
<<<<<<
 1: ; ModuleID = 'call_llvm_intrinsics.b4a95fd5831b1bb7-cgu.0'
check:26'0 X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
 2: source_filename = "call_llvm_intrinsics.b4a95fd5831b1bb7-cgu.0"
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 3: target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 4: target triple = "riscv64-unknown-linux-gnu"
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 5:
check:26'0 ~
 6: `@alloc_cebd5a1664be1c73eee4a1aab7937c96` = private unnamed_addr constant <{ [2 x i8] }> <{ [2 x i8] c"A0円A" }>, align 1
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 7: `@alloc_bddb4fe6d67b5a5a93d73a63d68b4b9e` = private unnamed_addr constant <{ ptr, [8 x i8] }> <{ ptr `@alloc_cebd5a1664be1c73eee4a1aab7937c96,` [8 x i8] c"02円00円00円00円00円00円00円00円" }>, align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 8: `@0` = private unnamed_addr constant <{ [8 x i8], [8 x i8] }> <{ [8 x i8] zeroinitializer, [8 x i8] undef }>, align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 9:
check:26'0 ~
 10: ; core::ptr::drop_in_place<call_llvm_intrinsics::A>
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 11: ; Function Attrs: uwtable
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 12: define internal void `@"_ZN4core3ptr44drop_in_place$LT$call_llvm_intrinsics..A$GT17ドルhf11b50bd9b9c5359E"(ptr` noalias noundef nonnull align 1 %_1) unnamed_addr #0 {
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 13: start:
check:26'0 ~~~~~~~
 14: ; call <call_llvm_intrinsics::A as core::ops::drop::Drop>::drop
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 15: call void `@"_ZN65_$LT$call_llvm_intrinsics..A$u20$as$u20$core..ops..drop..Drop$GT4ドルdrop17hc84a7f61b5f719bdE"(ptr` noalias noundef nonnull align 1 %_1)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 16: ret void
check:26'0 ~~~~~~~~~~
 17: }
check:26'0 ~~
 18:
check:26'0 ~
 19: ; <call_llvm_intrinsics::A as core::ops::drop::Drop>::drop
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 20: ; Function Attrs: uwtable
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 21: define void `@"_ZN65_$LT$call_llvm_intrinsics..A$u20$as$u20$core..ops..drop..Drop$GT4ドルdrop17hc84a7f61b5f719bdE"(ptr` noalias noundef nonnull align 1 %self) unnamed_addr #0 {
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 22: start:
check:26'0 ~~~~~~~
 23: %_3 = alloca [48 x i8], align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 24: call void `@llvm.lifetime.start.p0(i64` 48, ptr %_3)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 25: store ptr `@alloc_bddb4fe6d67b5a5a93d73a63d68b4b9e,` ptr %_3, align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 26: %0 = getelementptr inbounds i8, ptr %_3, i64 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 27: store i64 1, ptr %0, align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 28: %1 = load ptr, ptr `@0,` align 8, !align !4, !noundef !5
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 29: %2 = load i64, ptr getelementptr inbounds (i8, ptr `@0,` i64 8), align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 30: %3 = getelementptr inbounds i8, ptr %_3, i64 32
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 31: store ptr %1, ptr %3, align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 32: %4 = getelementptr inbounds i8, ptr %3, i64 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 33: store i64 %2, ptr %4, align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 34: %5 = getelementptr inbounds i8, ptr %_3, i64 16
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 35: store ptr inttoptr (i64 8 to ptr), ptr %5, align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 36: %6 = getelementptr inbounds i8, ptr %5, i64 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 37: store i64 0, ptr %6, align 8
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 38: ; call std::io::stdio::_print
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 39: call void `@_ZN3std2io5stdio6_print17h38b16d890daf9d05E(ptr` noalias nocapture noundef align 8 dereferenceable(48) %_3)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 40: call void `@llvm.lifetime.end.p0(i64` 48, ptr %_3)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 41: ret void
check:26'0 ~~~~~~~~~~
 42: }
check:26'0 ~~
 43:
check:26'0 ~
 44: ; call_llvm_intrinsics::do_call
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 45: ; Function Attrs: uwtable
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 46: define void `@_ZN20call_llvm_intrinsics7do_call17h1d78694c55381316E()` unnamed_addr #0 {
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 47: start:
check:26'0 ~~~~~~~
 48: %0 = alloca [4 x i8], align 4
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 49: %1 = alloca [4 x i8], align 4
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 50: %2 = alloca [4 x i8], align 4
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 51: %3 = alloca [4 x i8], align 4
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 52: %_1 = alloca [0 x i8], align 1
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 53: store float 4.000000e+00, ptr %3, align 4
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:26'1 ? possible intended match
 54: call void `@llvm.lifetime.start.p0(i64` 4, ptr %2)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 55: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %2, ptr align 4 %3, i64 4, i1 false)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 56: %4 = load float, ptr %2, align 4
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 57: call void `@llvm.lifetime.end.p0(i64` 4, ptr %2)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 58: %5 = call float `@llvm.sqrt.f32(float` %4) rust-lang#4
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 59: call void `@llvm.lifetime.start.p0(i64` 4, ptr %1)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 60: call void `@llvm.lifetime.start.p0(i64` 4, ptr %0)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 61: store float %5, ptr %0, align 4
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 62: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %1, ptr align 4 %0, i64 4, i1 false)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 63: call void `@llvm.lifetime.end.p0(i64` 4, ptr %0)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 64: %_2 = load float, ptr %1, align 4, !noundef !5
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 65: call void `@llvm.lifetime.end.p0(i64` 4, ptr %1)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 66: ; call core::ptr::drop_in_place<call_llvm_intrinsics::A>
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 67: call void `@"_ZN4core3ptr44drop_in_place$LT$call_llvm_intrinsics..A$GT17ドルhf11b50bd9b9c5359E"(ptr` noalias noundef nonnull align 1 %_1)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 68: ret void
check:26'0 ~~~~~~~~~~
 69: }
check:26'0 ~~
 70:
check:26'0 ~
 71: ; std::io::stdio::_print
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~
 72: ; Function Attrs: uwtable
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 73: declare void `@_ZN3std2io5stdio6_print17h38b16d890daf9d05E(ptr` noalias nocapture noundef align 8 dereferenceable(48)) unnamed_addr #0
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 74:
check:26'0 ~
 75: ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 76: declare void `@llvm.memcpy.p0.p0.i64(ptr` noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #1
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 77:
check:26'0 ~
 78: ; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 79: declare float `@llvm.sqrt.f32(float)` unnamed_addr #2
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 80:
check:26'0 ~
 81: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 82: declare void `@llvm.lifetime.start.p0(i64` immarg, ptr nocapture) rust-lang#3
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 83:
check:26'0 ~
 84: ; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 85: declare void `@llvm.lifetime.end.p0(i64` immarg, ptr nocapture) rust-lang#3
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 86:
check:26'0 ~
 87: attributes #0 = { uwtable "target-cpu"="generic-rv64" "target-features"="+m,+a,+f,+d,+c" }
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 88: attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 89: attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 90: attributes rust-lang#3 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 91: attributes rust-lang#4 = { nounwind }
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 92:
check:26'0 ~
 93: !llvm.module.flags = !{!0, !1, !2}
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 94: !llvm.ident = !{!3}
check:26'0 ~~~~~~~~~~~~~~~~~~~~
 95:
check:26'0 ~
 96: !0 = !{i32 8, !"PIC Level", i32 2}
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 97: !1 = !{i32 1, !"Code Model", i32 3}
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 98: !2 = !{i32 1, !"target-abi", !"lp64d"}
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 99: !3 = !{!"rustc version 1.80.0-dev"}
check:26'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 100: !4 = !{i64 8}
check:26'0 ~~~~~~~~~~~~~~
 101: !5 = !{}
check:26'0 ~~~~~~~~~
>>>>>>
------------------------------------------
---- [codegen] tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs stdout ----
error: verification with 'FileCheck' failed
status: exit status: 1
command: "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/llvm/build/bin/FileCheck" "--input-file" "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64f-lp64d-abi/riscv64-lp64f-lp64d-abi.ll" "/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs" "--check-prefix=CHECK" "--check-prefix" "NONMSVC" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs:7:11: error: CHECK: expected string not found in input
// CHECK: define void `@f_fpr_tracking(float` %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 zeroext %i)
 ^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64f-lp64d-abi/riscv64-lp64f-lp64d-abi.ll:1:1: note: scanning from here
; ModuleID = 'riscv64_lp64f_lp64d_abi.ae8fa95bac1a0604-cgu.0'
^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64f-lp64d-abi/riscv64-lp64f-lp64d-abi.ll:9:1: note: possible intended match here
define void `@f_fpr_tracking(float` %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 noundef zeroext %i) unnamed_addr #0 {
^
Input file: /home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64f-lp64d-abi/riscv64-lp64f-lp64d-abi.ll
Check file: /home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs
-dump-input=help explains the following input dump.
Input was:
<<<<<<
 1: ; ModuleID = 'riscv64_lp64f_lp64d_abi.ae8fa95bac1a0604-cgu.0'
check:7'0 X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
 2: source_filename = "riscv64_lp64f_lp64d_abi.ae8fa95bac1a0604-cgu.0"
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 3: target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 4: target triple = "riscv64-unknown-linux-gnu"
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 5:
check:7'0 ~
 6: %Tricky1 = type { [1 x float] }
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 7:
check:7'0 ~
 8: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 9: define void `@f_fpr_tracking(float` %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 noundef zeroext %i) unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:7'1 ? possible intended match
 10: start:
check:7'0 ~~~~~~~
 11: %8 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 12: %h = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 13: %9 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 14: %g = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 15: %10 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 16: %f = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 17: %11 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 18: %e = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 19: %12 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 20: %d = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 21: %13 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 22: %c = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 23: %14 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 24: %b = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 25: %15 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 26: %a = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 27: call void `@llvm.lifetime.start.p0(i64` 4, ptr %15)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 28: store float %0, ptr %15, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 29: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %a, ptr align 4 %15, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 30: call void `@llvm.lifetime.end.p0(i64` 4, ptr %15)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 31: call void `@llvm.lifetime.start.p0(i64` 4, ptr %14)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 32: store float %1, ptr %14, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 33: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %b, ptr align 4 %14, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 34: call void `@llvm.lifetime.end.p0(i64` 4, ptr %14)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 35: call void `@llvm.lifetime.start.p0(i64` 4, ptr %13)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 36: store float %2, ptr %13, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 37: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %c, ptr align 4 %13, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 38: call void `@llvm.lifetime.end.p0(i64` 4, ptr %13)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 39: call void `@llvm.lifetime.start.p0(i64` 4, ptr %12)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 40: store float %3, ptr %12, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 41: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %d, ptr align 4 %12, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 42: call void `@llvm.lifetime.end.p0(i64` 4, ptr %12)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 43: call void `@llvm.lifetime.start.p0(i64` 4, ptr %11)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 44: store float %4, ptr %11, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 45: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %e, ptr align 4 %11, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 46: call void `@llvm.lifetime.end.p0(i64` 4, ptr %11)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 47: call void `@llvm.lifetime.start.p0(i64` 4, ptr %10)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 48: store float %5, ptr %10, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 49: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %f, ptr align 4 %10, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 50: call void `@llvm.lifetime.end.p0(i64` 4, ptr %10)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 51: call void `@llvm.lifetime.start.p0(i64` 4, ptr %9)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 52: store float %6, ptr %9, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 53: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %g, ptr align 4 %9, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 54: call void `@llvm.lifetime.end.p0(i64` 4, ptr %9)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 55: call void `@llvm.lifetime.start.p0(i64` 4, ptr %8)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 56: store float %7, ptr %8, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 57: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %h, ptr align 4 %8, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 58: call void `@llvm.lifetime.end.p0(i64` 4, ptr %8)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 59: ret void
check:7'0 ~~~~~~~~~~
 60: }
check:7'0 ~~
 61:
check:7'0 ~
 62: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 63: define void `@f_float_s_arg(float` %0) unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 64: start:
check:7'0 ~~~~~~~
 65: %1 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 66: %a = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 67: call void `@llvm.lifetime.start.p0(i64` 4, ptr %1)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 68: store float %0, ptr %1, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 69: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %a, ptr align 4 %1, i64 4, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 70: call void `@llvm.lifetime.end.p0(i64` 4, ptr %1)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 71: ret void
check:7'0 ~~~~~~~~~~
 72: }
check:7'0 ~~
 73:
check:7'0 ~
 74: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 75: define float `@f_ret_float_s()` unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 76: start:
check:7'0 ~~~~~~~
 77: %_0 = alloca [4 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 78: store float 1.000000e+00, ptr %_0, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 79: %0 = load float, ptr %_0, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 80: ret float %0
check:7'0 ~~~~~~~~~~~~~~
 81: }
check:7'0 ~~
 82:
check:7'0 ~
 83: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 84: define void `@f_float_float_s_arg({` float, float } %0) unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 85: start:
check:7'0 ~~~~~~~
 86: %1 = alloca [8 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 87: %a = alloca [8 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 88: call void `@llvm.lifetime.start.p0(i64` 8, ptr %1)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 89: store { float, float } %0, ptr %1, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 90: call void `@llvm.memcpy.p0.p0.i64(ptr` align 4 %a, ptr align 4 %1, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 91: call void `@llvm.lifetime.end.p0(i64` 8, ptr %1)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 92: ret void
check:7'0 ~~~~~~~~~~
 93: }
check:7'0 ~~
 94:
check:7'0 ~
 95: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 96: define { float, float } `@f_ret_float_float_s()` unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 97: start:
check:7'0 ~~~~~~~
 98: %0 = alloca [8 x i8], align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 99: store float 1.000000e+00, ptr %0, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 100: %1 = getelementptr inbounds i8, ptr %0, i64 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 101: store float 2.000000e+00, ptr %1, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 102: %2 = load { float, float }, ptr %0, align 4
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 103: ret { float, float } %2
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~
 104: }
check:7'0 ~~
 105:
check:7'0 ~
 106: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 107: define void `@f_float_float_s_arg_insufficient_fprs(float` %0, float %1, float %2, float %3, float %4, float %5, float %6, i64 %7) unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 108: start:
check:7'0 ~~~~~~~
 109: %8 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 .
 .
 .
>>>>>>
------------------------------------------
---- [codegen] tests/codegen/riscv-abi/riscv64-lp64d-abi.rs stdout ----
error: verification with 'FileCheck' failed
status: exit status: 1
command: "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/llvm/build/bin/FileCheck" "--input-file" "/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64d-abi/riscv64-lp64d-abi.ll" "/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64d-abi.rs" "--check-prefix=CHECK" "--check-prefix" "NONMSVC" "--allow-unused-prefixes" "--dump-input-context" "100"
stdout: none
--- stderr -------------------------------
/home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64d-abi.rs:7:11: error: CHECK: expected string not found in input
// CHECK: define void `@f_fpr_tracking(double` %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 zeroext %i)
 ^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64d-abi/riscv64-lp64d-abi.ll:1:1: note: scanning from here
; ModuleID = 'riscv64_lp64d_abi.bed282cd9c73cc17-cgu.0'
^
/home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64d-abi/riscv64-lp64d-abi.ll:9:1: note: possible intended match here
define void `@f_fpr_tracking(double` %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 noundef zeroext %i) unnamed_addr #0 {
^
Input file: /home/ana/git/rust-lang/rust/build/x86_64-unknown-linux-gnu/test/codegen/riscv-abi/riscv64-lp64d-abi/riscv64-lp64d-abi.ll
Check file: /home/ana/git/rust-lang/rust/tests/codegen/riscv-abi/riscv64-lp64d-abi.rs
-dump-input=help explains the following input dump.
Input was:
<<<<<<
 1: ; ModuleID = 'riscv64_lp64d_abi.bed282cd9c73cc17-cgu.0'
check:7'0 X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
 2: source_filename = "riscv64_lp64d_abi.bed282cd9c73cc17-cgu.0"
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 3: target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 4: target triple = "riscv64-unknown-linux-gnu"
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 5:
check:7'0 ~
 6: %Tricky1 = type { [1 x double] }
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 7:
check:7'0 ~
 8: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 9: define void `@f_fpr_tracking(double` %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 noundef zeroext %i) unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
check:7'1 ? possible intended match
 10: start:
check:7'0 ~~~~~~~
 11: %8 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 12: %h = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 13: %9 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 14: %g = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 15: %10 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 16: %f = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 17: %11 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 18: %e = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 19: %12 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 20: %d = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 21: %13 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 22: %c = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 23: %14 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 24: %b = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 25: %15 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 26: %a = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 27: call void `@llvm.lifetime.start.p0(i64` 8, ptr %15)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 28: store double %0, ptr %15, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 29: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %a, ptr align 8 %15, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 30: call void `@llvm.lifetime.end.p0(i64` 8, ptr %15)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 31: call void `@llvm.lifetime.start.p0(i64` 8, ptr %14)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 32: store double %1, ptr %14, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 33: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %b, ptr align 8 %14, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 34: call void `@llvm.lifetime.end.p0(i64` 8, ptr %14)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 35: call void `@llvm.lifetime.start.p0(i64` 8, ptr %13)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 36: store double %2, ptr %13, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 37: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %c, ptr align 8 %13, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 38: call void `@llvm.lifetime.end.p0(i64` 8, ptr %13)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 39: call void `@llvm.lifetime.start.p0(i64` 8, ptr %12)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 40: store double %3, ptr %12, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 41: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %d, ptr align 8 %12, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 42: call void `@llvm.lifetime.end.p0(i64` 8, ptr %12)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 43: call void `@llvm.lifetime.start.p0(i64` 8, ptr %11)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 44: store double %4, ptr %11, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 45: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %e, ptr align 8 %11, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 46: call void `@llvm.lifetime.end.p0(i64` 8, ptr %11)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 47: call void `@llvm.lifetime.start.p0(i64` 8, ptr %10)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 48: store double %5, ptr %10, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 49: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %f, ptr align 8 %10, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 50: call void `@llvm.lifetime.end.p0(i64` 8, ptr %10)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 51: call void `@llvm.lifetime.start.p0(i64` 8, ptr %9)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 52: store double %6, ptr %9, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 53: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %g, ptr align 8 %9, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 54: call void `@llvm.lifetime.end.p0(i64` 8, ptr %9)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 55: call void `@llvm.lifetime.start.p0(i64` 8, ptr %8)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 56: store double %7, ptr %8, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 57: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %h, ptr align 8 %8, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 58: call void `@llvm.lifetime.end.p0(i64` 8, ptr %8)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 59: ret void
check:7'0 ~~~~~~~~~~
 60: }
check:7'0 ~~
 61:
check:7'0 ~
 62: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 63: define void `@f_double_s_arg(double` %0) unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 64: start:
check:7'0 ~~~~~~~
 65: %1 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 66: %a = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 67: call void `@llvm.lifetime.start.p0(i64` 8, ptr %1)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 68: store double %0, ptr %1, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 69: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %a, ptr align 8 %1, i64 8, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 70: call void `@llvm.lifetime.end.p0(i64` 8, ptr %1)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 71: ret void
check:7'0 ~~~~~~~~~~
 72: }
check:7'0 ~~
 73:
check:7'0 ~
 74: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 75: define double `@f_ret_double_s()` unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 76: start:
check:7'0 ~~~~~~~
 77: %_0 = alloca [8 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 78: store double 1.000000e+00, ptr %_0, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 79: %0 = load double, ptr %_0, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 80: ret double %0
check:7'0 ~~~~~~~~~~~~~~~
 81: }
check:7'0 ~~
 82:
check:7'0 ~
 83: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 84: define void `@f_double_double_s_arg({` double, double } %0) unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 85: start:
check:7'0 ~~~~~~~
 86: %1 = alloca [16 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 87: %a = alloca [16 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 88: call void `@llvm.lifetime.start.p0(i64` 16, ptr %1)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 89: store { double, double } %0, ptr %1, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 90: call void `@llvm.memcpy.p0.p0.i64(ptr` align 8 %a, ptr align 8 %1, i64 16, i1 false)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 91: call void `@llvm.lifetime.end.p0(i64` 16, ptr %1)
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 92: ret void
check:7'0 ~~~~~~~~~~
 93: }
check:7'0 ~~
 94:
check:7'0 ~
 95: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 96: define { double, double } `@f_ret_double_double_s()` unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 97: start:
check:7'0 ~~~~~~~
 98: %0 = alloca [16 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 99: store double 1.000000e+00, ptr %0, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 100: %1 = getelementptr inbounds i8, ptr %0, i64 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 101: store double 2.000000e+00, ptr %1, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 102: %2 = load { double, double }, ptr %0, align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 103: ret { double, double } %2
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
 104: }
check:7'0 ~~
 105:
check:7'0 ~
 106: ; Function Attrs: uwtable
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~
 107: define void `@f_double_float_s_arg({` double, float } %0) unnamed_addr #0 {
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 108: start:
check:7'0 ~~~~~~~
 109: %1 = alloca [12 x i8], align 8
check:7'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 .
 .
 .
>>>>>>
------------------------------------------
failures:
 [codegen] tests/codegen/riscv-abi/call-llvm-intrinsics.rs
 [codegen] tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs
 [codegen] tests/codegen/riscv-abi/riscv64-lp64d-abi.rs
test result: FAILED. 498 passed; 3 failed; 151 ignored; 0 measured; 0 filtered out; finished in 4.70s
Some tests failed in compiletest suite=codegen mode=codegen host=x86_64-unknown-linux-gnu target=riscv64gc-unknown-linux-gnu
Build completed unsuccessfully in 0:00:15
```
</details>
compiler-errors pushed a commit that referenced this pull request Jul 10, 2024
compiler-errors pushed a commit that referenced this pull request Jul 30, 2024
...res, r=oli-obk
Tell users not to file a bug when using internal library features
Actually fixes rust-lang#97501. I don't think we should suppress the suggestion to add `#![feature(..)]`, though I guess I could be convinced otherwise.
r? `@Nilstrieb` cc `@RalfJung`
Didn't add a test b/c I don't think we test this for lang features either, but I can confirm it does work.
```
warning: the feature `core_intrinsics` is internal to the compiler or standard library
 --> /home/michael/test.rs:1:12
 |
1 | #![feature(core_intrinsics)]
 | ^^^^^^^^^^^^^^^
 |
 = note: using it is strongly discouraged
 = note: `#[warn(internal_features)]` on by default
thread 'rustc' panicked at compiler/rustc_mir_transform/src/validate.rs:94:25:
broken MIR in Item(DefId(0:6 ~ test[42db]::{impl#0}::add)) (after phase change to runtime-optimized) at bb0[0]:
Cannot perform arithmetic Add on type WrapInt8
stack backtrace:
 0: begin_panic_handler
 at ./library/std/src/panicking.rs:665:5
 1: panic_fmt
 at ./library/core/src/panicking.rs:74:14
 2: fail<alloc::string::String>
 at ./compiler/rustc_mir_transform/src/validate.rs:146:9
 3: run_pass
 at ./compiler/rustc_mir_transform/src/validate.rs:94:13
 4: validate_body
 at ./compiler/rustc_mir_transform/src/pass_manager.rs:193:5
 5: run_passes_inner
 at ./compiler/rustc_mir_transform/src/pass_manager.rs:176:13
 6: rustc_mir_transform::pass_manager::run_passes
 at ./compiler/rustc_mir_transform/src/pass_manager.rs:87:5
 7: run_optimization_passes
 at ./compiler/rustc_mir_transform/src/lib.rs:561:5
 8: inner_optimized_mir
 at ./compiler/rustc_mir_transform/src/lib.rs:667:5
 9: optimized_mir
 at ./compiler/rustc_mir_transform/src/lib.rs:630:21
 10: {closure#0}
 at ./compiler/rustc_query_impl/src/plumbing.rs:285:13
 [... omitted 22 frames ...]
 11: query_get_at<rustc_query_system::query::caches::DefIdCache<rustc_middle::query::erase::Erased<[u8; 8]>>>
 at ./compiler/rustc_middle/src/query/plumbing.rs:145:17
 12: instance_mir
 13: collect_items_of_instance
 at ./compiler/rustc_monomorphize/src/collector.rs:1203:16
 14: {closure#0}
 at ./compiler/rustc_monomorphize/src/collector.rs:447:17
 15: maybe_grow<(), rustc_monomorphize::collector::collect_items_rec::{closure_env#0}>
 at /home/michael/.cargo/registry/src/index.crates.io-6f17d22bba15001f/stacker-0.1.15/src/lib.rs:55:9
 16: ensure_sufficient_stack<(), rustc_monomorphize::collector::collect_items_rec::{closure_env#0}>
 at ./compiler/rustc_data_structures/src/stack.rs:17:5
 17: collect_items_rec
 at ./compiler/rustc_monomorphize/src/collector.rs:446:13
 18: collect_items_rec
 at ./compiler/rustc_monomorphize/src/collector.rs:526:13
 19: {closure#0}
 at ./compiler/rustc_monomorphize/src/collector.rs:1597:17
 20: {closure#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>
 at ./compiler/rustc_data_structures/src/sync/parallel.rs:182:34
 21: call_once<(), rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure#0}::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>
 at ./library/core/src/panic/unwind_safe.rs:272:9
 22: do_call<core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure#0}::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>, ()>
 at ./library/std/src/panicking.rs:557:40
 23: try<(), core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure#0}::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>>
 at ./library/std/src/panicking.rs:521:19
 24: run<(), rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure#1}::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>
 at ./compiler/rustc_data_structures/src/sync/parallel.rs:28:9
 25: {closure#1}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>
 at ./compiler/rustc_data_structures/src/sync/parallel.rs:186:21
 26: {closure#0}<rustc_middle::mir::mono::MonoItem, rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure_env#1}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>
 at ./library/core/src/iter/traits/iterator.rs:815:29
 27: fold<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global, (), core::iter::traits::iterator::Iterator::for_each::call::{closure_env#0}<rustc_middle::mir::mono::MonoItem, rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure_env#1}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>>
 at ./library/alloc/src/vec/into_iter.rs:317:25
 28: for_each<alloc::vec::into_iter::IntoIter<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure#0}::{closure_env#1}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>
 at ./library/core/src/iter/traits/iterator.rs:818:9
 29: {closure#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>
 at ./compiler/rustc_data_structures/src/sync/parallel.rs:185:17
 30: parallel_guard<(), rustc_data_structures::sync::parallel::enabled::par_for_each_in::{closure_env#0}<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>>
 at ./compiler/rustc_data_structures/src/sync/parallel.rs:44:15
 31: par_for_each_in<rustc_middle::mir::mono::MonoItem, alloc::vec::Vec<rustc_middle::mir::mono::MonoItem, alloc::alloc::Global>, rustc_monomorphize::collector::collect_crate_mono_items::{closure#1}::{closure_env#0}>
 at ./compiler/rustc_data_structures/src/sync/parallel.rs:178:9
 32: {closure#1}
 at ./compiler/rustc_monomorphize/src/collector.rs:1595:13
 33: run<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure_env#1}>
 at ./compiler/rustc_data_structures/src/profiling.rs:754:9
 34: time<(), rustc_monomorphize::collector::collect_crate_mono_items::{closure_env#1}>
 at ./compiler/rustc_session/src/utils.rs:16:9
 35: collect_crate_mono_items
 at ./compiler/rustc_monomorphize/src/collector.rs:1594:9
 36: collect_and_partition_mono_items
 at ./compiler/rustc_monomorphize/src/partitioning.rs:1124:30
 37: {closure#0}
 at ./compiler/rustc_query_impl/src/plumbing.rs:281:9
 [... omitted 22 frames ...]
 38: query_get_at<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 24]>>>
 at ./compiler/rustc_middle/src/query/plumbing.rs:145:17
 39: collect_and_partition_mono_items
 at ./compiler/rustc_middle/src/query/plumbing.rs:423:31
 40: collect_and_partition_mono_items
 at ./compiler/rustc_middle/src/query/plumbing.rs:414:17
 41: codegen_crate<rustc_codegen_llvm::LlvmCodegenBackend>
 at ./compiler/rustc_codegen_ssa/src/base.rs:596:25
 42: codegen_crate
 at ./compiler/rustc_codegen_llvm/src/lib.rs:361:18
 43: {closure#0}
 at ./compiler/rustc_interface/src/passes.rs:1027:9
 44: run<alloc::boxed::Box<dyn core::any::Any, alloc::alloc::Global>, rustc_interface::passes::start_codegen::{closure_env#0}>
 at ./compiler/rustc_data_structures/src/profiling.rs:754:9
 45: time<alloc::boxed::Box<dyn core::any::Any, alloc::alloc::Global>, rustc_interface::passes::start_codegen::{closure_env#0}>
 at ./compiler/rustc_session/src/utils.rs:16:9
 46: start_codegen
 at ./compiler/rustc_interface/src/passes.rs:1026:19
 47: codegen_and_build_linker
 at ./compiler/rustc_interface/src/queries.rs:128:31
 48: {closure#6}
 at ./compiler/rustc_driver_impl/src/lib.rs:451:25
 49: {closure#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
 at ./compiler/rustc_middle/src/ty/context.rs:1336:37
 50: {closure#0}<rustc_middle::ty::context::{impl#19}::enter::{closure_env#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
 at ./compiler/rustc_middle/src/ty/context/tls.rs:82:9
 51: try_with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_middle::ty::context::{impl#19}::enter::{closure_env#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
 at ./library/std/src/thread/local.rs:283:12
 52: with<core::cell::Cell<*const ()>, rustc_middle::ty::context::tls::enter_context::{closure_env#0}<rustc_middle::ty::context::{impl#19}::enter::{closure_env#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
 at ./library/std/src/thread/local.rs:260:9
 53: enter_context<rustc_middle::ty::context::{impl#19}::enter::{closure_env#1}<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
 at ./compiler/rustc_middle/src/ty/context/tls.rs:79:5
 54: enter<rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure_env#6}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
 at ./compiler/rustc_middle/src/ty/context.rs:1336:9
 55: <rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>>::enter::<core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#0}::{closure#1}::{closure#6}>
 at ./compiler/rustc_interface/src/queries.rs:64:9
 56: {closure#1}
 at ./compiler/rustc_driver_impl/src/lib.rs:450:13
 57: enter<rustc_driver_impl::run_compiler::{closure#0}::{closure_env#1}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
 at ./compiler/rustc_interface/src/queries.rs:209:19
 58: {closure#0}
 at ./compiler/rustc_driver_impl/src/lib.rs:388:22
 59: {closure#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>
 at ./compiler/rustc_interface/src/interface.rs:502:27
 60: {closure#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>
 at ./compiler/rustc_interface/src/util.rs:154:13
 61: {closure#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>>
 at ./compiler/rustc_interface/src/util.rs:106:21
 62: set<rustc_span::SessionGlobals, rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>>
 at /home/michael/.cargo/registry/src/index.crates.io-6f17d22bba15001f/scoped-tls-1.0.1/src/lib.rs:137:9
 63: create_session_globals_then<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_interface::util::run_in_thread_with_globals::{closure#0}::{closure#0}::{closure_env#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>>>
 at ./compiler/rustc_span/src/lib.rs:134:5
 64: {closure#0}<rustc_interface::util::run_in_thread_pool_with_globals::{closure_env#0}<rustc_interface::interface::run_compiler::{closure_env#1}<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure_env#0}>, core::result::Result<(), rustc_span::ErrorGuaranteed>>, core::result::Result<(), rustc_span::ErrorGuaranteed>>
 at ./compiler/rustc_interface/src/util.rs:105:17
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
error: the compiler unexpectedly panicked. this is a bug.
note: using internal features is not supported and expected to cause internal compiler errors when used incorrectly
note: rustc 1.82.0-dev running on x86_64-unknown-linux-gnu
query stack during panic:
#0 [optimized_mir] optimizing MIR for `<impl at /home/michael/test.rs:9:1: 9:32>::add`
#1 [collect_and_partition_mono_items] collect_and_partition_mono_items
end of query stack
```
compiler-errors pushed a commit that referenced this pull request Sep 10, 2024
better implementation of signed div_floor/ceil
Tracking issue for signed `div_floor`/`div_ceil`: rust-lang#88581.
This PR improves the implementation of those two functions by adding a better branchless algorithm. Side-by-side comparison of `i32::div_floor` on x86-64:
```asm
div_floor_new: div_floor_old:
 push rax push rax
 test esi, esi test esi, esi
 je .LBB0_3 je .LBB1_6
 mov eax, esi mov eax, esi
 not eax not eax
 lea ecx, [rdi - 2147483648] lea ecx, [rdi - 2147483648]
 or ecx, eax or ecx, eax
 je .LBB0_2 je .LBB1_7
 mov eax, edi mov eax, edi
 cdq cdq
 idiv esi idiv esi
 xor esi, edi test edx, edx
 sar esi, 31 setg cl
 test edx, edx test esi, esi
 cmove esi, edx sets dil
 add eax, esi test dil, cl
 pop rcx jne .LBB1_4
 ret test edx, edx
.LBB0_3: setns cl
 lea rdi, [rip + .L__unnamed_1] test esi, esi
 call qword ptr [rip + panic...] setle dl
.LBB0_2: or dl, cl
 lea rdi, [rip + .L__unnamed_1] jne .LBB1_5
 call qword ptr [rip + panic...] .LBB1_4:
 dec eax
 .LBB1_5:
 pop rcx
 ret
 .LBB1_6:
 lea rdi, [rip + .L__unnamed_2]
 call qword ptr [rip + panic...]
 .LBB1_7:
 lea rdi, [rip + .L__unnamed_2]
 call qword ptr [rip + panic...]
```
And on Aarch64:
```asm
_div_floor_new: _div_floor_old:
 stp x29, x30, [sp, #-16]! stp x29, x30, [sp, #-16]!
 mov x29, sp mov x29, sp
 cbz w1, LBB0_4 cbz w1, LBB1_9
 mov w8, #-2147483648 mov x8, x0
 cmp w0, w8 mov w9, #-2147483648
 b.ne LBB0_3 cmp w0, w9
 cmn w1, #1 b.ne LBB1_3
 b.eq LBB0_5 cmn w1, #1
LBB0_3: b.eq LBB1_10
 sdiv w8, w0, w1 LBB1_3:
 msub w9, w8, w1, w0 sdiv w0, w8, w1
 eor w10, w1, w0 msub w8, w0, w1, w8
 asr w10, w10, rust-lang#31 tbz w1, rust-lang#31, LBB1_5
 cmp w9, #0 cmp w8, #0
 csel w9, wzr, w10, eq b.gt LBB1_7
 add w0, w9, w8 LBB1_5:
 ldp x29, x30, [sp], rust-lang#16 cmp w1, #1
 ret b.lt LBB1_8
LBB0_4: tbz w8, rust-lang#31, LBB1_8
 adrp x0, l___unnamed_1@PAGE LBB1_7:
 add x0, x0, l___unnamed_1@PAGEOFF sub w0, w0, #1
 bl panic... LBB1_8:
LBB0_5: ldp x29, x30, [sp], rust-lang#16
 adrp x0, l___unnamed_1@PAGE ret
 add x0, x0, l___unnamed_1@PAGEOFF LBB1_9:
 bl panic... adrp x0, l___unnamed_2@PAGE
 add x0, x0, l___unnamed_2@PAGEOFF
 bl panic...
 LBB1_10:
 adrp x0, l___unnamed_2@PAGE
 add x0, x0, l___unnamed_2@PAGEOFF
 bl panic...
```
compiler-errors pushed a commit that referenced this pull request Oct 17, 2024
...raheemdev
Optimize `Box::default` and `Arc::default` to construct more types in place
Both the `Arc` and `Box` `Default` impls currently call `T::default()` before allocating, and then moving the resulting `T` into the allocation.
Most `Default` impls are trivial, which should in theory allow
LLVM to construct `T: Default` directly in the `Box` allocation when calling
`<Box<T>>::default()`.
However, the allocation may fail, which necessitates calling `T`'s destructor if it has one.
If the destructor is non-trivial, then LLVM has a hard time proving that it's
sound to elide, which makes it construct `T` on the stack first, and then copy it into the allocation.
Change both of these impls to allocate first, and then call `T::default` into the uninitialized allocation, so that LLVM doesn't have to prove that it's sound to elide the destructor/initial stack copy.
For example, given the following Rust code:
```rust
#[derive(Default, Clone)]
struct Foo {
 x: Vec<u8>,
 z: String,
 y: Vec<u8>,
}
#[no_mangle]
pub fn src() -> Box<Foo> {
 Box::default()
}
```
<details open>
<summary>Before this PR:</summary>
```llvm
`@__rust_no_alloc_shim_is_unstable` = external global i8
; drop_in_place() generated in case the allocation fails
; core::ptr::drop_in_place<playground::Foo>
; Function Attrs: nounwind nonlazybind uwtable
define internal fastcc void `@"_ZN4core3ptr36drop_in_place$LT$playground..Foo$GT17ドルhff376aece491233bE"(ptr` noalias nocapture noundef readonly align 8 dereferenceable(72) %_1) unnamed_addr #0 personality ptr `@rust_eh_personality` {
start:
 %_1.val = load i64, ptr %_1, align 8
 %0 = icmp eq i64 %_1.val, 0
 br i1 %0, label %bb6, label %"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i"
"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i": ; preds = %start
 %1 = getelementptr inbounds i8, ptr %_1, i64 8
 %_1.val6 = load ptr, ptr %1, align 8, !nonnull !3, !noundef !3
 tail call void `@__rust_dealloc(ptr` noundef nonnull %_1.val6, i64 noundef %_1.val, i64 noundef 1) rust-lang#8
 br label %bb6
bb6: ; preds = %"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i", %start
 %2 = getelementptr inbounds i8, ptr %_1, i64 24
 %.val9 = load i64, ptr %2, align 8
 %3 = icmp eq i64 %.val9, 0
 br i1 %3, label %bb5, label %"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i.i11"
"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i.i11": ; preds = %bb6
 %4 = getelementptr inbounds i8, ptr %_1, i64 32
 %.val10 = load ptr, ptr %4, align 8, !nonnull !3, !noundef !3
 tail call void `@__rust_dealloc(ptr` noundef nonnull %.val10, i64 noundef %.val9, i64 noundef 1) rust-lang#8
 br label %bb5
bb5: ; preds = %"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i.i11", %bb6
 %5 = getelementptr inbounds i8, ptr %_1, i64 48
 %.val4 = load i64, ptr %5, align 8
 %6 = icmp eq i64 %.val4, 0
 br i1 %6, label %"_ZN4core3ptr46drop_in_place$LT$alloc..vec..Vec$LT$u8$GT$$GT17ドルhb5ca95423e113cf7E.exit16", label %"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i15"
"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i15": ; preds = %bb5
 %7 = getelementptr inbounds i8, ptr %_1, i64 56
 %.val5 = load ptr, ptr %7, align 8, !nonnull !3, !noundef !3
 tail call void `@__rust_dealloc(ptr` noundef nonnull %.val5, i64 noundef %.val4, i64 noundef 1) rust-lang#8
 br label %"_ZN4core3ptr46drop_in_place$LT$alloc..vec..Vec$LT$u8$GT$$GT17ドルhb5ca95423e113cf7E.exit16"
"_ZN4core3ptr46drop_in_place$LT$alloc..vec..Vec$LT$u8$GT$$GT17ドルhb5ca95423e113cf7E.exit16": ; preds = %bb5, %"_ZN63_$LT$alloc..alloc..Global$u20$as$u20$core..alloc..Allocator$GT10ドルdeallocate17heaa87468709346b1E.exit.i.i.i4.i15"
 ret void
}
; Function Attrs: nonlazybind uwtable
define noalias noundef nonnull align 8 ptr `@src()` unnamed_addr #1 personality ptr `@rust_eh_personality` {
start:
; alloca to place `Foo` in.
 %_1 = alloca [72 x i8], align 8
 call void `@llvm.lifetime.start.p0(i64` 72, ptr nonnull %_1)
 store i64 0, ptr %_1, align 8
 %_2.sroa.4.0._1.sroa_idx = getelementptr inbounds i8, ptr %_1, i64 8
 store ptr inttoptr (i64 1 to ptr), ptr %_2.sroa.4.0._1.sroa_idx, align 8
 %_2.sroa.5.0._1.sroa_idx = getelementptr inbounds i8, ptr %_1, i64 16
 %_3.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %_1, i64 32
 call void `@llvm.memset.p0.i64(ptr` noundef nonnull align 8 dereferenceable(16) %_2.sroa.5.0._1.sroa_idx, i8 0, i64 16, i1 false)
 store ptr inttoptr (i64 1 to ptr), ptr %_3.sroa.4.0..sroa_idx, align 8
 %_3.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %_1, i64 40
 %_4.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %_1, i64 56
 call void `@llvm.memset.p0.i64(ptr` noundef nonnull align 8 dereferenceable(16) %_3.sroa.5.0..sroa_idx, i8 0, i64 16, i1 false)
 store ptr inttoptr (i64 1 to ptr), ptr %_4.sroa.4.0..sroa_idx, align 8
 %_4.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %_1, i64 64
 store i64 0, ptr %_4.sroa.5.0..sroa_idx, align 8
 %0 = load volatile i8, ptr `@__rust_no_alloc_shim_is_unstable,` align 1, !noalias !4
 %_0.i.i.i = tail call noalias noundef align 8 dereferenceable_or_null(72) ptr `@__rust_alloc(i64` noundef 72, i64 noundef 8) rust-lang#8, !noalias !4
 %1 = icmp eq ptr %_0.i.i.i, null
 br i1 %1, label %bb2.i, label %"_ZN5alloc5boxed12Box$LT$T$GT3ドルnew17h0864de14f863a27aE.exit"
bb2.i: ; preds = %start
; invoke alloc::alloc::handle_alloc_error
 invoke void `@_ZN5alloc5alloc18handle_alloc_error17h98142d0d8d74161bE(i64` noundef 8, i64 noundef 72) rust-lang#9
 to label %.noexc unwind label %cleanup.i
.noexc: ; preds = %bb2.i
 unreachable
cleanup.i: ; preds = %bb2.i
 %2 = landingpad { ptr, i32 }
 cleanup
; call core::ptr::drop_in_place<playground::Foo>
 call fastcc void `@"_ZN4core3ptr36drop_in_place$LT$playground..Foo$GT17ドルhff376aece491233bE"(ptr` noalias noundef nonnull align 8 dereferenceable(72) %_1) rust-lang#10
 resume { ptr, i32 } %2
"_ZN5alloc5boxed12Box$LT$T$GT3ドルnew17h0864de14f863a27aE.exit": ; preds = %start
; Copy from stack to heap if allocation is successful
 call void `@llvm.memcpy.p0.p0.i64(ptr` noundef nonnull align 8 dereferenceable(72) %_0.i.i.i, ptr noundef nonnull align 8 dereferenceable(72) %_1, i64 72, i1 false)
 call void `@llvm.lifetime.end.p0(i64` 72, ptr nonnull %_1)
 ret ptr %_0.i.i.i
}
```
</details>
<details>
<summary>After this PR</summary>
```llvm
; Notice how there's no `drop_in_place()` generated as well
define noalias noundef nonnull align 8 ptr `@src()` unnamed_addr #0 personality ptr `@rust_eh_personality` {
start:
; no stack allocation
 %0 = load volatile i8, ptr `@__rust_no_alloc_shim_is_unstable,` align 1
 %_0.i.i.i.i.i = tail call noalias noundef align 8 dereferenceable_or_null(72) ptr `@__rust_alloc(i64` noundef 72, i64 noundef 8) rust-lang#5
 %1 = icmp eq ptr %_0.i.i.i.i.i, null
 br i1 %1, label %bb3.i, label %"_ZN5alloc5boxed16Box$LT$T$C$A$GT13ドルnew_uninit_in17h80d6355ef4b73ea3E.exit"
bb3.i: ; preds = %start
; call alloc::alloc::handle_alloc_error
 tail call void `@_ZN5alloc5alloc18handle_alloc_error17h98142d0d8d74161bE(i64` noundef 8, i64 noundef 72) rust-lang#6
 unreachable
"_ZN5alloc5boxed16Box$LT$T$C$A$GT13ドルnew_uninit_in17h80d6355ef4b73ea3E.exit": ; preds = %start
; construct `Foo` directly into the allocation if successful
 store i64 0, ptr %_0.i.i.i.i.i, align 8
 %_8.sroa.4.0._1.sroa_idx = getelementptr inbounds i8, ptr %_0.i.i.i.i.i, i64 8
 store ptr inttoptr (i64 1 to ptr), ptr %_8.sroa.4.0._1.sroa_idx, align 8
 %_8.sroa.5.0._1.sroa_idx = getelementptr inbounds i8, ptr %_0.i.i.i.i.i, i64 16
 %_8.sroa.7.0._1.sroa_idx = getelementptr inbounds i8, ptr %_0.i.i.i.i.i, i64 32
 tail call void `@llvm.memset.p0.i64(ptr` noundef nonnull align 8 dereferenceable(16) %_8.sroa.5.0._1.sroa_idx, i8 0, i64 16, i1 false)
 store ptr inttoptr (i64 1 to ptr), ptr %_8.sroa.7.0._1.sroa_idx, align 8
 %_8.sroa.8.0._1.sroa_idx = getelementptr inbounds i8, ptr %_0.i.i.i.i.i, i64 40
 %_8.sroa.10.0._1.sroa_idx = getelementptr inbounds i8, ptr %_0.i.i.i.i.i, i64 56
 tail call void `@llvm.memset.p0.i64(ptr` noundef nonnull align 8 dereferenceable(16) %_8.sroa.8.0._1.sroa_idx, i8 0, i64 16, i1 false)
 store ptr inttoptr (i64 1 to ptr), ptr %_8.sroa.10.0._1.sroa_idx, align 8
 %_8.sroa.11.0._1.sroa_idx = getelementptr inbounds i8, ptr %_0.i.i.i.i.i, i64 64
 store i64 0, ptr %_8.sroa.11.0._1.sroa_idx, align 8
 ret ptr %_0.i.i.i.i.i
}
```
</details>
compiler-errors pushed a commit that referenced this pull request Oct 22, 2024
...Kobzol
shave 150ms off bootstrap
This starts `git` commands inside `GitInfo`and the submodule updates in parallel. Git should already perform internal locking in cases where it needs to serialize a modification.
```
OLD
Benchmark #1: ./x check core
 Time (mean ± σ): 608.7 ms ± 4.4 ms [User: 368.3 ms, System: 455.1 ms]
 Range (min ... max): 602.3 ms ... 618.8 ms 10 runs
NEW
Benchmark #1: ./x check core
 Time (mean ± σ): 462.8 ms ± 2.6 ms [User: 350.2 ms, System: 485.1 ms]
 Range (min ... max): 457.5 ms ... 465.6 ms 10 runs
```
This should help with the rust-analyzer setup which issues many individual `./x check` calls. There's more that could be done but these were the lowest-hanging fruits that I saw.
compiler-errors pushed a commit that referenced this pull request Nov 2, 2024
The failure output is:
```
SplitVectorOperand Op #1: t51: i32 = llvm.wasm.alltrue TargetConstant:i32<12408>, t50
rustc-LLVM ERROR: Do not know how to split this operator's operand!
```
compiler-errors pushed a commit that referenced this pull request Dec 12, 2024
we get these declarations
```
; opt level 0
declare x86_intrcc void @page_fault_handler(ptr byval([8 x i8]) align 8, i64) unnamed_addr #1
; opt level > 0
declare x86_intrcc void @page_fault_handler(ptr noalias nocapture noundef byval([8 x i8]) align 8 dereferenceable(8), i64 noundef) unnamed_addr #1
```
The space after `i64` in the original regex made the regex not match for
opt level 0. Removing the space fixes the issue.
```
declare x86_intrcc void @page_fault_handler(ptr {{.*}}, i64 {{.*}}){{.*}}#[[ATTRS:[0-9]+]]
```
compiler-errors pushed a commit that referenced this pull request Jul 1, 2025
compiler-errors pushed a commit that referenced this pull request Jul 15, 2025
fix: check against 'main' function name instead of entrypoint function
compiler-errors pushed a commit that referenced this pull request Jul 17, 2025
...-lines-debuginfo, r=wesleywiser
tests: Test line debuginfo for linebreaked function parameters
Closes rust-lang#45010 which just [E-needs-test](rust-lang#45010 (comment)).
To verify that this is actually a regression test, do this, which is a simplified and adapted version of what compiletest does for 1.39 and then 1.88:
```sh
for toolchain in 1.39 1.88; do
 echo -e "\nWith $toolchain:"
 rustc +$toolchain "tests/codegen/fn-parameters-on-different-lines-debuginfo.rs" "--emit" "llvm-ir" "-o" "/tmp/fn-parameters-on-different-lines-debuginfo.ll" "-g" "-Copt-level=0"
 "build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck" "--input-file" "/tmp/fn-parameters-on-different-lines-debuginfo.ll" "tests/codegen/fn-parameters-on-different-lines-debuginfo.rs" "--check-prefix=CHECK" "--dump-input-context" "100" && echo OK || echo FAIL
done
```
which gives
```
With 1.39:
FAIL
With 1.88:
OK
```
<details>
<summary>Click to expand full output</summary>
```
$ for toolchain in 1.39 1.88; do
 echo -e "\nWith $toolchain:"
 rustc +$toolchain "tests/codegen/fn-parameters-on-different-lines-debuginfo.rs" "--emit" "llvm-ir" "-o" "/tmp/fn-parameters-on-different-lines-debuginfo.ll" "-g" "-Copt-level=0"
 "build/x86_64-unknown-linux-gnu/ci-llvm/bin/FileCheck" "--input-file" "/tmp/fn-parameters-on-different-lines-debuginfo.ll" "tests/codegen/fn-parameters-on-different-lines-debuginfo.rs" "--check-prefix=CHECK" "--dump-input-context" "100" && echo OK || echo FAIL
done
With 1.39:
tests/codegen/fn-parameters-on-different-lines-debuginfo.rs:16:16: error: CHECK-SAME: expected string not found in input
// CHECK-SAME: line: 10
 ^
/tmp/fn-parameters-on-different-lines-debuginfo.ll:69:42: note: scanning from here
!10 = !DILocalVariable(name: "x", arg: 1, scope: !5, file: !3, line: 1, type: !9)
 ^
/tmp/fn-parameters-on-different-lines-debuginfo.ll:69:64: note: possible intended match here
!10 = !DILocalVariable(name: "x", arg: 1, scope: !5, file: !3, line: 1, type: !9)
 ^
Input file: /tmp/fn-parameters-on-different-lines-debuginfo.ll
Check file: tests/codegen/fn-parameters-on-different-lines-debuginfo.rs
-dump-input=help explains the following input dump.
Input was:
<<<<<<
 1: ; ModuleID = 'fn_parameters_on_different_lines_debuginfo.3a1fbbbh-cgu.0'
 2: source_filename = "fn_parameters_on_different_lines_debuginfo.3a1fbbbh-cgu.0"
 3: target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 4: target triple = "x86_64-unknown-linux-gnu"
 5:
 6: ``@str.0`` = internal constant [59 x i8] c"tests/codegen/fn-parameters-on-different-lines-debuginfo.rs"
 7: ``@str.1`` = internal constant [28 x i8] c"attempt to add with overflow"
 8: ``@panic_loc.2`` = private unnamed_addr constant { { [0 x i8]*, i64 }, { [0 x i8]*, i64 }, i32, i32 } { { [0 x i8]*, i64 } { [0 x i8]* bitcast ([28 x i8]* ``@str.1`` to [0 x i8]*), i64 28 }, { [0 x i8]*, i64 } { [0 x i8]* bitcast ([59 x i8]* ``@str.0`` to [0 x i8]*), i64 59 }, i32 13, i32 3 }, align 8
 9: ``@__rustc_debug_gdb_scripts_section__`` = linkonce_odr unnamed_addr constant [34 x i8] c"01円gdb_load_rust_pretty_printers.py00円", section ".debug_gdb_scripts", align 1
 10:
 11: ; fn_parameters_on_different_lines_debuginfo::foo
 12: ; Function Attrs: nonlazybind uwtable
 13: define i32 ``@_ZN42fn_parameters_on_different_lines_debuginfo3foo17ha98e7c29f4ed8d60E(i32,`` i32) unnamed_addr #0 !dbg !5 {
 14: start:
 15: %y = alloca i32, align 4
 16: %x = alloca i32, align 4
 17: store i32 %0, i32* %x, align 4
 18: call void ``@llvm.dbg.declare(metadata`` i32* %x, metadata !10, metadata !DIExpression()), !dbg !11
 19: store i32 %1, i32* %y, align 4
 20: call void ``@llvm.dbg.declare(metadata`` i32* %y, metadata !12, metadata !DIExpression()), !dbg !11
 21: %2 = load i32, i32* %x, align 4, !dbg !13
 22: %3 = load i32, i32* %y, align 4, !dbg !14
 23: %4 = call { i32, i1 } ``@llvm.sadd.with.overflow.i32(i32`` %2, i32 %3), !dbg !13
 24: %5 = extractvalue { i32, i1 } %4, 0, !dbg !13
 25: %6 = extractvalue { i32, i1 } %4, 1, !dbg !13
 26: %7 = call i1 ``@llvm.expect.i1(i1`` %6, i1 false), !dbg !13
 27: br i1 %7, label %panic, label %bb1, !dbg !13
 28:
 29: bb1: ; preds = %start
 30: ret i32 %5, !dbg !15
 31:
 32: panic: ; preds = %start
 33: ; call core::panicking::panic
 34: call void ``@_ZN4core9panicking5panic17h2f49f09cf859b728E({`` [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly align 8 dereferenceable(40) bitcast ({ { [0 x i8]*, i64 }, { [0 x i8]*, i64 }, i32, i32 }* ``@panic_loc.2`` to { [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }*)), !dbg !13
 35: unreachable, !dbg !13
 36: }
 37:
 38: ; Function Attrs: nounwind readnone speculatable
 39: declare void ``@llvm.dbg.declare(metadata,`` metadata, metadata) #1
 40:
 41: ; Function Attrs: nounwind readnone speculatable
 42: declare { i32, i1 } ``@llvm.sadd.with.overflow.i32(i32,`` i32) #1
 43:
 44: ; Function Attrs: nounwind readnone
 45: declare i1 ``@llvm.expect.i1(i1,`` i1) #2
 46:
 47: ; core::panicking::panic
 48: ; Function Attrs: cold noinline noreturn nonlazybind uwtable
 49: declare void ``@_ZN4core9panicking5panic17h2f49f09cf859b728E({`` [0 x i64], { [0 x i8]*, i64 }, [0 x i64], { [0 x i8]*, i64 }, [0 x i32], i32, [0 x i32], i32, [0 x i32] }* noalias readonly align 8 dereferenceable(40)) unnamed_addr rust-lang#3
 50:
 51: attributes #0 = { nonlazybind uwtable "probe-stack"="__rust_probestack" "target-cpu"="x86-64" }
 52: attributes #1 = { nounwind readnone speculatable }
 53: attributes #2 = { nounwind readnone }
 54: attributes rust-lang#3 = { cold noinline noreturn nonlazybind uwtable "probe-stack"="__rust_probestack" "target-cpu"="x86-64" }
 55:
 56: !llvm.module.flags = !{!0, !1}
 57: !llvm.dbg.cu = !{!2}
 58:
 59: !0 = !{i32 2, !"RtLibUseGOT", i32 1}
 60: !1 = !{i32 2, !"Debug Info Version", i32 3}
 61: !2 = distinct !DICompileUnit(language: DW_LANG_Rust, file: !3, producer: "clang LLVM (rustc version 1.39.0 (4560ea7 2019年11月04日))", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4)
 62: !3 = !DIFile(filename: "tests/codegen/fn-parameters-on-different-lines-debuginfo.rs", directory: "/home/martin/src/rust")
 63: !4 = !{}
 64: !5 = distinct !DISubprogram(name: "foo", linkageName: "_ZN42fn_parameters_on_different_lines_debuginfo3foo17ha98e7c29f4ed8d60E", scope: !6, file: !3, line: 9, type: !7, scopeLine: 9, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !2, templateParams: !4, retainedNodes: !4)
 65: !6 = !DINamespace(name: "fn_parameters_on_different_lines_debuginfo", scope: null)
 66: !7 = !DISubroutineType(types: !8)
 67: !8 = !{!9, !9, !9}
 68: !9 = !DIBasicType(name: "i32", size: 32, encoding: DW_ATE_signed)
 69: !10 = !DILocalVariable(name: "x", arg: 1, scope: !5, file: !3, line: 1, type: !9)
same:16'0 X~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ error: no match found
same:16'1 ? possible intended match
 70: !11 = !DILocation(line: 1, scope: !5)
same:16'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 71: !12 = !DILocalVariable(name: "y", arg: 2, scope: !5, file: !3, line: 1, type: !9)
same:16'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 72: !13 = !DILocation(line: 13, column: 2, scope: !5)
same:16'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 73: !14 = !DILocation(line: 13, column: 6, scope: !5)
same:16'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 74: !15 = !DILocation(line: 13, column: 9, scope: !5)
same:16'0 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>>>>>
FAIL
With 1.88:
OK
```
<details>
compiler-errors pushed a commit that referenced this pull request Aug 31, 2025
...=jieyouxu
Rehome 30 `tests/ui/issues/` tests to other subdirectories under `tests/ui/` [#1 of Batch #2]
Part of rust-lang#133895
Methodology:
1. Refer to the previously written `tests/ui/SUMMARY.md`
2. Find an appropriate category for the test, using the original issue thread and the test contents.
3. Add the issue URL at the bottom (not at the top, as that would mess up stderr line numbers)
4. Rename the tests to make their purpose clearer
Inspired by the methodology that `@Kivooeo` was using.
r? `@jieyouxu`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Reviewers
No reviews
Assignees
No one assigned
Labels
None yet
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

AltStyle によって変換されたページ (->オリジナル) /