[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#722: More Visual Studio 6.0 compiler errors on Windows XP
From: |
Francis Litterio |
Subject: |
bug#722: More Visual Studio 6.0 compiler errors on Windows XP |
Date: |
Fri, 15 Aug 2008 09:35:11 -0400 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.1.50 (windows-nt) |
Andreas Schwab wrote:
> Francis Litterio writes:
>
>> --- dired.c~ 2008-08-14 17:09:53.759788900 -0400
>> +++ dired.c 2008-08-14 17:13:16.585787100 -0400
>> @@ -961,7 +961,7 @@
>> values[7] = make_number (s.st_size);
>> /* If the size is out of range for an integer, return a float. */
>> if (XINT (values[7]) != s.st_size)
>> - values[7] = make_float ((double)s.st_size);
>> + values[7] = make_float ((signed __int64)s.st_size);
>
> Tell Microsoft to fix their compiler, you are changeing perfectly valid
> C into unportable junk.
You are preaching to the choir. :) I just want a clean build on Windows.
Emacs has always compiled using VC++ 6.0 in the past, so some change
must have introduced this problem.
I forgot that dired.c is not Windows-only code, so this patch is more
correct:
--- dired.c~ 31 Jul 2008 05:33:51 -0000 1.153
+++ dired.c 15 Aug 2008 14:04:04 -0000
@@ -961,7 +961,11 @@
values[7] = make_number (s.st_size);
/* If the size is out of range for an integer, return a float. */
if (XINT (values[7]) != s.st_size)
+#if defined(WINDOWSNT)
+ values[7] = make_float ((signed __int64)s.st_size);
+#else
values[7] = make_float ((double)s.st_size);
+#endif
/* If the size is negative, and its type is long, convert it back to
positive. */
if (s.st_size < 0 && sizeof (s.st_size) == sizeof (long))
Also, a 64-bit integer (signed or unsigned) cannot safely be cast to
double without loss of data. An IEEE 754 64-bit floating value only has
52-bits of mantissa. So the non-Windows implementation is not 100%
correct either.
--
Fran
Message not available
bug#722: More Visual Studio 6.0 compiler errors on Windows XP, Stefan Monnier, 2008/08/15