Tcl Source Code

View Ticket
Login
Ticket UUID: 1571954
Title: Xeon64 data loss from casting
Type: Bug Version: obsolete: 8.4.14
Submitter: andersmoe Created on: 2006-10-06 07:29:42
Subsystem: 52. Portability Support Assigned To: msofer
Priority: 5 Medium Severity:
Status: Closed Last Modified: 2006-10-06 21:16:15
Resolution: Fixed Closed By: patthoyts
    Closed on: 2006-10-06 14:16:15
Description:
Tcl version : core-8-4-branch
makefile.vc version : 1.100.2.9
generic/tclCompile.h : 1.33
Compiler : MSVC 8.0
processor : Xeon 64 EMT64
Windows XP 64

When running Tcl, I get the following :

----------------
Run-Time Check Failure #1 - A cast to a smaller data 
type has caused a loss
of data.  If this was intentional, you should mask 
the source of the cast
with the appropriate bitmask.  For example:

 char c = (i & 0xFF);

Changing the code in this way will not affect the 
quality of the resulting
optimized code.

--------------

pointing to  TclStoreInt4AtPtr and similar macros.

the problem seems to disappear if I change, say, 
TclStoreInt4AtPtr to 

#define TclStoreInt4AtPtr(i, p) \
    *(p)   = (unsigned char) (0xFF & ((unsigned int) 
(i) >> 24)); \
    *(p+1) = (unsigned char) (0xFF & ((unsigned int) 
(i) >> 16)); \
    *(p+2) = (unsigned char) (0xFF & ((unsigned int) 
(i) >>  8)); \
    *(p+3) = (unsigned char) (0xFF & ((unsigned int) 
(i)))

This also applies to TclEmitInstInt4.

I've attached the tclCompile.h  I ended up with.
Note that I have not done any testing to smoke out 
any bugs that may have resulted from the above 
modifications.
User Comments: patthoyts added on 2006-10-06 21:16:15:
Logged In: YES 
user_id=202636

Committed the removal of /RTCc for Tcl in both HEAD and
core-8-4-branch. I'll close the bug - please re-open if this
fails to solve the issue.

patthoyts added on 2006-10-06 18:15:22:
Logged In: YES 
user_id=202636

This is likely caused by including the /RTCc flag which
enables this runtime type conversion check. In Tcl this is
not an error so the solution is to remove this compiler flag
from makefile.vc. We shall keep /RTC1 which enables runtime
stack checking and uninitialized variable checking.

andersmoe added on 2006-10-06 14:29:42:

File Added - 196838: tclCompile.c

Attachments: