diff --git a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/TypePreinit.cs b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/TypePreinit.cs index 6306894147eed..5564907e4bc24 100644 --- a/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/TypePreinit.cs +++ b/src/coreclr/tools/aot/ILCompiler.Compiler/Compiler/TypePreinit.cs @@ -325,6 +325,8 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack() public virtual float AsSingle() => ThrowInvalidProgram(); public virtual double AsDouble() => ThrowInvalidProgram(); public virtual Value Clone() => ThrowInvalidProgram(); + + public virtual bool TargetSupportsWritingFieldData => true; } private abstract class BaseValueTypeValue : Value @@ -2399,8 +2403,14 @@ public RuntimeTypeValue(TypeDesc type) public override bool GetRawData(NodeFactory factory, out object data) { - data = factory.SerializedMaximallyConstructableRuntimeTypeObject(TypeRepresented); - return true; + if (TargetSupportsWritingFieldData) + { + data = factory.SerializedMaximallyConstructableRuntimeTypeObject(TypeRepresented); + return true; + } + + data = null; + return false; } public override ReferenceTypeValue ToForeignInstance(int baseInstructionCounter, TypePreinit preinitContext) { @@ -2414,6 +2424,8 @@ public override void WriteFieldData(ref ObjectDataBuilder builder, NodeFactory f { builder.EmitPointerReloc(factory.SerializedMaximallyConstructableRuntimeTypeObject(TypeRepresented)); } + + public override bool TargetSupportsWritingFieldData => EETypeNode.SupportsFrozenRuntimeTypeInstances(Type.Context.Target); } private sealed class ReadOnlySpanValue : BaseValueTypeValue, IInternalModelingOnlyValue