rust/compiler
Jakub Beránek 4479d42d60
Rollup merge of #139340 - beetrees:riscv-float-struct-abi, r=workingjubilee
Fix RISC-V C function ABI when passing/returning structs containing floats

RISC-V passes structs containing only one or two floats (or a float and integer pair) in registers, as long as the individual floats/integers fit in a single corresponding register (see [the ABI specification](https://github.com/riscv-non-isa/riscv-elf-psabi-doc/releases/download/v1.0/riscv-abi.pdf) for details). Before this PR, Rust would not check what offset the second float/integer was at, instead assuming that it was at the standard offset for its default alignment. However, as the offset can be affected by `#[repr(align(N))]` and `#[repr(packed)]`, this caused miscompilations (see #115609). To fix this, this PR introduces a `rest_offset` field to `CastTarget` that can be used to explicitly specify at what offset the `rest` part of the cast is located at.

While fixing this, I discovered another bug: the size of the cast target was being used as the size of the MIR return place (when the function was using a `PassMode::Cast` return type). However, the cast target is allowed to be smaller than the size of the actual type, causing a miscompilation. This PR fixes this issue by using the largest of the size of the type and the size of the cast target as the size of the MIR return place, ensuring all reads/writes will be inbounds.

Fixes the RISC-V part of #115609.

cc target maintainers of `riscv64gc-unknown-linux-gnu`: `@kito-cheng` `@michaelmaitland` `@robin-randhawa-sifive` `@topperc`

r? `@workingjubilee`
2025-06-16 19:54:32 +02:00
..
rustc Revert "Use workspace lints for crates in compiler/ #138084" 2025-03-10 18:12:47 +08:00
rustc_abi add extern "custom" functions 2025-06-12 20:27:10 +02:00
rustc_arena Introduce Arena::try_alloc_from_iter. 2025-04-19 01:13:18 +00:00
rustc_ast Rollup merge of #134661 - dtolnay:prefixattr, r=fmease 2025-06-15 23:51:54 +02:00
rustc_ast_ir Use -Wunused_crate_dependencies for compiler crates. 2025-03-20 08:59:43 +11:00
rustc_ast_lowering Auto merge of #142455 - jdonszelmann:attempt-to-mitigate-delayed-lint-perf-problems, r=oli-obk 2025-06-15 16:52:31 +00:00
rustc_ast_passes Auto merge of #142443 - matthiaskrgr:rollup-l1l6d0v, r=matthiaskrgr 2025-06-13 17:44:15 +00:00
rustc_ast_pretty Rollup merge of #142069 - nnethercote:Zmacro-stats, r=petrochenkov 2025-06-13 05:16:56 +02:00
rustc_attr_data_structures Rollup merge of #142082 - xizheyin:rustc_attr_data_structures, r=jdonszelmann 2025-06-16 14:31:09 +02:00
rustc_attr_parsing Rollup merge of #142158 - xizheyin:141617, r=jdonszelmann 2025-06-13 05:16:56 +02:00
rustc_baked_icu_data Add unreachable_pub to RUSTC_LINT_FLAGS for compiler/ crates. 2025-03-11 13:14:21 +11:00
rustc_borrowck Auto merge of #142550 - fmease:rollup-fteyzcv, r=fmease 2025-06-16 00:39:47 +00:00
rustc_builtin_macros use if let guards where possible 2025-06-15 15:46:20 +08:00
rustc_codegen_cranelift Fix RISC-V C function ABI when passing/returning structs containing floats 2025-06-16 10:14:07 +01:00
rustc_codegen_gcc Fix RISC-V C function ABI when passing/returning structs containing floats 2025-06-16 10:14:07 +01:00
rustc_codegen_llvm Fix RISC-V C function ABI when passing/returning structs containing floats 2025-06-16 10:14:07 +01:00
rustc_codegen_ssa Fix RISC-V C function ABI when passing/returning structs containing floats 2025-06-16 10:14:07 +01:00
rustc_const_eval Rollup merge of #142405 - oli-obk:type-once, r=RalfJung 2025-06-13 20:59:17 -07:00
rustc_data_structures Overhaul the thousands module. 2025-06-12 15:26:06 +10:00
rustc_driver Remove recursion_limit increases. 2025-04-02 16:25:27 +11:00
rustc_driver_impl Rollup merge of #141769 - bjorn3:codegen_metadata_module_rework, r=workingjubilee,saethlin 2025-06-15 23:51:54 +02:00
rustc_error_codes intrinsics: use const generic to set atomic ordering 2025-06-07 21:45:58 +02:00
rustc_error_messages Fix review comments 2025-06-06 14:20:48 +00:00
rustc_errors introduce new lint infra 2025-06-12 09:56:47 +02:00
rustc_expand Remove an njn: comment accidentaly left behind. 2025-06-16 15:18:48 +10:00
rustc_feature clarify rustc_do_not_const_check comment 2025-06-15 20:40:08 +08:00
rustc_fluent_macro Remove all unused feature gates from the compiler 2025-06-08 14:50:42 +00:00
rustc_fs_util Retry if creating temp fails with access denied 2025-04-25 11:28:36 +00:00
rustc_graphviz Remove #![warn(unreachable_pub)] from all compiler/ crates. 2025-03-11 13:14:21 +11:00
rustc_hashes Revert "Use workspace lints for crates in compiler/ #138084" 2025-03-10 18:12:47 +08:00
rustc_hir Rollup merge of #134661 - dtolnay:prefixattr, r=fmease 2025-06-15 23:51:54 +02:00
rustc_hir_analysis Auto merge of #142455 - jdonszelmann:attempt-to-mitigate-delayed-lint-perf-problems, r=oli-obk 2025-06-15 16:52:31 +00:00
rustc_hir_pretty Reduce precedence of expressions that have an outer attr 2025-06-13 18:09:13 -07:00
rustc_hir_typeck Rollup merge of #134661 - dtolnay:prefixattr, r=fmease 2025-06-15 23:51:54 +02:00
rustc_incremental Auto merge of #139758 - Zoxc:thread-local-graph, r=oli-obk 2025-05-07 12:39:54 +00:00
rustc_index index: add method for checking range on DenseBitSet 2025-06-04 00:47:12 +02:00
rustc_index_macros In rustc_mir_tranform, iterate over index newtypes instead of ints 2025-04-12 11:53:07 +00:00
rustc_infer Auto merge of #141763 - lcnr:fixme-gamer, r=BoxyUwU 2025-06-11 11:47:05 +00:00
rustc_interface Rollup merge of #141769 - bjorn3:codegen_metadata_module_rework, r=workingjubilee,saethlin 2025-06-15 23:51:54 +02:00
rustc_lexer rustc_lexer: typo fix + small cleanups 2025-06-06 13:08:16 +00:00
rustc_lint Rollup merge of #134661 - dtolnay:prefixattr, r=fmease 2025-06-15 23:51:54 +02:00
rustc_lint_defs Rollup merge of #141937 - WaffleLapkin:never-report-in-deps, r=oli-obk,traviscross 2025-06-15 23:51:55 +02:00
rustc_llvm rustc_llvm: add Windows system libs only when cross-compiling from Windows 2025-05-31 15:47:14 +02:00
rustc_log Add documentation for init_logger_with_additional_layer 2025-06-12 12:11:15 +02:00
rustc_macros Remove all unused feature gates from the compiler 2025-06-08 14:50:42 +00:00
rustc_metadata Rollup merge of #141769 - bjorn3:codegen_metadata_module_rework, r=workingjubilee,saethlin 2025-06-15 23:51:54 +02:00
rustc_middle Rollup merge of #142450 - xizheyin:rustc-query-doc, r=SparrowLii 2025-06-16 14:31:12 +02:00
rustc_mir_build Unimplement unsized_locals 2025-06-13 01:16:36 +02:00
rustc_mir_dataflow update cfg(bootstrap) 2025-05-12 15:33:37 +02:00
rustc_mir_transform Rollup merge of #142347 - azhogin:azhogin/async-drop-storage-live-dead-fix, r=oli-obk 2025-06-15 23:51:56 +02:00
rustc_monomorphize Remove all support for wasm's legacy ABI 2025-06-14 09:57:06 +00:00
rustc_next_trait_solver TypeVisiting binders no longer requires TypeFolding its interior 2025-06-13 17:54:45 +00:00
rustc_parse use if let guards where possible 2025-06-15 15:46:20 +08:00
rustc_parse_format Add ParseMode::Diagnostic unit tests 2025-06-09 16:28:58 +02:00
rustc_passes Rollup merge of #142158 - xizheyin:141617, r=jdonszelmann 2025-06-13 05:16:56 +02:00
rustc_pattern_analysis Use builin_index instead of hand-rolling it 2025-05-28 10:03:01 +00:00
rustc_privacy Reorder fields in hir::ItemKind variants. 2025-05-30 02:23:20 +10:00
rustc_proc_macro Do not get proc_macro from the sysroot in rustc 2025-05-27 15:49:28 +00:00
rustc_query_impl Auto merge of #140145 - Zoxc:job-server-proxy, r=SparrowLii 2025-05-01 04:11:52 +00:00
rustc_query_system Do not clone Arc when hashing span. 2025-06-11 23:44:22 +00:00
rustc_resolve Auto merge of #134841 - estebank:serde-attr-4, r=wesleywiser 2025-06-13 22:59:24 +00:00
rustc_sanitizers Replace some Option<Span> with Span and use DUMMY_SP instead of None 2025-06-05 14:14:59 +00:00
rustc_serialize Zero the buffer passed from write_with 2025-04-25 07:14:27 +02:00
rustc_session Rollup merge of #141769 - bjorn3:codegen_metadata_module_rework, r=workingjubilee,saethlin 2025-06-15 23:51:54 +02:00
rustc_smir Implement Stable for Discr 2025-06-16 10:51:58 +03:00
rustc_span Auto merge of #142388 - cjgillot:span-hash, r=davidtwco 2025-06-15 05:27:08 +00:00
rustc_symbol_mangling Rename unpack to kind 2025-05-27 11:14:45 +00:00
rustc_target Fix RISC-V C function ABI when passing/returning structs containing floats 2025-06-16 10:14:07 +01:00
rustc_trait_selection Rollup merge of #141811 - mejrs:bye_locals, r=compiler-errors 2025-06-14 11:27:10 +02:00
rustc_traits FIXME(-Znext-solver) triage 2025-06-03 14:23:56 +02:00
rustc_transmute transmutability: shift abstraction boundary 2025-06-09 14:08:12 +00:00
rustc_ty_utils Remove all support for wasm's legacy ABI 2025-06-14 09:57:06 +00:00
rustc_type_ir Auto merge of #142430 - compiler-errors:external-constraints, r=lcnr 2025-06-15 12:55:05 +00:00
rustc_type_ir_macros Split TypeFolder and FallibleTypeFolder 2025-04-15 18:30:35 +00:00
stable_mir Change rustc_driver dependency on stable_mir crate 2025-04-30 15:39:52 -07:00