On Fri, Dec 6, 2024 at 4:13 AM Tom Lane <t...@sss.pgh.pa.us> wrote: > Thomas Munro <thomas.mu...@gmail.com> writes: > > Yeah. This warning is visible on CI, and on fairywren since its MSYS2 > > upgrade a couple of months ago. Old MinGW didn't like %lld (I think > > perhaps the printf from msvcrt.dll from 1996 didn't like it and MinGW > > knew that), but new MinGW doesn't like %I64d (that's interesting, but > > not relevant here because %lld is clearly the correct format string, > > and it works). We should just revert that change. Here's a patch. > > +1
Thanks for looking. Pushed, and that fixed that on fairywren. > > Those were there before the upgrade. POSIX says that environ should > > not be declared by a header, but Windows apparently declares it, or at > > least its cousin _environ, in <stdlib.h> which we include in c.h. I > > have no idea why Visual Studio doesn't warn, or why the documentation > > only tells you about _environ and not environ, or where the macro (?) > > comes from that renames it, but it passes CI and is > > warning-free on both toolchains if you just hide the offending > > declarations. > > Isn't this likely to break things for every other Windows toolchain? > I think the concept might be OK, but we need a tighter #if condition. Cool, I'll do that for MinGW only then. > An alternative could be to add the missing dllimport on Windows; > it's not clear whether other toolchains would care. I've been digging through its headers (working on a fix for the off_t bug report) and noticed in passing that it probably thinks we're re-declaring this function: https://github.com/mingw-w64/mingw-w64/blob/8bcd5fc1a72c0b6da3147bf21a4a494c81d14fae/mingw-w64-headers/crt/stdlib.h#L221 Seems like a good idea to give that a wide berth :-)