mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-22 04:27:33 +00:00
![]() Stop using LLVM struct types for byval/sret For `byval` and `sret`, the type has no semantic meaning, only the size matters\*†. Using `[N x i8]` is a more direct way to specify that we want `N` bytes, and avoids relying on LLVM's struct layout. \*: The alignment would matter, if we didn't explicitly specify it. From what I can tell, we always specified the alignment for `sret`; for `byval`, we didn't until #112157. †: For `byval`, the hidden copy may be impacted by padding in the LLVM struct type, i.e. padding bytes may not be copied. (I'm not sure if this is done today, but I think it would be legal.) But we manually pad our LLVM struct types specifically to avoid there ever being LLVM-visible padding, so that shouldn't be an issue. Split out from #121577. r? `@nikic` |
||
---|---|---|
.. | ||
back | ||
coverageinfo | ||
debuginfo | ||
llvm | ||
abi.rs | ||
allocator.rs | ||
asm.rs | ||
attributes.rs | ||
base.rs | ||
builder.rs | ||
callee.rs | ||
common.rs | ||
consts.rs | ||
context.rs | ||
declare.rs | ||
errors.rs | ||
intrinsic.rs | ||
lib.rs | ||
llvm_util.rs | ||
mono_item.rs | ||
type_.rs | ||
type_of.rs | ||
va_arg.rs | ||
value.rs |