@@ -137,9 +137,8 @@ static void moveArrayDesc(Block *B, const std::byte *Src, std::byte *Dst,
137
137
}
138
138
139
139
static void initField (Block *B, std::byte *Ptr, bool IsConst, bool IsMutable,
140
- bool IsActive, const Descriptor *D,
140
+ bool IsActive, bool IsUnion, const Descriptor *D,
141
141
unsigned FieldOffset) {
142
- bool IsUnion = false ; // FIXME
143
142
auto *Desc = reinterpret_cast <InlineDescriptor *>(Ptr + FieldOffset) - 1 ;
144
143
Desc->Offset = FieldOffset;
145
144
Desc->Desc = D;
@@ -174,7 +173,7 @@ static void initBase(Block *B, std::byte *Ptr, bool IsConst, bool IsMutable,
174
173
initBase (B, Ptr + FieldOffset, IsConst, IsMutable, IsActive, V.Desc ,
175
174
V.Offset , false );
176
175
for (const auto &F : D->ElemRecord ->fields ())
177
- initField (B, Ptr + FieldOffset, IsConst, IsMutable, IsActive, F.Desc ,
176
+ initField (B, Ptr + FieldOffset, IsConst, IsMutable, IsActive, IsUnion, F.Desc ,
178
177
F.Offset );
179
178
180
179
// If this is initializing a virtual base, we do NOT want to consider its
@@ -193,7 +192,7 @@ static void ctorRecord(Block *B, std::byte *Ptr, bool IsConst, bool IsMutable,
193
192
for (const auto &V : D->ElemRecord ->bases ())
194
193
initBase (B, Ptr, IsConst, IsMutable, IsActive, V.Desc , V.Offset , false );
195
194
for (const auto &F : D->ElemRecord ->fields ())
196
- initField (B, Ptr, IsConst, IsMutable, IsActive, F.Desc , F.Offset );
195
+ initField (B, Ptr, IsConst, IsMutable, IsActive, D-> ElemRecord -> isUnion (), F.Desc , F.Offset );
197
196
for (const auto &V : D->ElemRecord ->virtual_bases ())
198
197
initBase (B, Ptr, IsConst, IsMutable, IsActive, V.Desc , V.Offset , true );
199
198
}
0 commit comments