Re: Suspicion of a compiler bug in clang: using ternary operator in ereport() - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Suspicion of a compiler bug in clang: using ternary operator in ereport()
Date
Msg-id 31026.1391094088@sss.pgh.pa.us
Whole thread Raw
In response to Re: Suspicion of a compiler bug in clang: using ternary operator in ereport()  (Christian Kruse <christian@2ndquadrant.com>)
Responses 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()  (Alvaro Herrera <alvherre@2ndquadrant.com>)
List pgsql-hackers
Christian Kruse <christian@2ndquadrant.com> writes:
> Have a look at the psprintf() call: we first have a _("failed to look
> up effective user id %ld: %s") as an argument, then we have a (long)
> user_id and after that we have a ternary expression using errno. Isn't
> it possible that the first _() changes errno?

While I haven't actually read the gettext docs, I'm pretty sure that
gettext() is defined to preserve errno.  It's supposed to be something
that you can drop into existing printf's without thinking, and if
it mangled errno that would certainly not be the case.

If this isn't true, we've got probably hundreds of places that would
need fixing, most of them of the form printf(_(...), strerror(errno)).
        regards, tom lane



pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: INTERVAL overflow detection is terribly broken
Next
From: Christian Kruse
Date:
Subject: Re: Suspicion of a compiler bug in clang: using ternary operator in ereport()