From aee5723c7e938aac9d3a49dd909776efc5f1bead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D0=BD=D0=B4=D0=B0=D1=80=D0=B5=D0=B2=20=D0=98?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD?= Date: Sun, 28 Oct 2018 12:41:38 +0100 Subject: [PATCH] fix #1381 --- NETGenerator/NETGenerator.cs | 16 ++++++++++++++-- TestSuite/pointers9.pas | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 TestSuite/pointers9.pas diff --git a/NETGenerator/NETGenerator.cs b/NETGenerator/NETGenerator.cs index efff77ffe..b910edc64 100644 --- a/NETGenerator/NETGenerator.cs +++ b/NETGenerator/NETGenerator.cs @@ -9685,8 +9685,20 @@ namespace PascalABCCompiler.NETGenerator if (is_constructor || cur_meth.IsStatic == false) pos = (byte)pb.Position; else pos = (byte)(pb.Position - 1); //***********************End of Kolay modified********************** - if (pos <= 255) il.Emit(OpCodes.Ldarga_S, pos); - else il.Emit(OpCodes.Ldarga, pos); + if (value.parameter.parameter_type != parameter_type.var) + { + if (pos <= 255) + il.Emit(OpCodes.Ldarga_S, pos); + else + il.Emit(OpCodes.Ldarga, pos); + } + else + { + if (pos <= 255) + il.Emit(OpCodes.Ldarg_S, pos); + else + il.Emit(OpCodes.Ldarg, pos); + } } else { diff --git a/TestSuite/pointers9.pas b/TestSuite/pointers9.pas new file mode 100644 index 000000000..73520bb37 --- /dev/null +++ b/TestSuite/pointers9.pas @@ -0,0 +1,18 @@ +type + r1 = record end; + +var h1: ^r1; + hh1: ^^r1; + +procedure p1(var h: ^r1); +begin + var hh:=@h; + assert(hh = hh1); + assert(h = h1); +end; + +begin + New(h1); + hh1 := @h1; + p1(h1); +end. \ No newline at end of file