[Python-Dev] Re: sre warnings (original) (raw)

Tim Peters tim.one at comcast.net
Sat Jan 10 01:02:04 EST 2004


[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.



More information about the Python-Dev mailing list