Skip to content

Commit eafccdb

Browse files
Merge pull request icsharpcode#3504 from MSchmoecker/fix-static-decompile-with-instance-signature
Fix incorrect method match for static methods with instance signature
2 parents fa4108e + cc4588d commit eafccdb

File tree

5 files changed

+55
-0
lines changed

5 files changed

+55
-0
lines changed

ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
<None Include="TestCases\ILPretty\Issue2260SwitchString.il" />
9797
<None Include="TestCases\ILPretty\Issue3442.il" />
9898
<None Include="TestCases\ILPretty\Issue3466.il" />
99+
<None Include="testcases\ilpretty\Issue3504.il" />
99100
<None Include="TestCases\ILPretty\MonoFixed.il" />
100101
<None Include="TestCases\Correctness\NonGenericConstrainedCallVirt.il" />
101102
<None Include="TestCases\ILPretty\UnknownTypes.cs" />
@@ -138,6 +139,7 @@
138139
<Compile Include="TestCases\ILPretty\Issue3421.cs" />
139140
<Compile Include="TestCases\ILPretty\Issue3442.cs" />
140141
<Compile Include="TestCases\ILPretty\Issue3466.cs" />
142+
<None Include="TestCases\ILPretty\Issue3504.cs" />
141143
<Compile Include="TestCases\ILPretty\MonoFixed.cs" />
142144
<Compile Include="TestCases\Pretty\Comparisons.cs" />
143145
<Compile Include="TestCases\Pretty\GloballyQualifiedTypeInStringInterpolation.cs" />

ICSharpCode.Decompiler.Tests/ILPrettyTestRunner.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,12 @@ public async Task Issue3466()
225225
await Run();
226226
}
227227

228+
[Test]
229+
public async Task Issue3504()
230+
{
231+
await Run();
232+
}
233+
228234
[Test]
229235
public async Task Issue2260SwitchString()
230236
{
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
using System;
2+
3+
internal class Issue3504
4+
{
5+
private void Method(Console console)
6+
{
7+
console.WriteLine("Hello.");
8+
}
9+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
.class private auto ansi beforefieldinit Issue3504
2+
extends [System.Runtime]System.Object
3+
{
4+
// Methods
5+
.method private hidebysig
6+
instance void Method (class [System.Console]System.Console console) cil managed
7+
{
8+
// Method begins at RVA 0x2050
9+
// Header size: 1
10+
// Code size: 13 (0xd)
11+
.maxstack 8
12+
13+
IL_0000: nop
14+
IL_0001: ldarg.1
15+
IL_0002: ldstr "Hello."
16+
IL_0007: call instance void [System.Console]System.Console::WriteLine(string)
17+
IL_000b: nop
18+
IL_000c: ret
19+
} // end of method Issue3504::Method
20+
21+
.method public hidebysig specialname rtspecialname
22+
instance void .ctor () cil managed
23+
{
24+
// Method begins at RVA 0x205e
25+
// Header size: 1
26+
// Code size: 8 (0x8)
27+
.maxstack 8
28+
29+
IL_0000: ldarg.0
30+
IL_0001: call instance void [System.Runtime]System.Object::.ctor()
31+
IL_0006: nop
32+
IL_0007: ret
33+
} // end of method Issue3504::.ctor
34+
35+
} // end of class Issue3504
36+

ICSharpCode.Decompiler/TypeSystem/MetadataModule.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,8 @@ IMethod ResolveMethodReference(MemberReferenceHandle memberRefHandle, GenericCon
535535
{
536536
if (m.TypeParameters.Count != signature.GenericParameterCount)
537537
continue;
538+
if (signature.Header.IsInstance != !m.IsStatic)
539+
continue;
538540
if (CompareSignatures(m.Parameters, parameterTypes) && CompareTypes(m.ReturnType, signature.ReturnType))
539541
{
540542
method = m;

0 commit comments

Comments
 (0)