diff options
| author | Ralf Jung <post@ralfj.de> | 2023-11-19 16:03:07 +0100 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2023-11-19 16:03:07 +0100 |
| commit | c7b8dd4e93ff1fa5e2136cdd43e1e563ae45f3b8 (patch) | |
| tree | 37168a4b5c40bc95ce42592687802f58bae5a87c /compiler | |
| parent | cfb47ca5df93c82983563fa37673f7108eb94df4 (diff) | |
| download | rust-c7b8dd4e93ff1fa5e2136cdd43e1e563ae45f3b8.tar.gz rust-c7b8dd4e93ff1fa5e2136cdd43e1e563ae45f3b8.zip | |
make_direct_deprecated: dont overwrite already set attributes
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_target/src/abi/call/mod.rs | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/compiler/rustc_target/src/abi/call/mod.rs b/compiler/rustc_target/src/abi/call/mod.rs index ab0a24a6ebb..bbf21f169bb 100644 --- a/compiler/rustc_target/src/abi/call/mod.rs +++ b/compiler/rustc_target/src/abi/call/mod.rs @@ -584,20 +584,26 @@ impl<'a, Ty> ArgAbi<'a, Ty> { /// Only exists because of past ABI mistakes that will take time to fix /// (see <https://github.com/rust-lang/rust/issues/115666>). pub fn make_direct_deprecated(&mut self) { - self.mode = PassMode::Direct(ArgAttributes::new()); + match self.mode { + PassMode::Indirect { .. } => { + self.mode = PassMode::Direct(ArgAttributes::new()); + } + PassMode::Ignore | PassMode::Direct(_) | PassMode::Pair(_, _) => return, // already direct + _ => panic!("Tried to make {:?} direct", self.mode), + } } pub fn make_indirect(&mut self) { match self.mode { - PassMode::Direct(_) | PassMode::Pair(_, _) => {} + PassMode::Direct(_) | PassMode::Pair(_, _) => { + self.mode = Self::indirect_pass_mode(&self.layout); + } PassMode::Indirect { attrs: _, meta_attrs: _, on_stack: false } => { // already indirect return; } _ => panic!("Tried to make {:?} indirect", self.mode), } - - self.mode = Self::indirect_pass_mode(&self.layout); } pub fn make_indirect_byval(&mut self, byval_align: Option<Align>) { |
