diff --git a/clang/lib/CIR/CodeGen/CIRGenExpr.cpp b/clang/lib/CIR/CodeGen/CIRGenExpr.cpp index 749f32292e25..abe2f39fb6b7 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExpr.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExpr.cpp @@ -269,7 +269,9 @@ LValue CIRGenFunction::buildLValueForField(LValue base, if (!IsInPreservedAIRegion && (!getDebugInfo() || !rec->hasAttr())) { llvm::StringRef fieldName = field->getName(); - unsigned fieldIndex = field->getFieldIndex(); + auto& layout = CGM.getTypes().getCIRGenRecordLayout(field->getParent()); + unsigned fieldIndex = layout.getCIRFieldNo(field); + if (CGM.LambdaFieldToName.count(field)) fieldName = CGM.LambdaFieldToName[field]; addr = buildAddrOfFieldStorage(*this, addr, field, fieldName, fieldIndex); diff --git a/clang/test/CIR/CodeGen/derived-to-base.cpp b/clang/test/CIR/CodeGen/derived-to-base.cpp index a1a5b25a7dc3..42a4279e4cff 100644 --- a/clang/test/CIR/CodeGen/derived-to-base.cpp +++ b/clang/test/CIR/CodeGen/derived-to-base.cpp @@ -82,7 +82,7 @@ void C3::Layer::Initialize() { // CHECK: cir.scope { // CHECK: %2 = cir.base_class_addr(%1 : cir.ptr ) -> cir.ptr -// CHECK: %3 = cir.get_member %2[0] {name = "m_C1"} : !cir.ptr -> !cir.ptr> +// CHECK: %3 = cir.get_member %2[1] {name = "m_C1"} : !cir.ptr -> !cir.ptr> // CHECK: %4 = cir.load %3 : cir.ptr >, !cir.ptr // CHECK: %5 = cir.const(#cir.ptr : !cir.ptr) : !cir.ptr // CHECK: %6 = cir.cmp(eq, %4, %5) : !cir.ptr, !cir.bool