From 5d4607f65acf02c0f2f6bc528e14b950def95923 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 30 Oct 2011 19:22:55 +0000 Subject: [PATCH] * ignore errors in setlength parsing inside a generic functin, resolves #20557 git-svn-id: trunk@19561 - --- .gitattributes | 1 + compiler/pinline.pas | 26 ++++++++++++++++++-------- tests/webtbs/tw20557.pp | 27 +++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 tests/webtbs/tw20557.pp diff --git a/.gitattributes b/.gitattributes index 4a9068c378..5a4bc9deb0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -11888,6 +11888,7 @@ tests/webtbs/tw20421.pp svneol=native#text/pascal tests/webtbs/tw2045.pp svneol=native#text/plain tests/webtbs/tw2046a.pp svneol=native#text/plain tests/webtbs/tw20527.pp svneol=native#text/plain +tests/webtbs/tw20557.pp svneol=native#text/pascal tests/webtbs/tw2059.pp svneol=native#text/plain tests/webtbs/tw2065.pp svneol=native#text/plain tests/webtbs/tw2069.pp svneol=native#text/plain diff --git a/compiler/pinline.pas b/compiler/pinline.pas index ab04d396c0..64550169dd 100644 --- a/compiler/pinline.pas +++ b/compiler/pinline.pas @@ -57,7 +57,7 @@ implementation scanner, pbase,pexpr, { codegen } - cgbase + cgbase,procinfo ; @@ -508,12 +508,22 @@ implementation isarray:=is_dynamic_array(destppn.resultdef); if not((destppn.resultdef.typ=stringdef) or isarray) then - begin - CGMessage(type_e_mismatch); - paras.free; - exit; - end; - + begin + { possibly generic involved? } + if df_generic in current_procinfo.procdef.defoptions then + begin + result.free; + result:=internalstatements(newstatement); + paras.free; + exit; + end + else + begin + CGMessage(type_e_mismatch); + paras.free; + exit; + end; + end; { only dynamic arrays accept more dimensions } if (dims>1) then begin @@ -584,7 +594,7 @@ implementation cordconstnode.create(getparaencoding(destppn.resultdef),u16inttype,true), paras ) - ); + ); end else begin diff --git a/tests/webtbs/tw20557.pp b/tests/webtbs/tw20557.pp new file mode 100644 index 0000000000..fe43bce81f --- /dev/null +++ b/tests/webtbs/tw20557.pp @@ -0,0 +1,27 @@ +program generictest5; + +{$mode delphi}{$H+} + +type + + TRec = record + Value : T; + end; + TRecArray = array of TRec; + + { TFoo } + + TFoo = class + FArr : TRecArray; + procedure Test; + end; + +{ TFoo } + +procedure TFoo.Test; +begin + SetLength(FArr, 1); +end; + +begin +end.