On Thu, 20 Feb 2025 at 17:06, Thomas Schwinge <tschwi...@baylibre.com> wrote:
>
> In a '-fno-exceptions' configuration:
>
>     In file included from 
> ../../../../../source-gcc/libstdc++-v3/src/c++20/format.cc:29:
>     [...]/build-gcc/[...]/libstdc++-v3/include/format: In function ‘void 
> std::__throw_format_error(const char*)’:
>     [...]/build-gcc/[...]/libstdc++-v3/include/format:200:36: error: unused 
> parameter ‘__what’ [-Werror=unused-parameter]
>       200 |   __throw_format_error(const char* __what)
>           |                        ~~~~~~~~~~~~^~~~~~
>
>         libstdc++-v3/
>         * include/bits/c++config [!__cpp_exceptions]
>         (_GLIBCXX_THROW_OR_ABORT): Reference '_EXC'.
> ---
>  libstdc++-v3/include/bits/c++config | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libstdc++-v3/include/bits/c++config 
> b/libstdc++-v3/include/bits/c++config
> index b0ca6579cfb..e9782c03ee2 100644
> --- a/libstdc++-v3/include/bits/c++config
> +++ b/libstdc++-v3/include/bits/c++config
> @@ -253,7 +253,7 @@
>  # if __cpp_exceptions
>  #  define _GLIBCXX_THROW_OR_ABORT(_EXC) (throw (_EXC))
>  # else
> -#  define _GLIBCXX_THROW_OR_ABORT(_EXC) (__builtin_abort())
> +#  define _GLIBCXX_THROW_OR_ABORT(_EXC) ((void) (_EXC), __builtin_abort())

We don't want to evaluate _EXC before aborting. There's no reason to
e.g. concatenate strings and allocate memory to do so, or copy
filesystem::path objects into a filesystem::filesystem_error that will
never be thrown, or obtain a reference to an error_category.

I don't think we want/need this at all, but it could be done like this
if we need _EXC to be present but unused:

#  define _GLIBCXX_THROW_OR_ABORT(_EXC) (__builtin_abort(), (void)(_EXC))

Reply via email to