Skip to content

Add test for DynamicMethodDefinition parameter modification with original method - #289

Draft
monomod[bot] wants to merge 1 commit into
reorganizefrom
ai/issue282
Draft

monomod[bot] wants to merge 1 commit into
reorganizefrom
ai/issue282

Conversation

@monomod

@monomod monomod Bot commented Feb 9, 2026

Copy link
Copy Markdown
Contributor

This test reproduces the issue where DynamicMethodDefinition generators ignore modified parameters when an OriginalMethod is present. The test verifies that after adding parameters to a DMD definition, the generated methods should work with the new parameter signature across different generators (cecil, dynamicmethod, methodbuilder).

Test for #282.

@github-actions

github-actions Bot commented Feb 9, 2026

Copy link
Copy Markdown
Contributor

Test Results

Total Skipped Passed Failed
Unique 283 0 279 4
Total 37625 266 37207 152

Failing runs

❌ MonoMod.UnitTest.AssemblyLoadContextHookTest.TestAssemblyLoadContextHook

Class Name: MonoMod.UnitTest.AssemblyLoadContextHookTest | Method Name: TestAssemblyLoadContextHook | This test is sometimes failing.

Failures present in
  • test-results .NET 10.0 arm64 on Linux ARM64 (PGO Off)/TestResults/testresults.ubuntu-24.04-arm.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 15 (PGO On)/TestResults/testresults.macos-15.10.0.arm64.trx
  • test-results .NET 10.0 x64 on MacOS 15 Intel (PGO Off)/TestResults/testresults.macos-15-intel.10.0.x64.trx
  • test-results .NET 10.0 x64 on Windows (PGO Off)/TestResults/testresults.windows-latest.10.0.x64.trx
  • test-results .NET 10.0 x86 on Windows (PGO Off)/TestResults/testresults.windows-latest.10.0.x86.trx
  • test-results .NET 6.0 x64 on MacOS 14 (PGO On)/TestResults/testresults.macos-14.6.0.x64.trx
  • test-results .NET 6.0 x86 on Windows (PGO Off)/TestResults/testresults.windows-latest.6.0.x86.trx
    and 9 more
❌ test-results .NET 10.0 arm64 on MacOS 15 (PGO On)/TestResults/testresults.macos-15.10.0.arm64.trx MonoMod.UnitTest.AssemblyLoadContextHookTest.TestAssemblyLoadContextHook

Took 00:00:00.3758078

Exception message:

System.ArgumentNullException : Value cannot be null. (Parameter 'declaringType')

