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

Merge pull request #1016 from EinBurgbauer/compiler-fix

fix thiscall crash for real
This commit is contained in:
Brian Fiete 2021-05-21 05:24:19 -04:00 committed by GitHub
commit d251ea0e3e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 15 deletions

View file

@ -1209,7 +1209,6 @@ void BfMethodInstance::GetIRFunctionInfo(BfModule* module, BfIRType& returnType,
returnType = module->mBfIRBuilder->MapType(mReturnType);
}
bool hasExplicitThis = false;
for (int paramIdx = -1; paramIdx < GetParamCount(); paramIdx++)
{
BfType* checkType = NULL;
@ -1224,24 +1223,15 @@ void BfMethodInstance::GetIRFunctionInfo(BfModule* module, BfIRType& returnType,
else
{
if (HasExplicitThis())
{
checkType = GetParamType(0);
//TODO(BCF): Breaks tests
//hasExplicitThis = true;
}
else
checkType = GetOwner();
}
}
else
{
if (hasExplicitThis)
{
// We already looked at this
hasExplicitThis = false;
continue;
}
if ((paramIdx == 0) && (mMethodDef->mHasExplicitThis))
continue; // Skip over the explicit 'this'
checkType = GetParamType(paramIdx);
}
@ -1355,9 +1345,6 @@ void BfMethodInstance::GetIRFunctionInfo(BfModule* module, BfIRType& returnType,
if (checkType2 != NULL)
_AddType(checkType2);
if ((paramIdx == -1) && (mMethodDef->mHasExplicitThis))
paramIdx++; // Skip over the explicit 'this'
}
if ((!module->mIsComptimeModule) && (GetStructRetIdx(forceStatic) == 1))

View file

@ -130,6 +130,22 @@ namespace Tests
}
}
[CRepr]
struct StructCRepr
{
public int32 something = 1;
bool Run() => something == 1;
public static void Test()
{
StructCRepr sc = .();
function bool(StructCRepr this) func = => Run;
Test.Assert(func(sc));
}
}
public static int UseFunc0<T>(function int (T this, float f) func, T a, float b)
{
return func(a, b);
@ -182,6 +198,8 @@ namespace Tests
UseFunc0(func2, sa, 100.0f);
true
});
StructCRepr.Test();
}
}
}