Message ID | YkgX+mBNpkpfROAW@tucnak |
---|---|
State | New |
Headers | show |
Series | libstdc++: Tweak source_location for clang trunk [PR105128] | expand |
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 > >
--- 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; };