Skip to content

Commit

Permalink
Overload resolution was ignoring HasTypeArgumentInferredFromFunctionT…
Browse files Browse the repository at this point in the history
…ype for calls in expanded form
  • Loading branch information
cston committed Nov 8, 2021
1 parent 78a8a4a commit 28ad9e7
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3404,7 +3404,8 @@ private MemberResolutionResult<TMember> IsMemberApplicableInExpandedForm<TMember
new MemberResolutionResult<TMember>(
result.Member,
result.LeastOverriddenMember,
MemberAnalysisResult.ExpandedForm(result.Result.ArgsToParamsOpt, result.Result.ConversionsOpt, hasAnyRefOmittedArgument)) :
MemberAnalysisResult.ExpandedForm(result.Result.ArgsToParamsOpt, result.Result.ConversionsOpt, hasAnyRefOmittedArgument),
hasTypeArgumentInferredFromFunctionType: result.HasTypeArgumentInferredFromFunctionType) :
result;
}

Expand Down
52 changes: 52 additions & 0 deletions src/Compilers/CSharp/Test/Semantic/Semantics/DelegateTypeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4371,6 +4371,58 @@ static void Main()
CompileAndVerify(source, expectedOutput: expectedOutput);
}

[WorkItem(57627, "https://github.com/dotnet/roslyn/issues/57627")]
[Fact]
public void OverloadResolution_48()
{
var source =
@"using System;
using System.Threading.Tasks;
delegate void MyAction();
delegate T MyFunc<T>();
class A
{
public static void F(object o) { Console.WriteLine(""F(object o)""); }
public static void F(object o, string format, params object[] args) { Console.WriteLine(""F(object o, string format, params object[] args)""); }
public static void F<T>(T t) { Console.WriteLine(""F<T>(T t)""); }
public static void F<T>(T t, string format, params object[] args) { Console.WriteLine(""F<T>(T t, string format, params object[] args)""); }
public static void F(MyAction a) { Console.WriteLine(""F(MyAction a)""); }
public static void F(MyAction a, string format, params object[] args) { Console.WriteLine(""F(MyAction a, string format, params object[] args)""); }
public static void F<T>(MyFunc<T> f) { Console.WriteLine(""F<T>(MyFunc<T> f)""); }
public static void F<T>(MyFunc<T> f, string format, params object[] args) { Console.WriteLine(""F<T>(MyFunc<T> f, string format, params object[] args)""); }
}
class B
{
static async Task Main()
{
A.F(() => { });
A.F(() => { }, """");
A.F(() => { }, ""{0}"", 1);
A.F(async () => await Task.FromResult<object>(null));
A.F(async () => await Task.FromResult<object>(null), """");
A.F(async () => await Task.FromResult<object>(null), ""{0}"", 1);
}
}";

string expectedOutput =
@"F(MyAction a)
F(MyAction a, string format, params object[] args)
F(MyAction a, string format, params object[] args)
F<T>(MyFunc<T> f)
F<T>(MyFunc<T> f, string format, params object[] args)
F<T>(MyFunc<T> f, string format, params object[] args)
";
CompileAndVerify(source, parseOptions: TestOptions.Regular9, expectedOutput: expectedOutput);
CompileAndVerify(source, parseOptions: TestOptions.Regular10, expectedOutput: expectedOutput);
CompileAndVerify(source, expectedOutput: expectedOutput);
}

[Fact]
public void BestCommonType_01()
{
Expand Down

0 comments on commit 28ad9e7

Please sign in to comment.