diff --git a/.gitattributes b/.gitattributes index 29206d5f57..77e0a77d6d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8275,6 +8275,7 @@ tests/tbs/tb0565.pp svneol=native#text/plain tests/tbs/tb0566.pp svneol=native#text/plain tests/tbs/tb0567.pp svneol=native#text/plain tests/tbs/tb0568.pp svneol=native#text/plain +tests/tbs/tb0569.pp svneol=native#text/pascal tests/tbs/tb205.pp svneol=native#text/plain tests/tbs/ub0060.pp svneol=native#text/plain tests/tbs/ub0069.pp svneol=native#text/plain @@ -8311,6 +8312,7 @@ tests/tbs/ub0461.pp svneol=native#text/plain tests/tbs/ub0489.pp svneol=native#text/plain tests/tbs/ub0489b.pp svneol=native#text/plain tests/tbs/ub0506.pp svneol=native#text/plain +tests/tbs/ub0569.pp svneol=native#text/pascal tests/test/README.txt svneol=native#text/plain tests/test/alglib/t_testconvunit.pp svneol=native#text/plain tests/test/alglib/t_testcorrunit.pp svneol=native#text/plain diff --git a/compiler/scanner.pas b/compiler/scanner.pas index 3976097cac..c38403ed23 100644 --- a/compiler/scanner.pas +++ b/compiler/scanner.pas @@ -2094,7 +2094,7 @@ In case not, the value returned can be arbitrary. begin len:=length(cstringpattern); recordtokenbuf.write(len,sizeof(sizeint)); - recordtokenbuf.write(pattern[1],length(pattern)); + recordtokenbuf.write(cstringpattern[1],length(cstringpattern)); end; _CCHAR, _INTCONST, @@ -2181,7 +2181,7 @@ In case not, the value returned can be arbitrary. begin replaytokenbuf.read(wlen,sizeof(sizeint)); setlength(cstringpattern,wlen); - replaytokenbuf.read(pattern[1],length(pattern)); + replaytokenbuf.read(cstringpattern[1],wlen); orgpattern:=''; pattern:=''; end; diff --git a/tests/tbs/tb0569.pp b/tests/tbs/tb0569.pp new file mode 100644 index 0000000000..ea8492b736 --- /dev/null +++ b/tests/tbs/tb0569.pp @@ -0,0 +1,25 @@ +{$mode objfpc} + +uses + ub0569; + +type + TMyGen = specialize TGen; + +var + MyGen : TMyGen; + +begin + MyGen:=TMyGen.Create; + if MyGen.getstring<>'Free Pascal' then + halt(1); + if MyGen.getwidestring<>'Free Pascal'#1234 then + halt(2); + if MyGen.getint<>1234123412341234 then + halt(3); + if MyGen.getreal<>333.0 then + halt(4); + MyGen.Free; + writeln('ok'); +end. + diff --git a/tests/tbs/ub0569.pp b/tests/tbs/ub0569.pp new file mode 100644 index 0000000000..650a5a9a90 --- /dev/null +++ b/tests/tbs/ub0569.pp @@ -0,0 +1,43 @@ +{ %norun } +{$mode objfpc} +unit ub0569; + + interface + + type + generic TGen = class + function getstring : string; + function getwidestring : widestring; + function getint : int64; + function getreal : real; + end; + + implementation + + function TGen.getstring : string; + begin + result:='Free Pascal'; + end; + + + function TGen.getwidestring : widestring; + begin + { force widestring } + result:='Free Pascal'#1234; + end; + + + function TGen.getint : int64; + begin + result:=1234123412341234; + end; + + + function TGen.getreal : real; + begin + result:=333.0; + end; + + +end. +