2
0
Эх сурвалжийг харах

Fixed FORCELINK sret issue

Brian Fiete 4 жил өмнө
parent
commit
2c41b5c3f7

+ 7 - 1
IDEHelper/Compiler/BfModule.cpp

@@ -4255,7 +4255,7 @@ void BfModule::CreateFakeCallerMethod(const String& funcName)
 	SizedArray<BfIRValue, 8> args;
 	SizedArray<BfIRValue, 8> args;
 	BfExprEvaluator exprEvaluator(this);
 	BfExprEvaluator exprEvaluator(this);
 
 
-	if (mCurMethodInstance->GetStructRetIdx() != -1)
+	if (mCurMethodInstance->GetStructRetIdx() == 0)
 	{
 	{
 		auto retPtrType = CreatePointerType(mCurMethodInstance->mReturnType);		
 		auto retPtrType = CreatePointerType(mCurMethodInstance->mReturnType);		
 		exprEvaluator.PushArg(GetDefaultTypedValue(retPtrType, true, BfDefaultValueKind_Const), args);
 		exprEvaluator.PushArg(GetDefaultTypedValue(retPtrType, true, BfDefaultValueKind_Const), args);
@@ -4267,6 +4267,12 @@ void BfModule::CreateFakeCallerMethod(const String& funcName)
 		exprEvaluator.PushThis(NULL, thisValue, mCurMethodInstance, args);
 		exprEvaluator.PushThis(NULL, thisValue, mCurMethodInstance, args);
 	}
 	}
 
 
+	if (mCurMethodInstance->GetStructRetIdx() == 1)
+	{
+		auto retPtrType = CreatePointerType(mCurMethodInstance->mReturnType);
+		exprEvaluator.PushArg(GetDefaultTypedValue(retPtrType, true, BfDefaultValueKind_Const), args);
+	}
+
 	for (int paramIdx = 0; paramIdx < mCurMethodInstance->GetParamCount(); paramIdx++)
 	for (int paramIdx = 0; paramIdx < mCurMethodInstance->GetParamCount(); paramIdx++)
 	{
 	{
 		auto paramType = mCurMethodInstance->GetParamType(paramIdx);
 		auto paramType = mCurMethodInstance->GetParamType(paramIdx);