From: Jonathan Wakely Date: Thu, 24 Feb 2022 21:33:44 +0000 (+0000) Subject: libstdc++: Fix cast in source_location::current() [PR104602] X-Git-Tag: upstream/12.2.0~1318 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=41cbcf53dc60b7434b9ee059b3a734a47f5bf212;p=platform%2Fupstream%2Fgcc.git libstdc++: Fix cast in source_location::current() [PR104602] This fixes a problem for Clang, which is going to return a non-void pointer from __builtin_source_location(). The current definition of std::source_location::current() converts that to void* and then has to cast it back again in the body (which makes it invalid in a constant expression). By using the actual type of the returned pointer, we avoid the problematic cast for Clang. libstdc++-v3/ChangeLog: PR libstdc++/104602 * include/std/source_location (source_location::current): Use deduced type of __builtin_source_location(). --- diff --git a/libstdc++-v3/include/std/source_location b/libstdc++-v3/include/std/source_location index d6c7be5..7b091bb 100644 --- a/libstdc++-v3/include/std/source_location +++ b/libstdc++-v3/include/std/source_location @@ -43,12 +43,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { private: using uint_least32_t = __UINT_LEAST32_TYPE__; + using __builtin_ret_type = decltype(__builtin_source_location()); public: // [support.srcloc.cons], creation static consteval source_location - current(const void* __p = __builtin_source_location()) noexcept + current(__builtin_ret_type __p = __builtin_source_location()) noexcept { source_location __ret; __ret._M_impl = static_cast (__p);