summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_target/src/abi/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_target/src/abi/mod.rs')
-rw-r--r--compiler/rustc_target/src/abi/mod.rs15
1 files changed, 15 insertions, 0 deletions
diff --git a/compiler/rustc_target/src/abi/mod.rs b/compiler/rustc_target/src/abi/mod.rs
index 8d2e92cc7..589cd3cf9 100644
--- a/compiler/rustc_target/src/abi/mod.rs
+++ b/compiler/rustc_target/src/abi/mod.rs
@@ -124,6 +124,21 @@ impl<'a, Ty> TyAndLayout<'a, Ty> {
{
Ty::is_unit(self)
}
+
+ pub fn offset_of_subfield<C>(self, cx: &C, indices: impl Iterator<Item = usize>) -> Size
+ where
+ Ty: TyAbiInterface<'a, C>,
+ {
+ let mut layout = self;
+ let mut offset = Size::ZERO;
+
+ for index in indices {
+ offset += layout.fields.offset(index);
+ layout = layout.field(cx, index);
+ }
+
+ offset
+ }
}
impl<'a, Ty> TyAndLayout<'a, Ty> {