On 25 December 2014 at 04:47, Tom Lane <t...@sss.pgh.pa.us> wrote: > David Rowley <dgrow...@gmail.com> writes: > > On 25 December 2014 at 00:34, Andres Freund <and...@2ndquadrant.com> > wrote: > >> I really wonder if we can't make msvc reliably recognize this kind of > >> scenario - especially this case is pretty trivial? > > > The attached patch removes the warning, but likely can't be used in case > > someone somewhere is doing elog(var++, "my error"); > > Yeah, we're *not* doing that. There are definitely places where > ereport/elog are used with nonconstant elevel. > > Agreed. The patch was intended as a demo of where the problem is. Although I don't see why non-const elevel matters. Non-stable expressions are what actually matter.
> It's curious though that MSVC fails to notice that the variable never > changes. I wonder whether we could get away with changing the elog > macro to do > const int elevel_ = (elevel); > as ereport does, and whether it would help if so. > > Unlikely, as the one that was just fixed above is an ereport. I'll dig around a little more and see if there's some way to get MSVC to optimise this somehow. The 1% reduction in the postgres.exe seems worth a little bit of investigation time. Regards David Rowley