From ef579301701e454f5a22ff049a7f2d2a98bd6286 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 27 Sep 2020 22:21:15 -0700 Subject: [PATCH] Fixed lockup check iface conformance in failed type --- IDEHelper/Compiler/BfModule.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index eeea5b5e..61fc7014 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -5337,8 +5337,8 @@ BfIRValue BfModule::CreateTypeData(BfType* type, Dictionary& usedStrin BfMethodInstance* declaringMethodInstance = (BfMethodInstance*)entry.mDeclaringMethod; if ((declaringMethodInstance != NULL) && (declaringMethodInstance->mMethodInstanceGroup->IsImplemented()) && (declaringMethodInstance->mIsReified)) { - BF_ASSERT(entry.mImplementingMethod.mTypeInstance->mMethodInstanceGroups[entry.mImplementingMethod.mMethodNum].IsImplemented()); - BF_ASSERT(entry.mImplementingMethod.mTypeInstance->mMethodInstanceGroups[entry.mImplementingMethod.mMethodNum].mDefault->mIsReified); + BF_ASSERT(entry.mImplementingMethod.mTypeInstance->mMethodInstanceGroups[entry.mImplementingMethod.mMethodNum].IsImplemented()); + BF_ASSERT(entry.mImplementingMethod.mTypeInstance->mMethodInstanceGroups[entry.mImplementingMethod.mMethodNum].mDefault->mIsReified); BfMethodInstance* methodInstance = (BfMethodInstance*)entry.mImplementingMethod; if ((methodInstance != NULL) && (!methodInstance->mMethodDef->mIsAbstract)) { @@ -21974,7 +21974,10 @@ bool BfModule::SlotVirtualMethod(BfMethodInstance* methodInstance, BfAmbiguityCo bool storeIFaceMethod = false; if ((mCompiler->mPassInstance->HasFailed()) && (iMethodIdx >= (int)ifaceInst->mMethodInstanceGroups.size())) + { + checkMethodDef = checkMethodDef->mNextWithSameName; continue; + } auto& iMethodGroup = ifaceInst->mMethodInstanceGroups[iMethodIdx]; auto iMethodInst = iMethodGroup.mDefault; @@ -21982,6 +21985,7 @@ bool BfModule::SlotVirtualMethod(BfMethodInstance* methodInstance, BfAmbiguityCo { if ((!ifaceInst->IsGenericTypeInstance()) || (!ifaceInst->mTypeDef->mIsCombinedPartial)) AssertErrorState(); + checkMethodDef = checkMethodDef->mNextWithSameName; continue; } if (iMethodInst->mMethodDef->mName == methodInstance->mMethodDef->mName)