From 88d0255e628a59248a2c242d5194a8d80467b134 Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Wed, 27 Jan 2021 20:14:32 +0100 Subject: [PATCH] #2417 --- NETGenerator/NETGenerator.cs | 3 ++- TestSuite/generics48.pas | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 TestSuite/generics48.pas diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index 834a361da..27820a51c 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -5576,7 +5576,8 @@ namespace PascalABCCompiler.NETGenerator { if (fi_info.field_type.IsValueType || fi_info.field_type.IsGenericParameter) { - if (is_field_reference && value.type.is_generic_parameter && value.type.base_type != null && value.type.base_type.is_class && value.type.base_type.base_type != null) + if (is_field_reference && (value.type.is_generic_parameter && value.type.base_type != null && value.type.base_type.is_class && value.type.base_type.base_type != null + || value.conversion_type != null && value.conversion_type.is_generic_parameter && value.conversion_type.base_type != null && value.conversion_type.base_type.is_class && value.conversion_type.base_type.base_type != null)) il.Emit(OpCodes.Ldfld, fi); else il.Emit(OpCodes.Ldflda, fi); diff --git a/TestSuite/generics48.pas b/TestSuite/generics48.pas new file mode 100644 index 000000000..26459fd2f --- /dev/null +++ b/TestSuite/generics48.pas @@ -0,0 +1,15 @@ +type + t0 = class + v := 123; + end; + +procedure p1(o: T); +where T: t0, constructor; +begin + assert(t0(o).v = 123); + var p := procedure -> o := o; +end; + +begin + p1(new t0); +end. \ No newline at end of file