1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Fixed crash with illegal recursive generic definitions

This commit is contained in:
Brian Fiete 2021-02-12 08:04:08 -08:00
parent 3cdc70c1be
commit fda6c326c0

View file

@ -3403,6 +3403,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
for (auto& validateEntry : deferredTypeValidateList) for (auto& validateEntry : deferredTypeValidateList)
{ {
SetAndRestoreValue<BfTypeReference*> prevAttributeTypeRef(typeState.mCurAttributeTypeRef, validateEntry.mTypeRef);
SetAndRestoreValue<bool> ignoreErrors(mIgnoreErrors, mIgnoreErrors | validateEntry.mIgnoreErrors); SetAndRestoreValue<bool> ignoreErrors(mIgnoreErrors, mIgnoreErrors | validateEntry.mIgnoreErrors);
ValidateGenericConstraints(validateEntry.mTypeRef, validateEntry.mGenericType, false); ValidateGenericConstraints(validateEntry.mTypeRef, validateEntry.mGenericType, false);
} }
@ -4331,6 +4332,12 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
} }
if ((mCompiler->mOptions.mAllowHotSwapping) && (typeInstance->mDefineState < BfTypeDefineState_Defined)) if ((mCompiler->mOptions.mAllowHotSwapping) && (typeInstance->mDefineState < BfTypeDefineState_Defined))
{
if (typeInstance->mHotTypeData == NULL)
{
BF_ASSERT(typeInstance->mTypeFailed);
}
else
{ {
auto hotTypeVersion = typeInstance->mHotTypeData->mTypeVersions.back(); auto hotTypeVersion = typeInstance->mHotTypeData->mTypeVersions.back();
@ -4361,6 +4368,7 @@ void BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy
for (auto member : hotTypeVersion->mMembers) for (auto member : hotTypeVersion->mMembers)
member->mRefCount++; member->mRefCount++;
} }
}
if (typeInstance->mDefineState < BfTypeDefineState_Defined) if (typeInstance->mDefineState < BfTypeDefineState_Defined)
{ {