Stack trace:

   at Mono.Cecil.Mixin.CheckType(Object type, Argument argument)
   at Mono.Cecil.MethodReference..ctor(String name, TypeReference returnType, TypeReference declaringType)
   at MonoMod.Utils.Extensions.Relink(MethodReference method, Relinker relinker, IGenericParameterProvider context) in /_/src/MonoMod.Utils/Extensions.Relinker.cs:line 390
   at MonoMod.Utils.Extensions.Relink(IMetadataTokenProvider mtp, Relinker relinker, IGenericParameterProvider context) in /_/src/MonoMod.Utils/Extensions.Relinker.cs:line 257
   at MonoMod.Utils.DMDCecilGenerator.GenerateCore(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerators/DMDCecilGenerator.cs:line 115
   at MonoMod.Utils.DMDGenerator`1.Generate(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerator.cs:line 29
   at MonoMod.Utils.DynamicMethodDefinition.Generate(Object context) in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 223
   at MonoMod.Utils.DynamicMethodDefinition.Generate() in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 208
   at MonoMod.RuntimeDetour.DetourManager.GenerateSyncProxy(String innerName, MethodSignature Sig, Action`2 emitLoadSyncInfo, Action`3 emitInvoke, Action`3 emitLastCallReturn) in /_/src/MonoMod.RuntimeDetour/DetourManager.Shared.cs:line 429
   at MonoMod.RuntimeDetour.DetourManager.RootManagedChainNode..ctor(MethodBase method) in /_/src/MonoMod.RuntimeDetour/DetourManager.Managed.cs:line 182
   at MonoMod.RuntimeDetour.DetourManager.ManagedDetourState..ctor(MethodBase src) in /_/src/MonoMod.RuntimeDetour/DetourManager.Managed.cs:line 296
   at MonoMod.RuntimeDetour.DetourManager.<>c.<GetDetourState>b__10_0(MethodBase m) in /_/src/MonoMod.RuntimeDetour/DetourManager.Managed.cs:line 751
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at MonoMod.RuntimeDetour.DetourManager.GetDetourState(MethodBase method) in /_/src/MonoMod.RuntimeDetour/DetourManager.Managed.cs:line 751
   at MonoMod.RuntimeDetour.ILHook..ctor(MethodBase method, Manipulator manipulator, IDetourFactory factory, DetourConfig config, Boolean applyByDefault) in /_/src/MonoMod.RuntimeDetour/ILHook.cs:line 183
   at MonoMod.UnitTest.AssemblyLoadContextHookTest.TestILHookReferences(Type baseLoaderType, Type type) in /_/src/MonoMod.UnitTest/RuntimeDetour/AssemblyLoadContextHookTest.cs:line 247
   at MonoMod.UnitTest.AssemblyLoadContextHookTest.TestAssemblyLoadContextHookLoaded(Object loader, Int32 id1, Int32 id2, Boolean canCollect) in /_/src/MonoMod.UnitTest/RuntimeDetour/AssemblyLoadContextHookTest.cs:line 213
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeDirectByRefWithFewArgs(Object obj, Span`1 copyOfArgs, BindingFlags invokeAttr)

Test Standard Output has been omitted because it is too long.

❌ test-results .NET 10.0 x64 on MacOS 15 Intel (PGO Off)/TestResults/testresults.macos-15-intel.10.0.x64.trx MonoMod.UnitTest.AssemblyLoadContextHookTest.TestAssemblyLoadContextHook

Took 00:00:00.3404193

Failure also present in
  • test-results .NET 10.0 arm64 on Linux ARM64 (PGO Off)/TestResults/testresults.ubuntu-24.04-arm.10.0.arm64.trx
  • test-results .NET 10.0 x64 on Windows (PGO Off)/TestResults/testresults.windows-latest.10.0.x64.trx
  • test-results .NET 6.0 x64 on MacOS 14 (PGO On)/TestResults/testresults.macos-14.6.0.x64.trx
  • test-results .NET 6.0 x86 on Windows (PGO Off)/TestResults/testresults.windows-latest.6.0.x86.trx
  • test-results .NET 7.0 x64 on Linux (PGO Off)/TestResults/testresults.ubuntu-latest.7.0.x64.trx
  • test-results .NET 7.0 x64 on Linux musl (PGO Off)/TestResults/testresults.ubuntu-latest.7.0.x64.trx
  • test-results .NET 8.0 x64 on MacOS 15 Intel (PGO Off)/TestResults/testresults.macos-15-intel.8.0.x64.trx
    and 5 more
Exception message:
Assert.NotNull() Failure

Stack trace:

   at DMD<System.Void MonoMod.UnitTest.AssemblyLoadContextHookTest:TestStaticMethod(MonoMod.UnitTest.AssemblyLoadContextHookTest, System.Int32, System.Int32)>(AssemblyLoadContextHookTest loader, Int32 id1, Int32 id2)
   at MonoMod.UnitTest.AssemblyLoadContextHookTest.TestStaticMethodTarget(Action`3 orig, Object loader, Int32 id1, Int32 id2) in /_/src/MonoMod.UnitTest/RuntimeDetour/AssemblyLoadContextHookTest.cs:line 219
   at MonoMod.UnitTest.AssemblyLoadContextHookTest.<>c.<TestAssemblyLoadContextHookLoaded>b__10_5(Action`3 orig, Object hloader, Int32 hid1, Int32 hid2) in /_/src/MonoMod.UnitTest/RuntimeDetour/AssemblyLoadContextHookTest.cs:line 174
   at DMD<>?11153093.Hook<System.Void MonoMod.UnitTest.AssemblyLoadContextHookTest/<>c::<TestAssemblyLoadContextHookLoaded>b__10_5(System.Action`3[[System.Object, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Int32, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.Int32, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]],System.Object,System.Int32,System.Int32)>(AssemblyLoadContextHookTest, Int32, Int32)
   at SyncProxy<System.Void MonoMod.UnitTest.AssemblyLoadContextHookTest:TestStaticMethod(MonoMod.UnitTest.AssemblyLoadContextHookTest, System.Int32, System.Int32)>(AssemblyLoadContextHookTest , Int32 , Int32 )
   at InvokeStub_AssemblyLoadContextHookTest.TestStaticMethod(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Test Standard Output has been omitted because it is too long.

❌ test-results .NET 10.0 x86 on Windows (PGO Off)/TestResults/testresults.windows-latest.10.0.x86.trx MonoMod.UnitTest.AssemblyLoadContextHookTest.TestAssemblyLoadContextHook

Took 00:00:01.5951129

Failure also present in
  • test-results .NET 8.0 x64 on Linux (PGO Off)/TestResults/testresults.ubuntu-latest.8.0.x64.trx
Exception message:
Assert.Equal() Failure
Expected: True
Actual:   False

Stack trace:

   at DMD<>?49229074._MonoMod_UnitTest_AssemblyLoadContextHookTest::ILHookTarget(Type expectedLoaderType, Boolean alc)
   at SyncProxy<System.Void MonoMod.UnitTest.AssemblyLoadContextHookTest:ILHookTarget(System.Type, System.Boolean)>(Type , Boolean )
   at InvokeStub_AssemblyLoadContextHookTest.ILHookTarget(Object, Span`1)
   at System.Reflection.MethodBaseInvoker.InvokeWithFewArgs(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)

Test Standard Output has been omitted because it is too long.

❌ MonoMod.UnitTest.Github.Issue282.DMDGenerateDoesNotOverrideParameters

Class Name: MonoMod.UnitTest.Github.Issue282 | Method Name: DMDGenerateDoesNotOverrideParameters | This test is always failing.

Failures present in
  • test-results .NET 10.0 arm64 on Linux ARM64 (PGO Off)/TestResults/testresults.ubuntu-24.04-arm.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on Linux ARM64 (PGO On)/TestResults/testresults.ubuntu-24.04-arm.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 14 (PGO Off)/TestResults/testresults.macos-14.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 14 (PGO On)/TestResults/testresults.macos-14.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 15 (PGO Off)/TestResults/testresults.macos-15.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 15 (PGO On)/TestResults/testresults.macos-15.10.0.arm64.trx
  • test-results .NET 10.0 x64 on Linux (PGO Off)/TestResults/testresults.ubuntu-latest.10.0.x64.trx
    and 126 more
❌ test-results .NET Core 3.1 x64 on MacOS 15 Intel/TestResults/testresults.macos-15-intel.3.1.x64.trx MonoMod.UnitTest.Github.Issue282.DMDGenerateDoesNotOverrideParameters

Took 00:00:00.0042070

Failure also present in
  • test-results .NET 10.0 arm64 on Linux ARM64 (PGO Off)/TestResults/testresults.ubuntu-24.04-arm.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on Linux ARM64 (PGO On)/TestResults/testresults.ubuntu-24.04-arm.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 14 (PGO Off)/TestResults/testresults.macos-14.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 14 (PGO On)/TestResults/testresults.macos-14.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 15 (PGO Off)/TestResults/testresults.macos-15.10.0.arm64.trx
  • test-results .NET 10.0 arm64 on MacOS 15 (PGO On)/TestResults/testresults.macos-15.10.0.arm64.trx
  • test-results .NET 10.0 x64 on Linux (PGO Off)/TestResults/testresults.ubuntu-latest.10.0.x64.trx
    and 111 more
Exception message:
System.ArgumentOutOfRangeException : Specified argument was out of the range of valid values. (Parameter 'The specified parameter index is not in range.')

Stack trace:

   at System.Reflection.Emit.DynamicMethod.DefineParameter(Int32 position, ParameterAttributes attributes, String parameterName)
   at MonoMod.Utils._DMDEmit.Generate(DynamicMethodDefinition dmd, MethodBase _mb, ILGenerator il)
   at MonoMod.Utils.DMDEmitDynamicMethodGenerator.GenerateCore(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerators/DMDEmitDynamicMethodGenerator.cs:line 86
   at MonoMod.Utils.DMDGenerator`1.Generate(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerator.cs:line 29
   at MonoMod.Utils.DynamicMethodDefinition.Generate(Object context) in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 218
   at MonoMod.Utils.DynamicMethodDefinition.Generate() in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 208
   at MonoMod.UnitTest.Github.Issue282.<DMDGenerateDoesNotOverrideParameters>g__Test|1_1(String dmdtype, <>c__DisplayClass1_0& ) in /_/src/MonoMod.UnitTest/Github/Issue282.cs:line 44
   at MonoMod.UnitTest.Github.Issue282.DMDGenerateDoesNotOverrideParameters() in /_/src/MonoMod.UnitTest/Github/Issue282.cs:line 33
Test Standard Output
[MonoMod.Utils](2/9/2026 8:36:18AM) Trace: new DynamicMethod: System.Int32 DMD<System.Int32 MonoMod.UnitTest.Github.Issue282:<DMDGenerateDoesNotOverrideParameters>g__func|1_0(System.Int32)>(System.Int32)
[MonoMod.Utils](2/9/2026 8:36:18AM) Trace: orig: System.Int32 MonoMod.UnitTest.Github.Issue282:<DMDGenerateDoesNotOverrideParameters>g__func|1_0(System.Int32)
[MonoMod.Utils](2/9/2026 8:36:18AM) Trace: mdef: System.Int32 DMD<System.Int32 MonoMod.UnitTest.Github.Issue282:<DMDGenerateDoesNotOverrideParameters>g__func|1_0(System.Int32)>(System.Int32,System.Int32)
❌ test-results .NET Framework 4.x x86 on Windows/TestResults/testresults.windows-latest.fx.x86.trx MonoMod.UnitTest.Github.Issue282.DMDGenerateDoesNotOverrideParameters

Took 00:00:00.0190000

Failure also present in
  • test-results .NET Core 2.1 x64 on Linux/TestResults/testresults.ubuntu-latest.2.1.x64.trx
  • test-results .NET Core 2.1 x64 on MacOS 14/TestResults/testresults.macos-14.2.1.x64.trx
  • test-results .NET Core 2.1 x64 on MacOS 15 Intel/TestResults/testresults.macos-15-intel.2.1.x64.trx
  • test-results .NET Core 2.1 x64 on MacOS 15/TestResults/testresults.macos-15.2.1.x64.trx
  • test-results .NET Core 2.1 x64 on Windows/TestResults/testresults.windows-latest.2.1.x64.trx
  • test-results .NET Core 2.1 x86 on Windows/TestResults/testresults.windows-latest.2.1.x86.trx
  • test-results .NET Framework 4.x x64 on Windows/TestResults/testresults.windows-latest.fx.x64.trx
Exception message:
System.ArgumentOutOfRangeException : Specified argument was out of the range of valid values.
Parameter name: The specified parameter index is not in range.

Stack trace:

   at System.Reflection.Emit.DynamicMethod.DefineParameter(Int32 position, ParameterAttributes attributes, String parameterName)
   at MonoMod.Utils._DMDEmit.Generate(DynamicMethodDefinition dmd, MethodBase _mb, ILGenerator il) in /_/src/MonoMod.Utils/DMDGenerators/DMDEmit.cs:line 47
   at MonoMod.Utils.DMDEmitDynamicMethodGenerator.GenerateCore(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerators/DMDEmitDynamicMethodGenerator.cs:line 84
   at MonoMod.Utils.DMDGenerator`1.Generate(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerator.cs:line 29
   at MonoMod.Utils.DynamicMethodDefinition.Generate(Object context) in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 215
   at MonoMod.UnitTest.Github.Issue282.<DMDGenerateDoesNotOverrideParameters>g__Test|1_1(String dmdtype, <>c__DisplayClass1_0& ) in /_/src/MonoMod.UnitTest/Github/Issue282.cs:line 44
   at MonoMod.UnitTest.Github.Issue282.DMDGenerateDoesNotOverrideParameters() in /_/src/MonoMod.UnitTest/Github/Issue282.cs:line 33
Test Standard Output
[MonoMod.UnitTest](2/9/2026 8:36:42 AM) Info: ------------- TEST BEGIN -------------
[MonoMod.Utils](2/9/2026 8:36:42 AM) Trace: new DynamicMethod: System.Int32 DMD<System.Int32 MonoMod.UnitTest.Github.Issue282:<DMDGenerateDoesNotOverrideParameters>g__func|1_0(System.Int32)>(System.Int32)
[MonoMod.Utils](2/9/2026 8:36:42 AM) Trace: orig: System.Int32 MonoMod.UnitTest.Github.Issue282:<DMDGenerateDoesNotOverrideParameters>g__func|1_0(System.Int32)
[MonoMod.Utils](2/9/2026 8:36:42 AM) Trace: mdef: System.Int32 DMD<System.Int32 MonoMod.UnitTest.Github.Issue282:<DMDGenerateDoesNotOverrideParameters>g__func|1_0(System.Int32)>(System.Int32,System.Int32)
[MonoMod.UnitTest](2/9/2026 8:36:42 AM) Info: -------------- TEST END --------------
❌ test-results System Mono on Linux musl/testresults.ubuntu-latest.sysmono.x64.xml MonoMod.UnitTest.Github.Issue282.DMDGenerateDoesNotOverrideParameters

Took 00:00:00.1200450

Failure also present in
  • test-results System Mono on Linux ARM64/testresults.ubuntu-24.04-arm.sysmono.arm64.xml
  • test-results System Mono on Linux/testresults.ubuntu-latest.sysmono.x64.xml
  • test-results System Mono on MacOS 14/testresults.macos-14.sysmono.arm64.xml
  • test-results System Mono on MacOS 15 Intel/testresults.macos-15-intel.sysmono.x64.xml
  • test-results System Mono on MacOS 15/testresults.macos-15.sysmono.arm64.xml
Exception message:
System.ArgumentOutOfRangeException : Specified argument was out of the range of valid values.
Parameter name: position

Stack trace:

  at System.Reflection.Emit.DynamicMethod.DefineParameter (System.Int32 position, System.Reflection.ParameterAttributes attributes, System.String parameterName) [0x0000f] in <19a0624062f54e9b8fd511dada6aca82>:0 
  at MonoMod.Utils._DMDEmit.Generate (MonoMod.Utils.DynamicMethodDefinition dmd, System.Reflection.MethodBase _mb, System.Reflection.Emit.ILGenerator il) [0x000db] in <5ff81c27f9e140f287d6a97dd1212ff1>:0 
  at MonoMod.Utils.DMDEmitDynamicMethodGenerator.GenerateCore (MonoMod.Utils.DynamicMethodDefinition dmd, System.Object context) [0x00342] in <5ff81c27f9e140f287d6a97dd1212ff1>:0 
  at MonoMod.Utils.DMDGenerator`1[TSelf].Generate (MonoMod.Utils.DynamicMethodDefinition dmd, System.Object context) [0x00013] in <5ff81c27f9e140f287d6a97dd1212ff1>:0 
  at MonoMod.Utils.DynamicMethodDefinition.Generate (System.Object context) [0x00037] in <5ff81c27f9e140f287d6a97dd1212ff1>:0 
  at MonoMod.Utils.DynamicMethodDefinition.Generate () [0x00000] in <5ff81c27f9e140f287d6a97dd1212ff1>:0 
  at MonoMod.UnitTest.Github.Issue282.<DMDGenerateDoesNotOverrideParameters>g__Test|1_1 (System.String dmdtype, MonoMod.UnitTest.Github.Issue282+<>c__DisplayClass1_0& ) [0x0000b] in <afa108f2fe17401a893aab6c7fed5933>:0 
  at MonoMod.UnitTest.Github.Issue282.DMDGenerateDoesNotOverrideParameters () [0x000bd] in <afa108f2fe17401a893aab6c7fed5933>:0 
  at (wrapper managed-to-native) System.Reflection.RuntimeMethodInfo.InternalInvoke(System.Reflection.RuntimeMethodInfo,object,object[],System.Exception&)
  at System.Reflection.RuntimeMethodInfo.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x0006a] in <19a0624062f54e9b8fd511dada6aca82>:0 
❌ MonoMod.UnitTest.ILPatternMatcherTests.ILMatcherDoesNotThrowMatchingDynamicMethodRef

Class Name: MonoMod.UnitTest.ILPatternMatcherTests | Method Name: ILMatcherDoesNotThrowMatchingDynamicMethodRef | This test is sometimes failing.

Failures present in
  • test-results .NET 10.0 x64 on Linux (PGO On)/TestResults/testresults.ubuntu-latest.10.0.x64.trx
  • test-results .NET 7.0 x64 on MacOS 15 Intel (PGO Off)/TestResults/testresults.macos-15-intel.7.0.x64.trx
❌ test-results .NET 7.0 x64 on MacOS 15 Intel (PGO Off)/TestResults/testresults.macos-15-intel.7.0.x64.trx MonoMod.UnitTest.ILPatternMatcherTests.ILMatcherDoesNotThrowMatchingDynamicMethodRef

Took 00:00:00.0791277

Failure also present in
  • test-results .NET 10.0 x64 on Linux (PGO On)/TestResults/testresults.ubuntu-latest.10.0.x64.trx
Exception message:
System.ArgumentNullException : Value cannot be null. (Parameter 'declaringType')

Stack trace:

   at Mono.Cecil.Mixin.CheckType(Object type, Argument argument)
   at Mono.Cecil.MethodReference..ctor(String name, TypeReference returnType, TypeReference declaringType)
   at MonoMod.Utils.Extensions.Relink(MethodReference method, Relinker relinker, IGenericParameterProvider context) in /_/src/MonoMod.Utils/Extensions.Relinker.cs:line 390
   at MonoMod.Utils.Extensions.Relink(IMetadataTokenProvider mtp, Relinker relinker, IGenericParameterProvider context) in /_/src/MonoMod.Utils/Extensions.Relinker.cs:line 257
   at MonoMod.Utils.DMDCecilGenerator.GenerateCore(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerators/DMDCecilGenerator.cs:line 115
   at MonoMod.Utils.DMDGenerator`1.Generate(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerator.cs:line 29
   at MonoMod.Utils.DynamicMethodDefinition.Generate(Object context) in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 223
   at MonoMod.Utils.DynamicMethodDefinition.Generate() in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 208
   at MonoMod.UnitTest.ILPatternMatcherTests.ILMatcherDoesNotThrowMatchingDynamicMethodRef() in /_/src/MonoMod.UnitTest/ILPatternMatcherTests.cs:line 44
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)
Test Standard Output
[MonoMod.Utils](2/9/2026 8:49:45AM) Trace: new DynamicMethod: System.Void Test DM 1()
[MonoMod.Utils](2/9/2026 8:49:45AM) Trace: mdef: System.Void Test DM 1()
❌ MonoMod.UnitTest.ManualMultiHookTest.H1HILH2

Class Name: MonoMod.UnitTest.ManualMultiHookTest | Method Name: H1HILH2 | This test is sometimes failing.

Failures present in
  • test-results .NET 7.0 arm64 on MacOS 14 (PGO Off)/TestResults/testresults.macos-14.7.0.arm64.trx
❌ test-results .NET 7.0 arm64 on MacOS 14 (PGO Off)/TestResults/testresults.macos-14.7.0.arm64.trx MonoMod.UnitTest.ManualMultiHookTest.H1HILH2

Took 00:00:00.1222508

Exception message:

System.ArgumentNullException : Value cannot be null. (Parameter 'declaringType')

Stack trace:

   at Mono.Cecil.Mixin.CheckType(Object type, Argument argument)
   at Mono.Cecil.MethodReference..ctor(String name, TypeReference returnType, TypeReference declaringType)
   at MonoMod.Utils.Extensions.Relink(MethodReference method, Relinker relinker, IGenericParameterProvider context) in /_/src/MonoMod.Utils/Extensions.Relinker.cs:line 390
   at MonoMod.Utils.Extensions.Relink(IMetadataTokenProvider mtp, Relinker relinker, IGenericParameterProvider context) in /_/src/MonoMod.Utils/Extensions.Relinker.cs:line 257
   at MonoMod.Utils.DMDCecilGenerator.GenerateCore(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerators/DMDCecilGenerator.cs:line 115
   at MonoMod.Utils.DMDGenerator`1.Generate(DynamicMethodDefinition dmd, Object context) in /_/src/MonoMod.Utils/DMDGenerator.cs:line 29
   at MonoMod.Utils.DynamicMethodDefinition.Generate(Object context) in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 223
   at MonoMod.Utils.DynamicMethodDefinition.Generate() in /_/src/MonoMod.Utils/DynamicMethodDefinition.cs:line 208
   at MonoMod.RuntimeDetour.DetourManager.GenerateSyncProxy(String innerName, MethodSignature Sig, Action`2 emitLoadSyncInfo, Action`3 emitInvoke, Action`3 emitLastCallReturn) in /_/src/MonoMod.RuntimeDetour/DetourManager.Shared.cs:line 429
   at MonoMod.RuntimeDetour.DetourManager.RootManagedChainNode..ctor(MethodBase method) in /_/src/MonoMod.RuntimeDetour/DetourManager.Managed.cs:line 182
   at MonoMod.RuntimeDetour.DetourManager.ManagedDetourState..ctor(MethodBase src) in /_/src/MonoMod.RuntimeDetour/DetourManager.Managed.cs:line 296
   at MonoMod.RuntimeDetour.DetourManager.<>c.<GetDetourState>b__10_0(MethodBase m) in /_/src/MonoMod.RuntimeDetour/DetourManager.Managed.cs:line 751
   at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
   at MonoMod.RuntimeDetour.DetourManager.GetDetourState(MethodBase method) in /_/src/MonoMod.RuntimeDetour/DetourManager.Managed.cs:line 751
   at MonoMod.RuntimeDetour.Hook..ctor(MethodBase source, MethodInfo target, Object targetObject, IDetourFactory factory, DetourConfig config, Boolean applyByDefault) in /_/src/MonoMod.RuntimeDetour/Hook.cs:line 566
   at MonoMod.RuntimeDetour.Hook..ctor(MethodBase source, Delegate target, IDetourFactory factory, DetourConfig config, Boolean applyByDefault) in /_/src/MonoMod.RuntimeDetour/Hook.cs:line 432
   at MonoMod.RuntimeDetour.Hook..ctor(MethodBase source, Delegate target, DetourConfig config, Boolean applyByDefault) in /_/src/MonoMod.RuntimeDetour/Hook.cs:line 420
   at MonoMod.RuntimeDetour.Hook..ctor(MethodBase source, Delegate target, Boolean applyByDefault) in /_/src/MonoMod.RuntimeDetour/Hook.cs:line 359
   at MonoMod.UnitTest.ManualMultiHookTest.Setup() in /_/src/MonoMod.UnitTest/RuntimeDetour/MultiHookTest.cs:line 35
   at MonoMod.UnitTest.ManualMultiHookTest.H1HILH2() in /_/src/MonoMod.UnitTest/RuntimeDetour/MultiHookTest.cs:line 209
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
   at System.Reflection.MethodInvoker.Invoke(Object obj, IntPtr* args, BindingFlags invokeAttr)

Test Standard Output has been omitted because it is too long.

Full results available here

xADDBx added a commit to xADDBx/MonoMod that referenced this pull request Apr 8, 2026
@xADDBx xADDBx mentioned this pull request Apr 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants