Re: cpluspluscheck vs ICU again

From: Andres Freund <andres(at)anarazel(dot)de>
To: John Naylor <johncnaylorls(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Peter Eisentraut <peter(at)eisentraut(dot)org>
Subject: Re: cpluspluscheck vs ICU again
Date: 2025-07-04 12:39:45
Message-ID: 6266wlm6zurvpsgyte4733jxt37ek355xdxtaddabv2elyvmh2@kh4nsheaidln
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Hi,

On 2025-07-02 14:01:13 +0700, John Naylor wrote:
> On Tue, Jul 1, 2025 at 9:24 PM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:
> > Ha, indeed you are right. On my RHEL9 box, it's kinda drowned out
> > by complaints about
> >
> > /usr/include/c++/11/bits/range_access.h:109:3: error: template with C linkage
> > 109 | template<typename _Tp> _Tp* end(valarray<_Tp>&) noexcept;
> > | ^~~~~~~~
> > /tmp/headerscheck.u5CrRM/test.cpp:1:1: note: ‘extern "C"’ linkage started here
> > 1 | extern "C" {
> > | ^~~~~~~~~~
>
> After pushing my fix, I looked into this, and CI works around this by
> disabling ICU. A proper fix was discussed here, but it trailed off:
>
> https://www.postgresql.org/message-id/flat/20230311033727.koa4saxy5wyquu6s%40awork3.anarazel.de#03346c63050bbc69dfca8981a5698e4a
>
> I came up with the attached -- Andres, Peter, does this match your recollection?

I think the proper fix here would be to not expose ucol.h to the world,
i.e. not include it from something like pg_locale.h.

> diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h
> index 44ff60a25b4..300c78ba93c 100644
> --- a/src/include/utils/pg_locale.h
> +++ b/src/include/utils/pg_locale.h
> @@ -15,7 +15,12 @@
> #include "mb/pg_wchar.h"
>
> #ifdef USE_ICU
> +/* only include the C APIs, to avoid errors in cpluspluscheck */
> +#undef U_SHOW_CPLUSPLUS_API
> +#define U_SHOW_CPLUSPLUS_API 0
> #include <unicode/ucol.h>
> +/* restore so that extensions can include the C++ APIs */
> +#undef U_SHOW_CPLUSPLUS_API
> #endif

Does the #undef U_SHOW_CPLUSPLUS_API thing actually work, given that ucol.h
presumably won't be included again due to #ifdef protection?

Greetings,

Andres Freund

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Hayato Kuroda (Fujitsu) 2025-07-04 13:01:12 RE: Suggestion to add --continue-client-on-abort option to pgbench
Previous Message Kirill Panin 2025-07-04 12:07:22 Re: Binary operators for cubes