From 19fb48dfa9b3e2b998fae42331decfb17dfb0ce9 Mon Sep 17 00:00:00 2001 From: Jonas Maebe Date: Wed, 22 Jun 2011 19:32:28 +0000 Subject: [PATCH] * prefer "any array" -> "open array" over "single element" -> "open array" conversions, instead failing to choose the best overload (Delphi-compatible) git-svn-id: trunk@17800 - --- .gitattributes | 1 + compiler/defcmp.pas | 4 +++- compiler/htypechk.pas | 2 +- tests/tbs/tb0576.pp | 20 ++++++++++++++++++++ 4 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 tests/tbs/tb0576.pp diff --git a/.gitattributes b/.gitattributes index 15cad1852a..e42b111387 100644 --- a/.gitattributes +++ b/.gitattributes @@ -9112,6 +9112,7 @@ tests/tbs/tb0572.pp svneol=native#text/plain tests/tbs/tb0573.pp svneol=native#text/plain tests/tbs/tb0574.pp svneol=native#text/pascal tests/tbs/tb0575.pp svneol=native#text/plain +tests/tbs/tb0576.pp svneol=native#text/plain tests/tbs/tb205.pp svneol=native#text/plain tests/tbs/ub0060.pp svneol=native#text/plain tests/tbs/ub0069.pp svneol=native#text/plain diff --git a/compiler/defcmp.pas b/compiler/defcmp.pas index a81c227c03..d0f6821ba8 100644 --- a/compiler/defcmp.pas +++ b/compiler/defcmp.pas @@ -664,7 +664,9 @@ implementation equal_defs(def_from,tarraydef(def_to).elementdef) then begin doconv:=tc_equal; - eq:=te_convert_l1; + { also update in htypechk.pas/var_para_allowed if changed + here } + eq:=te_convert_l3; end else begin diff --git a/compiler/htypechk.pas b/compiler/htypechk.pas index 6cdd91e812..b448d50124 100644 --- a/compiler/htypechk.pas +++ b/compiler/htypechk.pas @@ -1609,7 +1609,7 @@ implementation eq:=te_convert_l2 else if equal_defs(def_from,tarraydef(def_to).elementdef) then - eq:=te_convert_l2; + eq:=te_convert_l3; end; end; pointerdef : diff --git a/tests/tbs/tb0576.pp b/tests/tbs/tb0576.pp new file mode 100644 index 0000000000..b04d8ffaae --- /dev/null +++ b/tests/tbs/tb0576.pp @@ -0,0 +1,20 @@ +{ %norun } + +{$mode delphi} + +type ByteArray = array of byte; + +procedure ZeroMemory(var X: array of byte; StartIndex, Count: integer); overload; +begin +end; + +procedure ZeroMemory(var X: array of ByteArray; StartIndex, Count: integer); overload; +begin +end; + +var + buffer: array of byte; +begin + ZeroMemory(Buffer, 0, Length(Buffer)); +end. +