diff --git a/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/MethodFixupSignature.cs b/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/MethodFixupSignature.cs index e041a325743ff0..80506e6c2411c0 100644 --- a/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/MethodFixupSignature.cs +++ b/src/coreclr/tools/aot/ILCompiler.ReadyToRun/Compiler/DependencyAnalysis/ReadyToRun/MethodFixupSignature.cs @@ -117,10 +117,12 @@ public override ObjectData GetData(NodeFactory factory, bool relocsOnly = false) ObjectDataSignatureBuilder dataBuilder = new ObjectDataSignatureBuilder(factory, relocsOnly); dataBuilder.AddSymbol(this); - // Optimize some of the fixups into a more compact form + // Optimize some of the fixups into a more compact form. + // The compact token forms cannot carry signature flags, so instantiating and unboxing + // stubs must use the full method signature. ReadyToRunFixupKind fixupKind = _fixupKind; bool optimized = false; - if (_method.Method.IsPrimaryMethodDesc() && !IsInstantiatingStub + if (_method.Method.IsPrimaryMethodDesc() && !IsInstantiatingStub && !_method.Unboxing && _method.ConstrainedType == null && fixupKind == ReadyToRunFixupKind.MethodEntry) { if (!_method.Method.HasInstantiation && !_method.Method.OwningType.HasInstantiation && !_method.Method.OwningType.IsArray)