[Patches] fix simple 64-bit warnings/errors in signalmodule.c and bufferobject.c
Trent Mick
trentm@activestate.com
Tue, 6 Jun 2000 14:46:10 -0700
On Tue, Jun 06, 2000 at 05:21:38PM -0400, Tim Peters wrote:
> [GregS]
> > ...
> > # define SAFE_DOWNCAST(v) ((v) <= INT_MAX ? (int)(v) : abort())
>
> [Trent Mick]
> > Sure, but then my compiler will still generate a warning on the
> > int downcast that you have there, hence still filling the compile
> > output with junk.
>
> Will it really? Greg has no *implicit* downcasts in that code, and I'm
> skeptical that your compiler generates a warning on *explicit* downcasts
> (the Win32 MS compiler certainly doesn't). That would be very unusual.
>
my test code (_testmodule.c):
--------------------------------------------
#define SAFE_DOWNCAST(v) ((v) <= INT_MAX ? (int)(v) : abort(),0)
PyObject*
some_function(PyObject *self, PyObject *args)
{
size_t hello = 1234;
int ihello = SAFE_DOWNCAST(hello);
}
-------------------------------------
Compiler output:
-------------------------------------
"c:\ia64xdevsdk\bin\Intel64\ecl.exe" -nologo -W3 -GX -Fp".\ia64-temp-re lease\_test\_test.pch" -YX -Zi -Fd".\ia64-temp-release\_test\\" -Fo".\ia64-temp- release\_test\\" -DWIN32 -Wp64 -Ap64 -DWIN64 -D_WIN64 -FD -c -Od -MD -DNDEBUG -Ic:\ia64xdevsdk\include -Ic:\ia64xdevsdk\include\sys -Ic:\ia64xdevsdk\include\g l -Ic:\ia64xdevsdk\include\mfc -Ic:\ia64xdevsdk\include\atl\include -DDEBUGGING -I"..\Include" -I"..\PC" -I"C:\Program Files\Tcl\include" -D_WINDOWS ..\Module s\_testmodule.c
_testmodule.c
..\Modules\_testmodule.c(30) : warning #810: conversion from "unsigned __int64" to "int" may lose significant bits
int ihello = SAFE_DOWNCAST(hello);
-------------------------------------
^
ANswer: Yes it *still* complains about the explicit downcast. You think it
should not? I don't know if it should. Ideally I should be able to pick and
choose my classes of warnings.
> Your original example was
>
> > int size = sizeof(Py_UNICODE);
>
> and changing PyObject_VAR_HEAD will have no effect on that (i.e., that
> warning will never go away until that specific line of code is changed).
Yes, I am mixing examples. The one above was fabricated but and is usually
tied, later in the code, to a Python string which really is the ob_size issue
that I mentioned.
>
> > Yes, I presume that there is a "right" answer to fix most of
> > these warnings. It is just that the "right" answer is going to
> > have to wait for a little bit.
>
> It doesn't "have to". Python *may* decide to limit sizes to int-sized
> things forever (there's not much *practical* need to expand ob_size -- it
> would just be "nice" to do so), and so long as it does the code is screwed
> up the way it is now.
>
I can't argue with that. Although the change would be practical for *me*
given the work I have been doing. :) And it *would* be practical, in a sense,
for developpers if it cleaned up a bunch of warnings and/or code with
SAFE_DOWNCAST macros all over the place.
> > Until then the Win64 build is going to have gobs of downcast warnings.
>
> Which is bad. You didn't create the problem, and nobody is going to force
> you to fix it. Let's just agree that it *is* "a problem". Then we can make
> progress.
>
Yes, I agree it *is* a problem.
Trent
--
Trent Mick
trentm@activestate.com