public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] libstdc++: Tweak source_location for clang trunk [PR105128]
@ 2022-04-02  9:31 Jakub Jelinek
  2022-04-02 10:46 ` Jonathan Wakely
  0 siblings, 1 reply; 2+ messages in thread
From: Jakub Jelinek @ 2022-04-02  9:31 UTC (permalink / raw)
  To: Jonathan Wakely; +Cc: gcc-patches, libstdc++

Hi!

Apparently clang trunk implemented __builtin_source_location(), but the
using __builtin_ret_type = decltype(__builtin_source_location());
which has been added for it isn't enough, they also need the
std::source_location::__impl class to be defined (but incomplete seems
to be good enough) before the builtin is used.

The following has been tested on godbolt with clang trunk (old version
fails with
error: 'std::source_location::__impl' was not found; it must be defined before '__builtin_source_location' is called
and some follow-up errors), getting back to just void * instead of
__builtin_ret_type and commenting out using doesn't work either and
just struct __impl; before using __builtin_ret_type doesn't work too.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2022-04-02  Jakub Jelinek  <jakub@redhat.com>

	PR libstdc++/105128
	* include/std/source_location (std::source_location::__impl): Move
	definition before using __builtin_ret_type.

--- libstdc++-v3/include/std/source_location	2022-02-25 10:46:53.275178858 +0100
+++ libstdc++-v3/include/std/source_location	2022-04-01 19:36:02.056236397 +0200
@@ -43,6 +43,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   {
   private:
     using uint_least32_t = __UINT_LEAST32_TYPE__;
+    struct __impl
+    {
+      const char* _M_file_name;
+      const char* _M_function_name;
+      unsigned _M_line;
+      unsigned _M_column;
+    };
     using __builtin_ret_type = decltype(__builtin_source_location());
 
   public:
@@ -76,14 +83,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { return _M_impl ? _M_impl->_M_function_name : ""; }
 
   private:
-    struct __impl
-    {
-      const char* _M_file_name;
-      const char* _M_function_name;
-      unsigned _M_line;
-      unsigned _M_column;
-    };
-
     const __impl* _M_impl = nullptr;
   };
 

	Jakub


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] libstdc++: Tweak source_location for clang trunk [PR105128]
  2022-04-02  9:31 [PATCH] libstdc++: Tweak source_location for clang trunk [PR105128] Jakub Jelinek
@ 2022-04-02 10:46 ` Jonathan Wakely
  0 siblings, 0 replies; 2+ messages in thread
From: Jonathan Wakely @ 2022-04-02 10:46 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Jonathan Wakely, libstdc++, gcc-patches

On Sat, 2 Apr 2022, 10:32 Jakub Jelinek via Libstdc++, <
libstdc++@gcc.gnu.org> wrote:

> Hi!
>
> Apparently clang trunk implemented __builtin_source_location(), but the
> using __builtin_ret_type = decltype(__builtin_source_location());
> which has been added for it isn't enough, they also need the
> std::source_location::__impl class to be defined (but incomplete seems
> to be good enough) before the builtin is used.
>
> The following has been tested on godbolt with clang trunk (old version
> fails with
> error: 'std::source_location::__impl' was not found; it must be defined
> before '__builtin_source_location' is called
> and some follow-up errors), getting back to just void * instead of
> __builtin_ret_type and commenting out using doesn't work either and
> just struct __impl; before using __builtin_ret_type doesn't work too.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>

OK, thanks.



> 2022-04-02  Jakub Jelinek  <jakub@redhat.com>
>
>         PR libstdc++/105128
>         * include/std/source_location (std::source_location::__impl): Move
>         definition before using __builtin_ret_type.
>
> --- libstdc++-v3/include/std/source_location    2022-02-25
> 10:46:53.275178858 +0100
> +++ libstdc++-v3/include/std/source_location    2022-04-01
> 19:36:02.056236397 +0200
> @@ -43,6 +43,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>    {
>    private:
>      using uint_least32_t = __UINT_LEAST32_TYPE__;
> +    struct __impl
> +    {
> +      const char* _M_file_name;
> +      const char* _M_function_name;
> +      unsigned _M_line;
> +      unsigned _M_column;
> +    };
>      using __builtin_ret_type = decltype(__builtin_source_location());
>
>    public:
> @@ -76,14 +83,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
>      { return _M_impl ? _M_impl->_M_function_name : ""; }
>
>    private:
> -    struct __impl
> -    {
> -      const char* _M_file_name;
> -      const char* _M_function_name;
> -      unsigned _M_line;
> -      unsigned _M_column;
> -    };
> -
>      const __impl* _M_impl = nullptr;
>    };
>
>
>         Jakub
>
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-04-02 10:46 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-02  9:31 [PATCH] libstdc++: Tweak source_location for clang trunk [PR105128] Jakub Jelinek
2022-04-02 10:46 ` Jonathan Wakely

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).