[Python-Dev] PY_FORMAT_SIZE_T warnings on OS X
Brett Cannon
brett at python.org
Thu Apr 27 07:19:46 CEST 2006
On 4/26/06, Tim Peters <tim.peters at gmail.com> wrote:
> [Brett Cannon]
> >> I created patch 1474907 with a fix for it. Checks if %zd works for
> >> size_t and if so sets PY_FORMAT_SIZE_T to "z", otherwise just doesn't
> >> set the macro def.
> >>
> >> Assigned to Martin to make sure I didn't foul it up, but pretty much
> >> anyone could probably double-check it.
>
> [Martin v. Löwis]
> > Unfortunately, SF stopped sending emails when you get assigned an issue,
> > so I didn't receive any message when you created that patch.
> >
> > I now reviewed it, and think the test might not fail properly on systems
> > where %zd isn't supported.
>
> I agree with Martin's patch comments. The C standards don't require
> that printf fail if an unrecognized format gimmick is used (behavior
> is explicitly "undefined" then). For example,
>
> """
> #include <stdio.h>
> #include <stdlib.h>
>
> int main()
> {
> int i;
> i = printf("%zd\n", (size_t)0);
> printf("%d\n", i);
> return 0;
> }
> """
>
> prints "zd\n3\n" under all of MSVC 6.0, MSVC 7.1, and gcc (Cygwin) on
> WinXP. Using sprintf instead and checking the string produced seems
> much more likely to work.
>
> After the trunk freeze melts, I suggest just _trying_ stuff. The
> buildbot system covers a bunch of platforms now, and when trying to
> out-hack ill-defined C stuff "try it and see" is easier than thinking
> <0.5 wink>.
>
I uploaded a new version that uses sprintf() and then does strncmp()
on the result to see if it matches what is expected. That should be
explicit enough to make sure that only a properly supported z modifier
results in a successful test.
If anyone has a chance to check it again before the trunk unfreezes,
that would be great.
-Brett
More information about the Python-Dev
mailing list