diff --git a/tests/testopt/readme.txt b/tests/testopt/readme.txt index 6d4e32032c..8144730204 100644 --- a/tests/testopt/readme.txt +++ b/tests/testopt/readme.txt @@ -6,3 +6,4 @@ Register variables: Common subexpression elimination (assembler) Multidimensional array index operation. testcse1.pp CSE and range checking ................ testcse2.pp + web bug 972............................ testcse3.pp \ No newline at end of file diff --git a/tests/testopt/testcse3.pp b/tests/testopt/testcse3.pp new file mode 100644 index 0000000000..b89872d766 --- /dev/null +++ b/tests/testopt/testcse3.pp @@ -0,0 +1,40 @@ +{ $OPT=-O2} +function forms(s: string; len: word): string; +begin + str(len,forms); + forms := s + ', ' + forms; +end; + +procedure wrt2(s: string); +begin + if s <> 'e 123, 4' then + begin + writeln('bug!'); + halt(1); + end; +end; + +type + pstring = ^string; + ta = array[0..254] of pstring; + tb = array[0..254] of byte; + +procedure t(var sel: ta; var selhigh: tb); +var + ml, i: byte; +begin + i := 5; + ml := 8; + new(sel[i]); + sel[i]^ := 'testje 123'; + selhigh[i] := 5; + wrt2(forms(copy(sel[i]^,selhigh[i]+1,255),ml-selhigh[i]+1)); +end; + +var + a: ta; + b: tb; + +begin + t(a,b); +end. \ No newline at end of file