浏览代码

* 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 -

Jonas Maebe 14 年之前
父节点
当前提交
19fb48dfa9
共有 4 个文件被更改,包括 25 次插入2 次删除
  1. 1 0
      .gitattributes
  2. 3 1
      compiler/defcmp.pas
  3. 1 1
      compiler/htypechk.pas
  4. 20 0
      tests/tbs/tb0576.pp

+ 1 - 0
.gitattributes

@@ -9112,6 +9112,7 @@ tests/tbs/tb0572.pp svneol=native#text/plain
 tests/tbs/tb0573.pp svneol=native#text/plain
 tests/tbs/tb0573.pp svneol=native#text/plain
 tests/tbs/tb0574.pp svneol=native#text/pascal
 tests/tbs/tb0574.pp svneol=native#text/pascal
 tests/tbs/tb0575.pp svneol=native#text/plain
 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/tb205.pp svneol=native#text/plain
 tests/tbs/ub0060.pp svneol=native#text/plain
 tests/tbs/ub0060.pp svneol=native#text/plain
 tests/tbs/ub0069.pp svneol=native#text/plain
 tests/tbs/ub0069.pp svneol=native#text/plain

+ 3 - 1
compiler/defcmp.pas

@@ -664,7 +664,9 @@ implementation
                   equal_defs(def_from,tarraydef(def_to).elementdef) then
                   equal_defs(def_from,tarraydef(def_to).elementdef) then
                 begin
                 begin
                   doconv:=tc_equal;
                   doconv:=tc_equal;
-                  eq:=te_convert_l1;
+                  { also update in htypechk.pas/var_para_allowed if changed
+                    here }
+                  eq:=te_convert_l3;
                 end
                 end
                else
                else
                 begin
                 begin

+ 1 - 1
compiler/htypechk.pas

@@ -1609,7 +1609,7 @@ implementation
                     eq:=te_convert_l2
                     eq:=te_convert_l2
                   else
                   else
                     if equal_defs(def_from,tarraydef(def_to).elementdef) then
                     if equal_defs(def_from,tarraydef(def_to).elementdef) then
-                      eq:=te_convert_l2;
+                      eq:=te_convert_l3;
                 end;
                 end;
             end;
             end;
           pointerdef :
           pointerdef :

+ 20 - 0
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.
+