On Fri, Feb 02, 2024 at 10:27:23AM +0000, Alex Coplan wrote:
> Bootstrapped/regtested on x86_64-apple-darwin, OK for trunk?
> 
> Thanks,
> Alex
> 
> -- >8 --
> 
> When __has_feature was introduced for GCC 14, I included the feature
> cxx_constexpr_string_builtins, since of the relevant string builtins
> that GCC implements, it seems to support constexpr evaluation of those
> builtins.
> 
> However, as the PR shows, GCC doesn't implement the full list of
> builtins in the clang documentation.  After enumerating the builtins,
> the clang docs [1] say:
> 
> > Support for constant expression evaluation for the above builtins can
> > be detected with __has_feature(cxx_constexpr_string_builtins).
> 
> and a strict reading of this would suggest we can't really support
> constexpr evaluation of a builtin if we don't implement the builtin in
> the first place.
> 
> So the conservatively correct thing to do seems to be to stop
> advertising the feature altogether to avoid failing to build code which
> assumes the presence of this feature implies the presence of all the
> builtins listed in the clang documentation.
> 
> [1] : https://clang.llvm.org/docs/LanguageExtensions.html#string-builtins
> 
> gcc/cp/ChangeLog:
> 
>       PR c++/113658
>       * cp-objcp-common.cc (cp_feature_table): Remove entry for
>       cxx_constexpr_string_builtins.
> 
> gcc/testsuite/ChangeLog:
> 
>       PR c++/113658
>       * g++.dg/ext/pr113658.C: New test.

> diff --git a/gcc/cp/cp-objcp-common.cc b/gcc/cp/cp-objcp-common.cc
> index f06edf04ef0..85dde0459fa 100644
> --- a/gcc/cp/cp-objcp-common.cc
> +++ b/gcc/cp/cp-objcp-common.cc
> @@ -110,7 +110,6 @@ static constexpr cp_feature_info cp_feature_table[] =
>    { "cxx_alignof", cxx11 },
>    { "cxx_attributes", cxx11 },
>    { "cxx_constexpr", cxx11 },
> -  { "cxx_constexpr_string_builtins", cxx11 },
>    { "cxx_decltype", cxx11 },
>    { "cxx_decltype_incomplete_return_types", cxx11 },
>    { "cxx_default_function_template_args", cxx11 },
> diff --git a/gcc/testsuite/g++.dg/ext/pr113658.C 
> b/gcc/testsuite/g++.dg/ext/pr113658.C
> new file mode 100644
> index 00000000000..f4a34888f28
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/ext/pr113658.C

Might be better to name this has-feature2.C

> @@ -0,0 +1,13 @@

Please include
// PR c++/113658

> +// { dg-do compile }
> +// { dg-options "" }

Why dg-options ""?  It doesn't seem to have any purpose here.

> +// PR113658: we shouldn't declare support for cxx_constexpr_string_builtins 
> as
> +// GCC is missing some of the builtins that clang implements.
> +
> +#if __has_feature (cxx_constexpr_string_builtins)
> +#error
> +#endif
> +
> +#if __has_extension (cxx_constexpr_string_builtins)
> +#error
> +#endif


Marek

Reply via email to