diff options
| author | Nikita Popov <npopov@redhat.com> | 2025-08-26 11:13:03 +0200 |
|---|---|---|
| committer | Nikita Popov <npopov@redhat.com> | 2025-08-26 16:16:23 +0200 |
| commit | c3ab409b4fa3b1fb18f34877d9811bb502ed507f (patch) | |
| tree | 05ab8323d24155dd4d9459c873ce3f2358141503 /compiler/rustc_target/src | |
| parent | ace9a74442aec13c75532d34e15d97428056866d (diff) | |
| download | rust-c3ab409b4fa3b1fb18f34877d9811bb502ed507f.tar.gz rust-c3ab409b4fa3b1fb18f34877d9811bb502ed507f.zip | |
Use captures(address) instead of captures(none) for indirect args
While provenance cannot be captured through these arguments, the address / object identity can.
Diffstat (limited to 'compiler/rustc_target/src')
| -rw-r--r-- | compiler/rustc_target/src/callconv/mod.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/compiler/rustc_target/src/callconv/mod.rs b/compiler/rustc_target/src/callconv/mod.rs index 5f2a6f7ba38..7a7c63c475b 100644 --- a/compiler/rustc_target/src/callconv/mod.rs +++ b/compiler/rustc_target/src/callconv/mod.rs @@ -114,7 +114,7 @@ mod attr_impl { bitflags::bitflags! { impl ArgAttribute: u8 { const NoAlias = 1 << 1; - const NoCapture = 1 << 2; + const CapturesAddress = 1 << 2; const NonNull = 1 << 3; const ReadOnly = 1 << 4; const InReg = 1 << 5; @@ -400,11 +400,11 @@ impl<'a, Ty> ArgAbi<'a, Ty> { let mut attrs = ArgAttributes::new(); // For non-immediate arguments the callee gets its own copy of - // the value on the stack, so there are no aliases. It's also - // program-invisible so can't possibly capture + // the value on the stack, so there are no aliases. The function + // can capture the address of the argument, but not the provenance. attrs .set(ArgAttribute::NoAlias) - .set(ArgAttribute::NoCapture) + .set(ArgAttribute::CapturesAddress) .set(ArgAttribute::NonNull) .set(ArgAttribute::NoUndef); attrs.pointee_size = layout.size; |
