diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 54cb63f3..bc1737bf 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -8149,6 +8149,12 @@ BfTypedValue BfExprEvaluator::CreateCall(BfAstNode* targetSrc, const BfTypedValu auto func = moduleMethodInstance.mFunc; BfTypedValue callResult = CreateCall(targetSrc, methodInstance, func, bypassVirtual, irArgs, NULL, physCallFlags); + if ((methodInstance->mMethodDef->mIsNoReturn) && ((mBfEvalExprFlags & BfEvalExprFlags_IsExpressionBody) != 0) && + (mExpectingType != NULL) && (callResult.mType != mExpectingType)) + { + callResult = mModule->GetDefaultTypedValue(mExpectingType); + } + // This gets triggered for non-sret (ie: comptime) composite returns so they aren't considered readonly if ((callResult.mKind == BfTypedValueKind_Value) && (!callResult.mValue.IsConst()) && (!callResult.mType->IsValuelessType()) && (callResult.mType->IsComposite()) && (!methodInstance->GetLoweredReturnType())) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index 490aab5a..f3738af3 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -21179,7 +21179,7 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup, // Warn(0, "Using a 'void' return with an expression-bodied method isn't needed. Consider removing '=>' token", methodDeclaration->mFatArrowToken); // } - BfEvalExprFlags exprEvalFlags = BfEvalExprFlags_AllowRefExpr; + BfEvalExprFlags exprEvalFlags = (BfEvalExprFlags)(BfEvalExprFlags_AllowRefExpr | BfEvalExprFlags_IsExpressionBody); if (expectingType->IsVoid()) { exprEvalFlags = (BfEvalExprFlags)(exprEvalFlags | BfEvalExprFlags_NoCast); diff --git a/IDEHelper/Compiler/BfModule.h b/IDEHelper/Compiler/BfModule.h index 9ff62081..45425a21 100644 --- a/IDEHelper/Compiler/BfModule.h +++ b/IDEHelper/Compiler/BfModule.h @@ -85,6 +85,7 @@ enum BfEvalExprFlags BfEvalExprFlags_FromConversionOp = 0x8000000, BfEvalExprFlags_FromConversionOp_Explicit = 0x10000000, BfEvalExprFlags_AllowGenericConstValue = 0x20000000, + BfEvalExprFlags_IsExpressionBody = 0x40000000, BfEvalExprFlags_InheritFlags = BfEvalExprFlags_NoAutoComplete | BfEvalExprFlags_Comptime | BfEvalExprFlags_DeclType };