diff options
| author | Celina G. Val <celinval@amazon.com> | 2023-12-19 11:04:34 -0800 |
|---|---|---|
| committer | Celina G. Val <celinval@amazon.com> | 2023-12-19 11:04:34 -0800 |
| commit | 76b3e6de558cc67dca0098def00b0ee55dfc8d58 (patch) | |
| tree | b36ed88fc8cd527128cf735a91476f654418bd7d /compiler/rustc_smir/src | |
| parent | 1a83c5b55bdad84baca69d121d9c3e6f357e8570 (diff) | |
| download | rust-76b3e6de558cc67dca0098def00b0ee55dfc8d58.tar.gz rust-76b3e6de558cc67dca0098def00b0ee55dfc8d58.zip | |
Fix c_variadic flag and add opaque info to PassMode
We should expand the information in PassMode later.
Diffstat (limited to 'compiler/rustc_smir/src')
| -rw-r--r-- | compiler/rustc_smir/src/rustc_smir/convert/abi.rs | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/compiler/rustc_smir/src/rustc_smir/convert/abi.rs b/compiler/rustc_smir/src/rustc_smir/convert/abi.rs index 46ae0929bcd..632e97b32f5 100644 --- a/compiler/rustc_smir/src/rustc_smir/convert/abi.rs +++ b/compiler/rustc_smir/src/rustc_smir/convert/abi.rs @@ -66,11 +66,14 @@ impl<'tcx> Stable<'tcx> for rustc_target::abi::call::FnAbi<'tcx, ty::Ty<'tcx>> { type T = FnAbi; fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T { + assert!(self.args.len() >= self.fixed_count as usize); + assert!(!self.c_variadic || matches!(self.conv, Conv::C)); FnAbi { args: self.args.as_ref().stable(tables), ret: self.ret.stable(tables), fixed_count: self.fixed_count, conv: self.conv.stable(tables), + c_variadic: self.c_variadic, } } } @@ -122,10 +125,20 @@ impl<'tcx> Stable<'tcx> for rustc_target::abi::call::PassMode { fn stable(&self, _tables: &mut Tables<'tcx>) -> Self::T { match self { rustc_target::abi::call::PassMode::Ignore => PassMode::Ignore, - rustc_target::abi::call::PassMode::Direct(_) => PassMode::Direct, - rustc_target::abi::call::PassMode::Pair(_, _) => PassMode::Pair, - rustc_target::abi::call::PassMode::Cast { .. } => PassMode::Cast, - rustc_target::abi::call::PassMode::Indirect { .. } => PassMode::Indirect, + rustc_target::abi::call::PassMode::Direct(attr) => PassMode::Direct(opaque(attr)), + rustc_target::abi::call::PassMode::Pair(first, second) => { + PassMode::Pair(opaque(first), opaque(second)) + } + rustc_target::abi::call::PassMode::Cast { pad_i32, cast } => { + PassMode::Cast { pad_i32: *pad_i32, cast: opaque(cast) } + } + rustc_target::abi::call::PassMode::Indirect { attrs, meta_attrs, on_stack } => { + PassMode::Indirect { + attrs: opaque(attrs), + meta_attrs: opaque(meta_attrs), + on_stack: *on_stack, + } + } } } } |
