1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Fixed incorrectly applied method generic constraints in constraint check

This commit is contained in:
Brian Fiete 2025-01-24 10:16:22 -08:00
parent 87405f3387
commit fd24ab21af
2 changed files with 34 additions and 1 deletions

View file

@ -8705,7 +8705,7 @@ bool BfModule::CheckGenericConstraints(const BfGenericParamSource& genericParamS
{ {
auto genericParamInst = mCurMethodInstance->mMethodInfoEx->mGenericParams[genericParamIdx]; auto genericParamInst = mCurMethodInstance->mMethodInfoEx->mGenericParams[genericParamIdx];
if (genericParamInst->mExternType == checkArgType) if ((genericParamInst->mExternType == checkArgType) && (checkArgType->IsUnspecializedType()))
{ {
checkGenericParamFlags |= genericParamInst->mGenericParamFlags; checkGenericParamFlags |= genericParamInst->mGenericParamFlags;
} }

View file

@ -97,6 +97,33 @@ namespace Tests
} }
} }
public static mixin Test<T>(T a) where T : struct {}
public static mixin Test(Type value) {}
public static mixin Test<T>(T a) where T : class, delete {}
public class TestClass<TValue>
{
public bool CallTest<T>(TValue val)
where TValue : var
{
SelfOuter.Test!(val);
return true;
}
}
public static mixin Test2<T>(T a) where T : struct {}
public static mixin Test2<T>(T a) where T : class, delete {}
public class TestClass2<TValue>
{
public bool CallTest<T>(TValue val)
where TValue : var
{
SelfOuter.Test2!(val);
return true;
}
}
[Test] [Test]
public static void TestBasics() public static void TestBasics()
{ {
@ -130,6 +157,12 @@ namespace Tests
DispClass dc = scope .(); DispClass dc = scope .();
DisposeIt!(dc); DisposeIt!(dc);
let test2 = scope TestClass<int>();
test2.CallTest<int>(2);
let test3 = scope TestClass2<int>();
test3.CallTest<int>(2);
} }
[Test] [Test]