[Python-Dev] Re: sre warnings (original) (raw)
Tim Peters tim.one at comcast.net
Sat Jan 10 01:02:04 EST 2004
- Previous message: [Python-Dev] Re: sre warnings
- Next message: [Python-Dev] Re: sre warnings
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
[Gustavo Niemeyer]
Ohh.. I wasn't aware about this case, since I get no errors at all at this line.
I think Martin is using a more-recent version of gcc than most people here. Everyone on Windows (MSVC) sees these warnings, though.
Do you see any others?
Windows doesn't complain about the ones your compiler complains about; it complains about 17 others, listed here (although the line numbers have probably changed in the last 3 months ):
http://mail.python.org/pipermail/python-dev/2003-October/039059.html
I personally get these:
Modules/sre.c:381: warning: comparison is always true due to limited range of data type Modules/sre.c:383: warning: comparison is always true due to limited range of data type Modules/sre.c:390: warning: comparison is always true due to limited range of data type Modules/sre.c:392: warning: comparison is always true due to limited range of data type Modules/sre.c: In function
srecharset':_ _Modules/sre.c:487: warning: comparison is always true due to limited_ _range of data type_ _Modules/sre.c: In function
sreucharset': Modules/sre.c:487: warning: comparison is always true due to limited range of data type Suggestions welcome.
Upgrade to Windows .
Most of those seem to come from lines of the form
SRE_LOC_IS_WORD((int) ptr[-1]) : 0;
where
SRE_CHAR* ptr
and either
#define SRE_CHAR unsigned char
or #define SRE_CHAR Py_UNICODE
and #define SRE_LOC_IS_WORD(ch) (SRE_LOC_IS_ALNUM((ch)) || (ch) == '_') #define SRE_LOC_IS_ALNUM(ch) ((ch) < 256 ? isalnum((ch)) : 0)
So it's apparently bitching about
(((int) ptr[-1])) < 256
when the "unsigned char" expansion of SRE_CHAR is in effect. I suppose that could be repaired by defining SRE_LOC_IS_ALNUM differently depending on how SRE_CHAR is defined.
The warning on line 487 comes from
if (ch < 65536)
where
SRE_CODE ch
and SRE_CODE is unsigned short or unsigned long, depending on Py_UNICODE_WIDE. This warning is really irritating. I suppose
#if defined(Py_UNICODE_WIDE) || SIZEOF_SHORT > 2 if (ch < 65536) #endif block = ((unsigned char*)set)[ch >> 8]; #if defined(Py_UNICODE_WIDE) || SIZEOF_SHORT > 2 else block = -1; #endif
would shut it up, but that's sure ugly.
- Previous message: [Python-Dev] Re: sre warnings
- Next message: [Python-Dev] Re: sre warnings
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]