1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +02:00

Supporting proper lowering for CRepr int-sized structs

This commit is contained in:
Brian Fiete 2020-02-20 05:21:23 -08:00
parent 610d472b66
commit 07fd22f9e0
3 changed files with 43 additions and 15 deletions

View file

@ -4627,7 +4627,20 @@ BfTypedValue BfExprEvaluator::CreateCall(BfMethodInstance* methodInstance, BfIRV
if (sret != NULL)
result = *sret;
else if (hasResult)
result = BfTypedValue(callInst, methodInstance->mReturnType);
{
if (methodInstance->mReturnType->GetLoweredType() != BfTypeCode_None)
{
auto loweredType = mModule->GetPrimitiveType(methodInstance->mReturnType->GetLoweredType());
auto loweredPtrType = mModule->CreatePointerType(loweredType);
auto retVal = mModule->CreateAlloca(methodInstance->mReturnType);
auto castedRetVal = mModule->mBfIRBuilder->CreateBitCast(retVal, mModule->mBfIRBuilder->MapType(loweredPtrType));
mModule->mBfIRBuilder->CreateStore(callInst, castedRetVal);
result = BfTypedValue(retVal, methodInstance->mReturnType, BfTypedValueKind_TempAddr);
}
else
result = BfTypedValue(callInst, methodInstance->mReturnType);
}
else
result = mModule->GetFakeTypedValue(methodInstance->mReturnType);
if (result.mType->IsRef())