From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | David Rowley <dgrowleyml(at)gmail(dot)com> |
Cc: | Peter Eisentraut <peter(at)eisentraut(dot)org>, Masahiko Sawada <msawada(at)postgresql(dot)org>, pgsql-committers(at)lists(dot)postgresql(dot)org |
Subject: | Re: pgsql: pg_logicalinspect: Fix possible crash when passing a directory p |
Date: | 2025-07-16 14:56:20 |
Message-ID: | 1244428.1752677780@sss.pgh.pa.us |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-committers |
[ this thread was referenced recently, bringing it back top-of-mind ]
David Rowley <dgrowleyml(at)gmail(dot)com> writes:
> On Thu, 13 Mar 2025 at 21:33, Peter Eisentraut <peter(at)eisentraut(dot)org> wrote:
>> Is there a way to reshuffle those conditionals to make this actually do
>> something useful on MSVC?
> I've just been experimenting with this and it seems the problem isn't
> with pg_unreachable(), it's with the compiler not understanding that
> the particular pg_unreachable() is always reached.
> What's happening is down to the multi-eval protection code for elevel
> in ereport_domain(). Because elevel is assigned to the variable
> "elevel_" the compiler seems to lose its proof that the
> pg_unreachable() is always reached. Adjusting that condition to use
> the elevel parameter directly makes the warning disappear.
Looking again at the code for ereport_domain(), I wondered if
something like this would help MSVC see through it:
#define ereport_domain(elevel, domain, ...) \
do { \
const int elevel_ = (elevel); \
+ const bool is_error_ = (elevel_ >= ERROR); \
pg_prevent_errno_in_scope(); \
if (errstart(elevel_, domain)) \
__VA_ARGS__, errfinish(__FILE__, __LINE__, __func__); \
- if (elevel_ >= ERROR) \
+ if (is_error_) \
pg_unreachable(); \
} while(0)
This preserves single evaluation of the elevel parameter, and
perhaps it'd move the needle on whether the compiler thinks
is_error_ is a compile-time constant. I'm just guessing
though, don't have this compiler to test with.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Nathan Bossart | 2025-07-16 16:51:40 | pgsql: psql: Fix note on project naming in output of \copyright. |
Previous Message | Michael Paquier | 2025-07-16 02:59:43 | pgsql: Refactor non-supported compression error message in toast_compre |