Skip to content

Commit d7d0f82

Browse files
Fix #3384: add special case for null-literal conversions in optional argument handling.
1 parent 906d248 commit d7d0f82

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

ICSharpCode.Decompiler.Tests/TestCases/Pretty/OptionalArguments.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,28 @@ public enum MyEnum
3232
B
3333
}
3434

35+
internal class OptionalArgumentTest
36+
{
37+
private static void Test()
38+
{
39+
Test2();
40+
Test3();
41+
Test4();
42+
}
43+
44+
private static void Test2(int a = 0)
45+
{
46+
}
47+
48+
private static void Test3(int a = 0, int? b = null)
49+
{
50+
}
51+
52+
private static void Test4(int? b = null, int a = 0)
53+
{
54+
}
55+
}
56+
3557
public OptionalArguments(string name, int a = 5)
3658
{
3759

ICSharpCode.Decompiler/CSharp/CallBuilder.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1043,7 +1043,10 @@ bool CheckArgument(out int len, out IType t)
10431043

10441044
bool IsOptionalArgument(IParameter parameter, TranslatedExpression arg)
10451045
{
1046-
if (!parameter.IsOptional || !arg.ResolveResult.IsCompileTimeConstant)
1046+
if (!parameter.IsOptional)
1047+
return false;
1048+
1049+
if (!arg.ResolveResult.IsCompileTimeConstant && arg.ResolveResult is not ConversionResolveResult { Conversion.IsNullLiteralConversion: true })
10471050
return false;
10481051
if (parameter.GetAttributes().Any(a => a.AttributeType.IsKnownType(KnownAttribute.CallerMemberName)
10491052
|| a.AttributeType.IsKnownType(KnownAttribute.CallerFilePath)

0 commit comments

Comments
 (0)