[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-07-07 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

Jonathan Wakely  changed:

   What|Removed |Added

   Target Milestone|12.0|11.4

--- Comment #11 from Jonathan Wakely  ---
Backported for 11.4

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-07-07 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

--- Comment #10 from CVS Commits  ---
The releases/gcc-11 branch has been updated by Jonathan Wakely
:

https://gcc.gnu.org/g:ed377f0fb3419fceed25ae378aca2efca1a6b79d

commit r11-10115-ged377f0fb3419fceed25ae378aca2efca1a6b79d
Author: Jonathan Wakely 
Date:   Thu Feb 24 21:33:44 2022 +

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().

(cherry picked from commit 41cbcf53dc60b7434b9ee059b3a734a47f5bf212)

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-24 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

--- Comment #9 from Jonathan Wakely  ---
Hmm, we probably want to backport this, otherwise this check will start to pass
for future clang versions:
#if __cplusplus > 201703L && __has_builtin(__builtin_source_location)
but the code will be invalid.

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-24 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

Jonathan Wakely  changed:

   What|Removed |Added

 Status|NEW |RESOLVED
   Target Milestone|--- |12.0
 Resolution|--- |FIXED

--- Comment #8 from Jonathan Wakely  ---
I hope this works for you now, please reopen if not.

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-24 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

--- Comment #7 from CVS Commits  ---
The master branch has been updated by Jonathan Wakely :

https://gcc.gnu.org/g:41cbcf53dc60b7434b9ee059b3a734a47f5bf212

commit r12-7379-g41cbcf53dc60b7434b9ee059b3a734a47f5bf212
Author: Jonathan Wakely 
Date:   Thu Feb 24 21:33:44 2022 +

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().

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-21 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

--- Comment #6 from Jonathan Wakely  ---
We can make that more readable:

--- 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);

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-21 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

--- Comment #5 from Jakub Jelinek  ---
No, with auto it doesn't work.

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-21 Thread foom at fuhm dot net via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

--- Comment #4 from James Y Knight  ---
Yea that should work. Or even just `auto`.

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-19 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek  ---
Can't we make it
static consteval source_location
current(decltype (__builtin_source_location ()) __p
= __builtin_source_location()) noexcept
?

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-19 Thread redi at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

Jonathan Wakely  changed:

   What|Removed |Added

 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2022-02-19

--- Comment #2 from Jonathan Wakely  ---
But we can certainly move the cast into the default argument.

[Bug libstdc++/104602] std::source_location::current uses cast from void*

2022-02-18 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104602

--- Comment #1 from Andrew Pinski  ---
https://gcc.gnu.org/pipermail/gcc-patches/2019-November/534374.html
Explains why it is currently this way.