diff --git a/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs b/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
index 3054a9a66..c8a77eafd 100644
--- a/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
+++ b/ICSharpCode.Decompiler.Tests/CorrectnessTestRunner.cs
@@ -391,6 +391,12 @@ namespace ICSharpCode.Decompiler.Tests
await RunCS(options: options);
}
+ [Test]
+ public async Task ComInterop([ValueSource(nameof(noMonoOptions))] CompilerOptions options)
+ {
+ await RunCS(options: options);
+ }
+
async Task RunCS([CallerMemberName] string testName = null, CompilerOptions options = CompilerOptions.UseDebug)
{
if ((options & CompilerOptions.UseRoslynMask) != 0 && (options & CompilerOptions.TargetNet40) == 0)
diff --git a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
index 7fb5f6753..3c116d3e5 100644
--- a/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
+++ b/ICSharpCode.Decompiler.Tests/ICSharpCode.Decompiler.Tests.csproj
@@ -106,6 +106,7 @@
+
diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Correctness/ComInterop.cs b/ICSharpCode.Decompiler.Tests/TestCases/Correctness/ComInterop.cs
new file mode 100644
index 000000000..df17c5523
--- /dev/null
+++ b/ICSharpCode.Decompiler.Tests/TestCases/Correctness/ComInterop.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ICSharpCode.Decompiler.Tests.TestCases.Correctness
+{
+ public class ComInterop
+ {
+ public static void Main()
+ {
+ Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetMethod("MyMethod1")));
+ Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetProperty("MyProperty1").GetMethod));
+ Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetMethod("MyMethod2")));
+ Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetProperty("MyProperty2").GetMethod));
+ Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetProperty("MyProperty2").SetMethod));
+ Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetEvent("MyEvent1").AddMethod));
+ Console.WriteLine(Marshal.GetComSlotForMethodInfo(typeof(IMixedPropsAndMethods).GetEvent("MyEvent1").RemoveMethod));
+ }
+
+
+ [Guid("761618B8-3994-449A-A96B-F1FF2795EA85")]
+ [ComImport]
+ [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
+ internal interface IMixedPropsAndMethods
+ {
+ int MyMethod1();
+
+ int MyProperty1 { get; }
+
+ int MyMethod2();
+
+ int MyProperty2 { get; set; }
+
+ event EventHandler MyEvent1;
+
+ int MyMethod3();
+ }
+ }
+}