|
@@ -314,9 +314,13 @@ void CGRecordLowering::lowerUnion() {
|
|
|
// If this is the case, then we aught not to try and come up with a "better"
|
|
|
// type, it might not be very easy to come up with a Constant which
|
|
|
// correctly initializes it.
|
|
|
- if (!SeenNamedMember && Field->getDeclName()) {
|
|
|
- SeenNamedMember = true;
|
|
|
- if (!isZeroInitializable(Field)) {
|
|
|
+ if (!SeenNamedMember) {
|
|
|
+ SeenNamedMember = Field->getIdentifier();
|
|
|
+ if (!SeenNamedMember)
|
|
|
+ if (const auto *FieldRD =
|
|
|
+ dyn_cast_or_null<RecordDecl>(Field->getType()->getAsTagDecl()))
|
|
|
+ SeenNamedMember = FieldRD->findFirstNamedDataMember();
|
|
|
+ if (SeenNamedMember && !isZeroInitializable(Field)) {
|
|
|
IsZeroInitializable = IsZeroInitializableAsBase = false;
|
|
|
StorageType = FieldType;
|
|
|
}
|