diff --git a/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/SignatureBuilder.cs b/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/SignatureBuilder.cs index 6632e7439655fc..01bb5fe766d78d 100644 --- a/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/SignatureBuilder.cs +++ b/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/SignatureBuilder.cs @@ -221,6 +221,10 @@ public void EmitTypeSignature(TypeDesc typeDesc, SignatureContext context) EmitPointerTypeSignature((PointerType)typeDesc, context); return; + case TypeFlags.FunctionPointer: + EmitFunctionPointerTypeSignature((FunctionPointerType)typeDesc, context); + return; + case TypeFlags.ByRef: EmitByRefTypeSignature((ByRefType)typeDesc, context); break; @@ -366,6 +370,22 @@ private void EmitPointerTypeSignature(PointerType type, SignatureContext context EmitTypeSignature(type.ParameterType, context); } + private void EmitFunctionPointerTypeSignature(FunctionPointerType type, SignatureContext context) + { + SignatureCallingConvention callingConvention = (SignatureCallingConvention)(type.Signature.Flags & MethodSignatureFlags.UnmanagedCallingConventionMask); + SignatureAttributes callingConventionAttributes = ((type.Signature.Flags & MethodSignatureFlags.Static) != 0 ? SignatureAttributes.None : SignatureAttributes.Instance); + + EmitElementType(CorElementType.ELEMENT_TYPE_FNPTR); + EmitUInt((uint)((byte)callingConvention | (byte)callingConventionAttributes)); + EmitUInt((uint)type.Signature.Length); + + EmitTypeSignature(type.Signature.ReturnType, context); + for (int argIndex = 0; argIndex < type.Signature.Length; argIndex++) + { + EmitTypeSignature(type.Signature[argIndex], context); + } + } + private void EmitByRefTypeSignature(ByRefType type, SignatureContext context) { EmitElementType(CorElementType.ELEMENT_TYPE_BYREF); diff --git a/src/tests/issues.targets b/src/tests/issues.targets index a720de9c70abc5..56a24fa0786db1 100644 --- a/src/tests/issues.targets +++ b/src/tests/issues.targets @@ -925,9 +925,6 @@ https://github.com/dotnet/runtime/issues/63856 - - https://github.com/dotnet/runtime/issues/72822 -