diff options
| author | bors <bors@rust-lang.org> | 2024-08-21 17:18:07 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-08-21 17:18:07 +0000 |
| commit | 6b678c57b63b3062fb97130b3617b82657f59c80 (patch) | |
| tree | cdb3668b09860967f31162df4cb1c915fc62ccb8 /compiler/rustc_target/src | |
| parent | 982c6f8721416431ec62bb0b9105c0578a9fc603 (diff) | |
| parent | 9fd2832a7ee414c8baf8ab1d3963443cd9b9fff3 (diff) | |
| download | rust-6b678c57b63b3062fb97130b3617b82657f59c80.tar.gz rust-6b678c57b63b3062fb97130b3617b82657f59c80.zip | |
Auto merge of #129359 - matthiaskrgr:rollup-nyre44t, r=matthiaskrgr
Rollup of 10 pull requests Successful merges: - #128627 (Special case DUMMY_SP to emit line 0/column 0 locations on DWARF platforms.) - #128843 (Minor Refactor: Remove a Redundant Conditional Check) - #129179 (CFI: Erase regions when projecting ADT to its transparent non-1zst field) - #129281 (Tweak unreachable lint wording) - #129312 (Fix stability attribute of `impl !Error for &str`) - #129332 (Avoid extra `cast()`s after `CStr::as_ptr()`) - #129339 (Make `ArgAbi::make_indirect_force` more specific) - #129344 (Use `bool` in favor of `Option<()>` for diagnostics) - #129345 (Use shorthand field initialization syntax more aggressively in the compiler) - #129355 (fix comment on PlaceMention semantics) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_target/src')
| -rw-r--r-- | compiler/rustc_target/src/abi/call/mod.rs | 18 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/powerpc.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/s390x.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/sparc64.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_target/src/abi/call/x86_win64.rs | 2 |
5 files changed, 18 insertions, 8 deletions
diff --git a/compiler/rustc_target/src/abi/call/mod.rs b/compiler/rustc_target/src/abi/call/mod.rs index 25e4d70945b..c1ddfcb2f90 100644 --- a/compiler/rustc_target/src/abi/call/mod.rs +++ b/compiler/rustc_target/src/abi/call/mod.rs @@ -642,7 +642,7 @@ impl<'a, Ty> ArgAbi<'a, Ty> { pub fn make_indirect(&mut self) { match self.mode { PassMode::Direct(_) | PassMode::Pair(_, _) => { - self.make_indirect_force(); + self.mode = Self::indirect_pass_mode(&self.layout); } PassMode::Indirect { attrs: _, meta_attrs: _, on_stack: false } => { // already indirect @@ -652,9 +652,19 @@ impl<'a, Ty> ArgAbi<'a, Ty> { } } - /// Same as make_indirect, but doesn't check the current `PassMode`. - pub fn make_indirect_force(&mut self) { - self.mode = Self::indirect_pass_mode(&self.layout); + /// Same as `make_indirect`, but for arguments that are ignored. Only needed for ABIs that pass + /// ZSTs indirectly. + pub fn make_indirect_from_ignore(&mut self) { + match self.mode { + PassMode::Ignore => { + self.mode = Self::indirect_pass_mode(&self.layout); + } + PassMode::Indirect { attrs: _, meta_attrs: _, on_stack: false } => { + // already indirect + return; + } + _ => panic!("Tried to make {:?} indirect (expected `PassMode::Ignore`)", self.mode), + } } /// Pass this argument indirectly, by placing it at a fixed stack offset. diff --git a/compiler/rustc_target/src/abi/call/powerpc.rs b/compiler/rustc_target/src/abi/call/powerpc.rs index cb80d64c943..8f67f57cd2b 100644 --- a/compiler/rustc_target/src/abi/call/powerpc.rs +++ b/compiler/rustc_target/src/abi/call/powerpc.rs @@ -16,7 +16,7 @@ fn classify_arg<Ty>(cx: &impl HasTargetSpec, arg: &mut ArgAbi<'_, Ty>) { && matches!(&*cx.target_spec().env, "gnu" | "musl" | "uclibc") && arg.layout.is_zst() { - arg.make_indirect_force(); + arg.make_indirect_from_ignore(); } return; } diff --git a/compiler/rustc_target/src/abi/call/s390x.rs b/compiler/rustc_target/src/abi/call/s390x.rs index 7dcbb3e4a9e..901ce139c7b 100644 --- a/compiler/rustc_target/src/abi/call/s390x.rs +++ b/compiler/rustc_target/src/abi/call/s390x.rs @@ -28,7 +28,7 @@ where && matches!(&*cx.target_spec().env, "gnu" | "musl" | "uclibc") && arg.layout.is_zst() { - arg.make_indirect_force(); + arg.make_indirect_from_ignore(); } return; } diff --git a/compiler/rustc_target/src/abi/call/sparc64.rs b/compiler/rustc_target/src/abi/call/sparc64.rs index 3b2bf9b3187..311691d8efb 100644 --- a/compiler/rustc_target/src/abi/call/sparc64.rs +++ b/compiler/rustc_target/src/abi/call/sparc64.rs @@ -225,7 +225,7 @@ where && matches!(&*cx.target_spec().env, "gnu" | "musl" | "uclibc") && arg.layout.is_zst() { - arg.make_indirect_force(); + arg.make_indirect_from_ignore(); } return; } diff --git a/compiler/rustc_target/src/abi/call/x86_win64.rs b/compiler/rustc_target/src/abi/call/x86_win64.rs index 6ca01cf84ea..720707ef53f 100644 --- a/compiler/rustc_target/src/abi/call/x86_win64.rs +++ b/compiler/rustc_target/src/abi/call/x86_win64.rs @@ -43,7 +43,7 @@ pub fn compute_abi_info<Ty>(cx: &impl HasTargetSpec, fn_abi: &mut FnAbi<'_, Ty>) && cx.target_spec().env == "gnu" && arg.layout.is_zst() { - arg.make_indirect_force(); + arg.make_indirect_from_ignore(); } continue; } |
