aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2022-04-02 12:49:38 +0200
committerJakub Jelinek <jakub@redhat.com>2022-04-02 12:49:38 +0200
commit2a82301d409d3aa0e0b3b884e4c6daeaa0486d6b (patch)
tree43de7f092e1afc698a3272b4b65091a44cb0400b
parentf0ccbe10f152b55fb809264d2ae11c724ab09ff6 (diff)
downloadgcc-2a82301d409d3aa0e0b3b884e4c6daeaa0486d6b.zip
gcc-2a82301d409d3aa0e0b3b884e4c6daeaa0486d6b.tar.gz
gcc-2a82301d409d3aa0e0b3b884e4c6daeaa0486d6b.tar.bz2
libstdc++: Tweak source_location for clang trunk [PR105128]
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. 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.
-rw-r--r--libstdc++-v3/include/std/source_location15
1 files changed, 7 insertions, 8 deletions
diff --git a/libstdc++-v3/include/std/source_location b/libstdc++-v3/include/std/source_location
index 7b091bb..1e26142 100644
--- a/libstdc++-v3/include/std/source_location
+++ b/libstdc++-v3/include/std/source_location
@@ -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;
};