@@ -162,7 +162,8 @@ static void initField(Block *B, std::byte *Ptr, bool IsConst, bool IsMutable,
162
162
}
163
163
164
164
static void initBase (Block *B, std::byte *Ptr , bool IsConst, bool IsMutable,
165
- bool IsActive, const Descriptor *D, unsigned FieldOffset) {
165
+ bool IsActive, const Descriptor *D, unsigned FieldOffset,
166
+ bool IsVirtualBase) {
166
167
assert (D);
167
168
assert (D->ElemRecord );
168
169
@@ -172,13 +173,14 @@ static void initBase(Block *B, std::byte *Ptr, bool IsConst, bool IsMutable,
172
173
Desc->Desc = D;
173
174
Desc->IsInitialized = D->IsArray ;
174
175
Desc->IsBase = true ;
176
+ Desc->IsVirtualBase = IsVirtualBase;
175
177
Desc->IsActive = IsActive && !IsUnion;
176
178
Desc->IsConst = IsConst || D->IsConst ;
177
179
Desc->IsFieldMutable = IsMutable || D->IsMutable ;
178
180
179
181
for (const auto &V : D->ElemRecord ->bases ())
180
182
initBase (B, Ptr + FieldOffset, IsConst, IsMutable, IsActive, V.Desc ,
181
- V.Offset );
183
+ V.Offset , false );
182
184
for (const auto &F : D->ElemRecord ->fields ())
183
185
initField (B, Ptr + FieldOffset, IsConst, IsMutable, IsActive, IsUnion,
184
186
F.Desc , F.Offset );
@@ -187,11 +189,11 @@ static void initBase(Block *B, std::byte *Ptr, bool IsConst, bool IsMutable,
187
189
static void ctorRecord (Block *B, std::byte *Ptr , bool IsConst, bool IsMutable,
188
190
bool IsActive, const Descriptor *D) {
189
191
for (const auto &V : D->ElemRecord ->bases ())
190
- initBase (B, Ptr , IsConst, IsMutable, IsActive, V.Desc , V.Offset );
192
+ initBase (B, Ptr , IsConst, IsMutable, IsActive, V.Desc , V.Offset , false );
191
193
for (const auto &F : D->ElemRecord ->fields ())
192
194
initField (B, Ptr , IsConst, IsMutable, IsActive, D->ElemRecord ->isUnion (), F.Desc , F.Offset );
193
195
for (const auto &V : D->ElemRecord ->virtual_bases ())
194
- initBase (B, Ptr , IsConst, IsMutable, IsActive, V.Desc , V.Offset );
196
+ initBase (B, Ptr , IsConst, IsMutable, IsActive, V.Desc , V.Offset , true );
195
197
}
196
198
197
199
static void destroyField (Block *B, std::byte *Ptr , const Descriptor *D,
0 commit comments