On Mon, May 21, 2018 at 12:30 PM, Tom Lane <t...@sss.pgh.pa.us> wrote: > For amusement's sake, I was playing around with NetBSD-current (9-to-be) > today, and tried to compile Postgres on it. It works OK --- and I can > even confirm that our new code for using ARM v8 CRC instructions works
Excellent news. > there --- but I got a boatload of compile warnings like this: > > latch.c:1180:4: warning: %m is only allowed in syslog(3) like functions > [-Wformat=] > ereport(ERROR, > ^~~~~~~ > > A bit of googling turned up the patch that caused this [1], which was > soon followed by some well-reasoned push-back [2]; but the warning's > still there, so evidently the forces of bullheadedness won. I was > ready to discount the whole thing as being another badly designed > no-wonder-gcc-upstream-won't-take-it compiler warning, when I noticed that > the last few warnings in my output were pointing out a live bug, to wit > using %m with plain old printf rather than elog/ereport. So I fixed > that [3], but I'm thinking that we need to take a bit more care here. I tried this on macOS and FreeBSD using GCC and Clang: both accept printf("%m") without warning and then just print out "m". It'll be interesting to see if the NetBSD patch/idea travels further or some other solution can be found. I've raised this on the freebsd-hackers list, let's see... I bet there's other software out there that just prints out "m" when things go wrong. It's arguably something that you'd want the complier to understand as a C dialect thing. -- Thomas Munro http://www.enterprisedb.com