From d56af187ca50842e126e341ad6155f81b8e98a04 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 21 Jun 2020 10:12:42 -0700 Subject: [PATCH] Fixed on-demand constraint check crash --- IDEHelper/Compiler/BfModuleTypeUtils.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 3da7ceb6..33f061ca 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -204,6 +204,10 @@ bool BfModule::ValidateGenericConstraints(BfTypeReference* typeRef, BfTypeInstan return true; } + // We don't validate constraints for things like Tuples/Delegates + if (genericTypeInst->IsOnDemand()) + return true; + SetAndRestoreValue prevIgnoreErrors(mIgnoreErrors, mIgnoreErrors || ignoreErrors); genericTypeInst->mGenericTypeInfo->mValidatedGenericConstraints = true; @@ -8851,7 +8855,12 @@ BfIRValue BfModule::CastToValue(BfAstNode* srcNode, BfTypedValue typedVal, BfTyp } } if (matches) - return mBfIRBuilder->CreateBitCast(typedVal.mValue, mBfIRBuilder->MapType(toType)); + { + typedVal = MakeAddressable(typedVal); + if (resultFlags != NULL) + *resultFlags = (BfCastResultFlags)(BfCastResultFlags_IsAddr); + return mBfIRBuilder->CreateBitCast(typedVal.mValue, mBfIRBuilder->MapType(toType)); + } } } @@ -10252,6 +10261,12 @@ BfTypedValue BfModule::Cast(BfAstNode* srcNode, const BfTypedValue& typedVal, Bf { return BfTypedValue(mBfIRBuilder->CreateBitCast(typedVal.mValue, mBfIRBuilder->MapTypeInstPtr(tupleType)), tupleType, BfTypedValueKind_ReadOnlyAddr); } + else if (typedVal.IsSplat()) + { + BfTypedValue retTypedValue = typedVal; + retTypedValue.mType = tupleType; + return retTypedValue; + } BfIRValue curTupleValue = CreateAlloca(tupleType); auto loadedVal = LoadValue(typedVal);