Improve/add comments

This commit is contained in:
Hans Kratz 2021-07-21 12:41:27 +02:00
parent e89908231b
commit 50be80b22d
2 changed files with 3 additions and 2 deletions

View file

@ -80,8 +80,7 @@ pub struct CodegenCx<'ll, 'tcx> {
pub isize_ty: &'ll Type,
/// Cache for the mapping from source index to llvm index for struct fields,
/// necessary because the mapping depends on padding and thus depens on
/// TyAndLayout.
/// only present if synthetic fields are inserted for padding.
pub field_projection_cache: RefCell<FxHashMap<TyAndLayout<'tcx>, Vec<u32>>>,
pub coverage_cx: Option<coverageinfo::CrateCoverageContext<'ll, 'tcx>>,

View file

@ -363,6 +363,8 @@ impl<'tcx> LayoutLlvmExt<'tcx> for TyAndLayout<'tcx> {
FieldsShape::Array { .. } => index as u64,
// Look up llvm field index in projection cache if present. If no projection cache
// is present no padding is used and the llvm field index matches the memory index.
FieldsShape::Arbitrary { .. } => match cx.field_projection_cache.borrow().get(self) {
Some(projection) => projection[index] as u64,
None => self.fields.memory_index(index) as u64,