diff --git a/.gitattributes b/.gitattributes index 2488e60f9d..8ad7bf889d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -15945,6 +15945,7 @@ tests/webtbs/tw32510.pp svneol=native#text/plain tests/webtbs/tw3252.pp svneol=native#text/plain tests/webtbs/tw3255.pp svneol=native#text/plain tests/webtbs/tw3257.pp svneol=native#text/plain +tests/webtbs/tw32576.pp svneol=native#text/pascal tests/webtbs/tw3259.pp svneol=native#text/plain tests/webtbs/tw3261.pp svneol=native#text/plain tests/webtbs/tw3263.pp svneol=native#text/plain diff --git a/compiler/x86/aoptx86.pas b/compiler/x86/aoptx86.pas index 9875315018..b2632c4278 100644 --- a/compiler/x86/aoptx86.pas +++ b/compiler/x86/aoptx86.pas @@ -1117,6 +1117,8 @@ unit aoptx86; begin GetNextInstruction(p, hp1); DebugMsg('PeepHole Optimization Mov2Nop done',p); + { take care of the register (de)allocs following p } + UpdateUsedRegs(tai(p.next)); asml.remove(p); p.free; p:=hp1; diff --git a/tests/webtbs/tw32576.pp b/tests/webtbs/tw32576.pp new file mode 100644 index 0000000000..c3069ac2a3 --- /dev/null +++ b/tests/webtbs/tw32576.pp @@ -0,0 +1,37 @@ +{$mode objfpc} +{$R+} +{$H+} +program xx; + + +uses sysutils; + + +function strlsIndexOf(str, searched: pansichar; l1, l2: longint): longint; +begin + result:=-1; //function removed for minimal example +end; + + +function strindexof(const str, searched: string): longint; inline; +begin + if str = '' then begin result := 0; exit; end; + result := strlsIndexOf(pchar(pointer(str)) , pchar(searched), length(str) , length(searched)); + if result < 0 then begin result := 0; exit; end; + inc(result); +end; + + +function strBefore(const s, sep: string): string; +var + i: Integer; +begin + i := strIndexOf(s, sep); // line 26 + if i = 0 then result := '' + else result := copy(s, 1, i-1); +end; + + +begin + strBefore('hallo', 'a'); +end. \ No newline at end of file