<div dir="ltr"><div class="gmail_default" style="font-family:courier new,monospace">Hi Sven,</div><div class="gmail_default" style="font-family:courier new,monospace"><br></div><div class="gmail_default" style="font-family:courier new,monospace">

I don't know how to find that, could you please explain?  Attached dbg.tar.bz2 is the demo program and assembly code generated by the compile. Where is the "point of specialization" in that file?</div><div class="gmail_default" style="font-family:courier new,monospace">

<br></div><div class="gmail_default" style="font-family:courier new,monospace">My working program is quite complex, I copied part of the code related to this problem in snippet.pas</div><div class="gmail_default" style="font-family:courier new,monospace">

<br></div><div class="gmail_default" style="font-family:courier new,monospace">Thank you!</div><div class="gmail_default" style="font-family:courier new,monospace">Xiangrong</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">

2014-02-13 23:53 GMT+08:00 Sven Barth <span dir="ltr"><<a href="mailto:pascaldragon@googlemail.com" target="_blank">pascaldragon@googlemail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Am 13.02.2014 16:42, schrieb Xiangrong Fang:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
Hi All,<br>
<br>
I encountered a very strange problem. The code looks like this:<br>
<br>
//In Unit1.pas:<br>
<br>
//sel is an object of TIntVector and<br>
//TIntVector = specialize TVector<Integer><br></div>
*sel.Sort([soEliminateNA, soReversed]);<div class=""><br>
*<br>
<br>
//In vector.pas:<br>
<br>
procedure TVector.Sort(Options: SortOptions);<br>
var<br>
i, gap, order, first, last, pos: Integer;<br>
Temp: T;<br>
begin<br></div>
*if FCount < 2 then**Exit; <-- problem here*<div class=""><br>
if soReversed in Options then order := 1 else order := -1;<br>
... ...<br>
<br>
My purpose is to skip sorting if the vector's element count is less than 2.<br>
<br>
Now the problem is that this statement does not have any effect (see attached screenshot). The debugger refuse to stop on the breakpoint, but goes directly to the line below it!<br>
<br>
What's more strange is that if I change the line to break after “then”, i.e.:<br>
<br>
begin<br></div>
*if FCount < 2 then***<br>
*Exit;*<div class=""><br>
if soReversed in Options then order := 1 else order := -1;<br>
... ...<br>
<br>
Now it worked!<br>
<br>
I also wrote a simple test program, but can NOT reproduce this bug there.<br>
<br>
My TVector source code is here: <a href="https://github.com/xrfang/fpcollection/blob/master/src/units/vector.pas" target="_blank">https://github.com/xrfang/<u></u>fpcollection/blob/master/src/<u></u>units/vector.pas</a><br>


<br>
<br>
Any help is greatly appreciated.<br>
</div></blockquote>
Could you please check/compare the generated assembler code? Use "-al" to have the compiler generate it and you'll need to look at the file where you specialized the TVector.<br>
<br>
Regards,<br>
Sven<br>
______________________________<u></u>_________________<br>
fpc-pascal maillist  -  <a href="mailto:fpc-pascal@lists.freepascal.org" target="_blank">fpc-pascal@lists.freepascal.<u></u>org</a><br>
<a href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal" target="_blank">http://lists.freepascal.org/<u></u>cgi-bin/mailman/listinfo/fpc-<u></u>pascal</a><br>
</blockquote></div><br></div>