Re: Suspicion of a compiler bug in clang: using ternary operator in ereport()
От | Andres Freund |
---|---|
Тема | Re: Suspicion of a compiler bug in clang: using ternary operator in ereport() |
Дата | |
Msg-id | 20140130091521.GM30218@alap3.anarazel.de обсуждение исходный текст |
Ответ на | Re: Suspicion of a compiler bug in clang: using ternary operator in ereport() (Christian Kruse <christian@2ndquadrant.com>) |
Ответы |
Re: Suspicion of a compiler bug in clang: using ternary
operator in ereport()
|
Список | pgsql-hackers |
On 2014-01-30 08:32:20 +0100, Christian Kruse wrote: > Hi Tom, > > On 29/01/14 20:06, Tom Lane wrote: > > Christian Kruse <christian@2ndquadrant.com> writes: > > > Your reasoning sounds quite logical to me. Thus I did a > > > grep -RA 3 "ereport" src/* | less > > > and looked for ereport calls with errno in it. I found quite a few, > > > attached you will find a patch addressing that issue. > > > > Committed. > > Great! Thanks! > > > I found a couple of errors in your patch, but I think everything is > > addressed in the patch as committed. > > While I understand most modifications I'm a little bit confused by > some parts. Have a look at for example this one: > > + *errstr = psprintf(_("failed to look up effective user id %ld: %s"), > + (long) user_id, > + errno ? strerror(errno) : _("user does not exist")); > > Why is it safe here to use errno? It is possible that the _() function > changes errno, isn't it? But the evaluation order is strictly defined here, no? First the boolean check for errno, then *either* strerror(errno), *or* the _(). Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/PostgreSQL Development, 24x7 Support, Training & Services
В списке pgsql-hackers по дате отправления: