Skip to content

Commit 321806b

Browse files
committed
C#: Add some unification and viable callable test cases.
1 parent d5cf571 commit 321806b

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

csharp/ql/test/library-tests/dispatch/ViableCallable.cs

+30
Original file line numberDiff line numberDiff line change
@@ -575,3 +575,33 @@ void Run<T>(T c) where T : I3<T>
575575
c.M13();
576576
}
577577
}
578+
579+
public class C21
580+
{
581+
public interface I
582+
{
583+
void M();
584+
}
585+
586+
public class A1 : I
587+
{
588+
public void M() { }
589+
}
590+
591+
public ref struct A2 : I
592+
{
593+
public void M() { }
594+
}
595+
596+
public void Run1<T>(T t) where T : I
597+
{
598+
// Viable callable: A1.M() [also reports A2.M(); false positive]
599+
t.M();
600+
}
601+
602+
public void Run2<T>(T t) where T : I, allows ref struct
603+
{
604+
// Viable callable: {A1, A2}.M()
605+
t.M();
606+
}
607+
}

csharp/ql/test/library-tests/unification/Unification.cs

+8
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,11 @@ public class NestedC<T12> { }
4848
Nested<int>.NestedB.NestedC<bool> x5;
4949
Nested<string>.NestedB.NestedC<decimal> x6;
5050
}
51+
52+
interface I2 { }
53+
struct S3 : I2 { }
54+
ref struct RS : I2 { }
55+
class C7 : I2 { }
56+
57+
class NormalConstraint<T> where T : I2 { } // False positive: Allows T to be `RS`.
58+
class NegativeConstraint<T> where T : I2, allows ref struct { }

0 commit comments

Comments
 (0)