1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-11 04:52:21 +02:00

Small failure case fixes

This commit is contained in:
Brian Fiete 2023-08-18 12:04:33 -07:00
parent d0de4776f3
commit 57c50635a0
2 changed files with 20 additions and 13 deletions

View file

@ -2051,20 +2051,27 @@ bool BfMethodMatcher::CheckMethod(BfTypeInstance* targetTypeInstance, BfTypeInst
for (int genericArgIdx = uniqueGenericStartIdx; genericArgIdx < (int)checkMethod->mGenericParams.size(); genericArgIdx++) for (int genericArgIdx = uniqueGenericStartIdx; genericArgIdx < (int)checkMethod->mGenericParams.size(); genericArgIdx++)
{ {
auto& genericArg = mCheckMethodGenericArguments[genericArgIdx]; if (genericArgIdx >= mCheckMethodGenericArguments.mSize)
if (genericArg == NULL)
{ {
auto genericParam = methodInstance->mMethodInfoEx->mGenericParams[genericArgIdx]; failed = true;
InferFromGenericConstraints(methodInstance, genericParam, &mCheckMethodGenericArguments); }
if (genericArg != NULL) else
{
auto& genericArg = mCheckMethodGenericArguments[genericArgIdx];
if (genericArg == NULL)
{ {
if (inferredAllGenericArguments) auto genericParam = methodInstance->mMethodInfoEx->mGenericParams[genericArgIdx];
genericInferContext.InferGenericArguments(methodInstance, genericArgIdx); InferFromGenericConstraints(methodInstance, genericParam, &mCheckMethodGenericArguments);
madeProgress = true; if (genericArg != NULL)
{
if (inferredAllGenericArguments)
genericInferContext.InferGenericArguments(methodInstance, genericArgIdx);
madeProgress = true;
}
hasUninferred = true;
if (!allowEmptyGenericSet.Contains(genericArgIdx))
failed = true;
} }
hasUninferred = true;
if (!allowEmptyGenericSet.Contains(genericArgIdx))
failed = true;
} }
} }

View file

@ -3623,7 +3623,7 @@ void BfModule::VisitCodeBlock(BfBlock* block)
exprEvaluator->FinishExpressionResult(); exprEvaluator->FinishExpressionResult();
if ((exprEvaluator->mResult) && (!exprEvaluator->mResult.mType->IsValuelessType()) && (!exprEvaluator->mResult.mValue.IsConst()) && if ((exprEvaluator->mResult) && (!exprEvaluator->mResult.mType->IsValuelessType()) && (!exprEvaluator->mResult.mValue.IsConst()) &&
(!exprEvaluator->mResult.IsAddr()) && (!exprEvaluator->mResult.mValue.IsFake())) (!exprEvaluator->mResult.IsAddr()) && (exprEvaluator->mResult.mValue) && (!exprEvaluator->mResult.mValue.IsFake()))
{ {
if ((mCurMethodState->mCurScope != NULL) && (mCurMethodState->mCurScope->mPrevScope != NULL)) if ((mCurMethodState->mCurScope != NULL) && (mCurMethodState->mCurScope->mPrevScope != NULL))
{ {
@ -3642,7 +3642,7 @@ void BfModule::VisitCodeBlock(BfBlock* block)
mBfIRBuilder->SetInsertPoint(prevInsertBlock); mBfIRBuilder->SetInsertPoint(prevInsertBlock);
if (exprEvaluator->mResult.IsSplat()) if (exprEvaluator->mResult.IsSplat())
AggregateSplatIntoAddr(exprEvaluator->mResult, tempVar); AggregateSplatIntoAddr(exprEvaluator->mResult, tempVar);
else else if (!exprEvaluator->mResult.mType->IsValuelessType())
mBfIRBuilder->CreateAlignedStore(exprEvaluator->mResult.mValue, tempVar, exprEvaluator->mResult.mType->mAlign); mBfIRBuilder->CreateAlignedStore(exprEvaluator->mResult.mValue, tempVar, exprEvaluator->mResult.mType->mAlign);
exprEvaluator->mResult = BfTypedValue(tempVar, exprEvaluator->mResult.mType, exprEvaluator->mResult = BfTypedValue(tempVar, exprEvaluator->mResult.mType,
exprEvaluator->mResult.IsThis() ? exprEvaluator->mResult.IsThis() ?