Interesting ... would be interesting to see the asm generated in the 
good/bad cases (/FAs option, I think)...

Only 64-bit Vista is a bit strange though (I'm on Vista 32, and Rick also 
saw the problem on XP).

However, I think you may well be right about something bad in the 2005 
compiler or libraries -- ran with the 2008 version for Friday evening, all 
of yesterday, and a hour or so this morning -- no pesky 'r' seen.

Will switch to Rick's new version later this  morning.

Mike

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Mike Cowlishaw, IBM Fellow
http://bit.ly/mfc
IBM UK (MP8), PO Box 31, Birmingham Road, Warwick, CV34 5JL

Mark Miesfeld <miesf...@gmail.com> wrote on 26/04/2009 04:23:04:

> Mark Miesfeld <miesf...@gmail.com> 
> 26/04/2009 04:23
> 
> Please respond to
> Open Object Rexx Developer Mailing List 
<oorexx-devel@lists.sourceforge.net>
> 
> To
> 
> ooRexx Dev List <oorexx-devel@lists.sourceforge.net>
> 
> cc
> 
> Subject
> 
> [Oorexx-devel] Tracked down problem with: compiler, Vista, ?
> 
> Rick,
> 
> In working on the SysFileSearch bug, I tracked down what seems to be a
> case where the VS 2005 compiler produces wrong code and the VS 2008
> produces code that works.
> 
> It's bizarre, so it takes a bit to explain it.  On Vista 64-bit, the
> GetLine() function causes a memory exception here:
> 
> scan = (char *)memchr(filedata->scan, CH_NL, filedata->data);
> 
> The exception comes because it has gone past the end of the file
> buffer.  The check for the end of the buffer is right before, and the
> whole thing looks like:
> 
> if (!(filedata->data)) {             /* if out of current buffer   */
>   if (filedata->residual) {          /* may be another buffer      */
>     ReadNextBuffer(filedata);        /* try to read one            */
>     if (!filedata->data)             /* nothing more?              */
>       return true;                   /* all done                   */
>   }
>   else
>     return true;                     /* return EOF condition       */
> }
>                                        /* look for a carriage return */
> scan = (char *)memchr(filedata->scan, CH_NL, filedata->data);
> 
> filedata->data keeps track of where in the buffer we are and when it
> is 0, we've used up the buffer.
> 
> The bizarre thing is, when I compile with Visual Studio 2005, when
> filedata->data == 0, the if !(filedata->data) test passes and the
> function keeps going on past the end of the buffer.  Eventually,
> memchr goes to compare memory it can't access.
> 
> If I compile with Visual Studio 2008, then things work as they should.
>  This is with the no debug build only.  The debug build works fine
> when compiled with either VS 2005 or VS 2008.
> 
> I sent you a text file with a lot output.  It is easier to read when
> the lines don't wrap.
> 
> I used this printf to show this behaviour:
> 
> printf("GetLine: size=%u scan=%p filedata->data=%u residual=%u
> filedata->data == 0 ? %d\n",
>        filedata->size, filedata->scan, filedata->data,
> filedata->residual, (filedata->data == 0));
> 
> 
> For the build that crashes you see this:
> 
> GetLine: size=31452 scan=00000000001E9FDC filedata->data=0 residual=0
> filedata->data == 0 ? 0
> GetLine: size=31452 scan=00000000001EE48D filedata->data=4294949711
> residual=0 filedata->data == 0 ? 0
> 
> You see that even though filedata->data does equal 0, (filedata->data
> == 0) returns 0.
> 
> So, SysFileSearch keeps calling GetLine() until you finally reach
> memory that is not accessible.
> 
> This only happens on Vista 64-bit, only on a no debug build, and only
> when the compiler is VS 2005.  On XP 64-bit it works fine with either
> compiler.  Also on 32-bit Vista it works fine with either compiler.
> 
> If there was the same problem on Vista 32 bit, i.e. it crashed with
> the VS 2005 compiled version but worked with the VS 2008, then I was
> thinking maybe a similar thing is happening with Mike's problem.
> Still, if Mike can not reproduce his problem using the VS 2008
> compiled version, then maybe it is a similar thing.
> 
> --
> Mark Miesfeld
> 
> 
------------------------------------------------------------------------------
> Crystal Reports &#45; New Free Runtime and 30 Day Trial
> Check out the new simplified licensign option that enables unlimited
> royalty&#45;free distribution of the report engine for externally facing 

> server and web deployment.
> http://p.sf.net/sfu/businessobjects
> _______________________________________________
> Oorexx-devel mailing list
> Oorexx-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/oorexx-devel






Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number 
741598. 
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU





------------------------------------------------------------------------------
Crystal Reports &#45; New Free Runtime and 30 Day Trial
Check out the new simplified licensign option that enables unlimited
royalty&#45;free distribution of the report engine for externally facing 
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Oorexx-devel mailing list
Oorexx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/oorexx-devel

Reply via email to