public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/99692] New: Lookup for operator<< skips global scope
@ 2021-03-21 4:01 skaniskin at berkeley dot edu
2021-03-21 5:26 ` [Bug libstdc++/99692] " pinskia at gcc dot gnu.org
` (12 more replies)
0 siblings, 13 replies; 14+ messages in thread
From: skaniskin at berkeley dot edu @ 2021-03-21 4:01 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
Bug ID: 99692
Summary: Lookup for operator<< skips global scope
Product: gcc
Version: 10.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: skaniskin at berkeley dot edu
Target Milestone: ---
The following code is rejected by g++.
#include <ostream>
#include <vector>
struct CustomStream : std::ostream {};
std::ostream& operator<<(std::ostream& s, const std::vector<int>&)
{
return s;
}
CustomStream&& operator<<(CustomStream&& s, const std::vector<int>& v)
{
static_cast<std::ostream&>(s) << v;
return std::move(s);
}
int main()
{
CustomStream() << std::vector<int>{};
}
The problem is there with all recent versions of gcc and independent of
compiler flags
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug libstdc++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
@ 2021-03-21 5:26 ` pinskia at gcc dot gnu.org
2021-03-21 5:28 ` pinskia at gcc dot gnu.org
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-03-21 5:26 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
Andrew Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|c++ |libstdc++
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Right the problem is here (and not with the compiler itself if there is a
problem):
/home/ubuntu/upstream-gcc/include/c++/11.0.1/ostream:747:46: error: no match
for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const
std::vector<int>’)
746 | __void_t<decltype(declval<_Ostream&>()
| ~~~~~~~~~~~~~~~~~~~~
747 | << declval<const
_Tp&>())>>
| ^~~~~~~~~~~~~~~~~~~~~~~~
But by definition at this point operator << does not exist and is not
considered as it is not found via ADL because both std::basic_ostream<char> and
std::vector<int> are in the std namespace and the global namespace is not
considered.
/home/ubuntu/upstream-gcc/include/c++/11.0.1/ostream:773:5: required by
substitution of ‘template<class _Ostream, class _Tp> typename
std::enable_if<std::__and_<std::__not_<std::is_lvalue_reference<_Tp> >,
std::__is_convertible_to_basic_ostream<_Ostream>, std::__is_insertable<typename
std::__is_convertible_to_basic_ostream<_Tp>::__ostream_type, const _Tp&, void>
>::value, typename
std::__is_convertible_to_basic_ostream<_Tp>::__ostream_type>::type
std::operator<<(_Ostream&&, const _Tp&) [with _Ostream = CustomStream; _Tp =
std::vector<int>]’
t78.cc:21:41: required from here
template<typename _Ostream, typename _Tp>
inline
typename enable_if<__and_<__not_<is_lvalue_reference<_Ostream>>,
__is_convertible_to_basic_ostream<_Ostream>,
__is_insertable<
__rvalue_ostream_type<_Ostream>,
const _Tp&>>::value,
__rvalue_ostream_type<_Ostream>>::type
operator<<(_Ostream&& __os, const _Tp& __x)
It is the __is_insertable in the above.
So it might be the wrong type being used to check __is_insertable ....
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug libstdc++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
2021-03-21 5:26 ` [Bug libstdc++/99692] " pinskia at gcc dot gnu.org
@ 2021-03-21 5:28 ` pinskia at gcc dot gnu.org
2021-03-21 6:01 ` skaniskin at gmail dot com
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-03-21 5:28 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #1)
> Right the problem is here (and not with the compiler itself if there is a
> problem):
> /home/ubuntu/upstream-gcc/include/c++/11.0.1/ostream:747:46: error: no match
> for ‘operator<<’ (operand types are ‘std::basic_ostream<char>’ and ‘const
> std::vector<int>’)
> 746 | __void_t<decltype(declval<_Ostream&>()
> | ~~~~~~~~~~~~~~~~~~~~
> 747 | << declval<const
> _Tp&>())>>
> | ^~~~~~~~~~~~~~~~~~~~~~~~
>
>
> But by definition at this point operator << does not exist and is not
> considered as it is not found via ADL because both std::basic_ostream<char>
> and std::vector<int> are in the std namespace and the global namespace is
> not considered.
>
> /home/ubuntu/upstream-gcc/include/c++/11.0.1/ostream:773:5: required by
> substitution of ‘template<class _Ostream, class _Tp> typename
> std::enable_if<std::__and_<std::__not_<std::is_lvalue_reference<_Tp> >,
> std::__is_convertible_to_basic_ostream<_Ostream>,
> std::__is_insertable<typename
> std::__is_convertible_to_basic_ostream<_Tp>::__ostream_type, const _Tp&,
> void> >::value, typename
> std::__is_convertible_to_basic_ostream<_Tp>::__ostream_type>::type
> std::operator<<(_Ostream&&, const _Tp&) [with _Ostream = CustomStream; _Tp =
> std::vector<int>]’
> t78.cc:21:41: required from here
> template<typename _Ostream, typename _Tp>
> inline
> typename enable_if<__and_<__not_<is_lvalue_reference<_Ostream>>,
> __is_convertible_to_basic_ostream<_Ostream>,
> __is_insertable<
> __rvalue_ostream_type<_Ostream>,
> const _Tp&>>::value,
> __rvalue_ostream_type<_Ostream>>::type
> operator<<(_Ostream&& __os, const _Tp& __x)
>
> It is the __is_insertable in the above.
> So it might be the wrong type being used to check __is_insertable ....
If anything it is the __rvalue_ostream_type<_Ostream> part if I am reading this
code correctly.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug libstdc++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
2021-03-21 5:26 ` [Bug libstdc++/99692] " pinskia at gcc dot gnu.org
2021-03-21 5:28 ` pinskia at gcc dot gnu.org
@ 2021-03-21 6:01 ` skaniskin at gmail dot com
2021-03-21 12:21 ` redi at gcc dot gnu.org
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: skaniskin at gmail dot com @ 2021-03-21 6:01 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #3 from Sergey Kaniskin <skaniskin at gmail dot com> ---
(In reply to Andrew Pinski from comment #1)
> Right the problem is here (and not with the compiler itself if there is a
> problem)
I was unsure whether to file it under compiler or stdlibc++ as it’s accepted by
another compilers using stdlibc++.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug libstdc++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (2 preceding siblings ...)
2021-03-21 6:01 ` skaniskin at gmail dot com
@ 2021-03-21 12:21 ` redi at gcc dot gnu.org
2021-03-21 12:23 ` redi at gcc dot gnu.org
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2021-03-21 12:21 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Sergey Kaniskin from comment #3)
> I was unsure whether to file it under compiler or stdlibc++ as it’s accepted
> by another compilers using stdlibc++.
There's no such component, it's libstdc++. But if the same libstdc++ code works
with other compilers then it's probably not a libstdc++ bug.
The __rvalue_ostream_type constraints are going away soon:
https://gcc.gnu.org/pipermail/gcc-patches/2021-March/566863.html
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug libstdc++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (3 preceding siblings ...)
2021-03-21 12:21 ` redi at gcc dot gnu.org
@ 2021-03-21 12:23 ` redi at gcc dot gnu.org
2021-03-21 13:56 ` skaniskin at gmail dot com
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2021-03-21 12:23 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #5 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Andrew Pinski from comment #1)
> But by definition at this point operator << does not exist and is not
> considered as it is not found via ADL because both std::basic_ostream<char>
> and std::vector<int> are in the std namespace and the global namespace is
> not considered.
Which seems correct to me. Users should not be overloading operator<< for types
defined by the standard library anyway. You don't own vector<int> so you don't
get to say how it should be output to std::ostream.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug libstdc++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (4 preceding siblings ...)
2021-03-21 12:23 ` redi at gcc dot gnu.org
@ 2021-03-21 13:56 ` skaniskin at gmail dot com
2021-03-21 23:24 ` redi at gcc dot gnu.org
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: skaniskin at gmail dot com @ 2021-03-21 13:56 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #6 from Sergey Kaniskin <skaniskin at gmail dot com> ---
> Which seems correct to me. Users should not be overloading operator<< for
> types defined by the standard library anyway. You don't own vector<int> so
> you don't get to say how it should be output to std::ostream.
I am sorry, do you mean it is a valid rejection or that it's just a bad taste?
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug libstdc++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (5 preceding siblings ...)
2021-03-21 13:56 ` skaniskin at gmail dot com
@ 2021-03-21 23:24 ` redi at gcc dot gnu.org
2021-05-06 4:07 ` [Bug c++/99692] " skaniskin at gmail dot com
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2021-03-21 23:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
I mean that the test used in the library code is doing the right thing. I
haven't investigated whether the compiler is not handling the lookup correctly,
but I don't think there's a libstdc++ bug here.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (6 preceding siblings ...)
2021-03-21 23:24 ` redi at gcc dot gnu.org
@ 2021-05-06 4:07 ` skaniskin at gmail dot com
2021-05-06 9:05 ` redi at gcc dot gnu.org
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: skaniskin at gmail dot com @ 2021-05-06 4:07 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
Sergey Kaniskin <skaniskin at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|libstdc++ |c++
--- Comment #8 from Sergey Kaniskin <skaniskin at gmail dot com> ---
Thanks to Junekey Jeon, I have an example that does not overload operator<< for
a member of std.
#include <iostream>
#include <vector>
struct CustomStream : std::ostream {};
namespace N {
class A{};
}
std::ostream& operator<<(std::ostream& s, const N::A&)
{
return s;
}
CustomStream&& operator<<(CustomStream&& s, const N::A& v)
{
static_cast<std::ostream&>(s) << v;
return std::move(s);
}
int main()
{
CustomStream() << N::A{};
}
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (7 preceding siblings ...)
2021-05-06 4:07 ` [Bug c++/99692] " skaniskin at gmail dot com
@ 2021-05-06 9:05 ` redi at gcc dot gnu.org
2021-05-06 9:38 ` redi at gcc dot gnu.org
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2021-05-06 9:05 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #9 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #4)
> The __rvalue_ostream_type constraints are going away soon:
> https://gcc.gnu.org/pipermail/gcc-patches/2021-March/566863.html
N.B. that change is on gcc trunk now.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (8 preceding siblings ...)
2021-05-06 9:05 ` redi at gcc dot gnu.org
@ 2021-05-06 9:38 ` redi at gcc dot gnu.org
2021-05-06 12:12 ` redi at gcc dot gnu.org
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2021-05-06 9:38 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Ever confirmed|0 |1
See Also| |https://gcc.gnu.org/bugzill
| |a/show_bug.cgi?id=51577
Status|UNCONFIRMED |NEW
Last reconfirmed| |2021-05-06
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Reduced:
namespace std
{
struct ostream { };
template<typename T> T&& declval();
template<typename...> using void_t = void;
struct false_type { static constexpr bool value = false; };
struct true_type { static constexpr bool value = true; };
template<bool, typename = void> struct enable_if { };
template<typename T> struct enable_if<true, T> { using type = T; };
void __is_convertible_to_basic_ostream_test(ostream*);
template<typename _Tp, typename = void>
struct __is_convertible_to_basic_ostream
: false_type
{ };
template<typename _Tp>
struct __is_convertible_to_basic_ostream<_Tp,
decltype(__is_convertible_to_basic_ostream_test(declval<_Tp*>()))>
: true_type
{
using __ostream_type = ostream&;
};
template<typename _Tp>
struct __is_convertible_to_basic_ostream<_Tp&>
: false_type
{ using __ostream_type = void; };
template<typename _Ostream, typename _Tp, typename = void>
struct __is_insertable : false_type {};
template<typename _Ostream, typename _Tp>
struct __is_insertable<_Ostream, _Tp,
void_t<decltype(declval<_Ostream&>()
<< declval<const _Tp&>())>>
: true_type {};
template<typename _Ostream>
using __rvalue_ostream_type =
typename __is_convertible_to_basic_ostream<
_Ostream>::__ostream_type;
template<typename _Ostream, typename _Tp>
inline
typename enable_if<__is_convertible_to_basic_ostream<_Ostream>::value
&& __is_insertable<__rvalue_ostream_type<_Ostream>,
const _Tp&>::value,
__rvalue_ostream_type<_Ostream>>::type
operator<<(_Ostream&& __os, const _Tp&)
{
return __os;
}
}
struct CustomStream : std::ostream {};
namespace N {
class A{};
}
std::ostream& operator<<(std::ostream& s, const N::A&)
{
return s;
}
CustomStream& operator<<(CustomStream&& s, const N::A&)
{
return s;
}
int main()
{
CustomStream() << N::A{};
}
Clang accepts this, GCC doesn't.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (9 preceding siblings ...)
2021-05-06 9:38 ` redi at gcc dot gnu.org
@ 2021-05-06 12:12 ` redi at gcc dot gnu.org
2021-05-06 13:07 ` redi at gcc dot gnu.org
2021-12-16 18:47 ` ppalka at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2021-05-06 12:12 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #11 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #10)
> template<typename _Ostream, typename _Tp>
> struct __is_insertable<_Ostream, _Tp,
> void_t<decltype(declval<_Ostream&>()
> << declval<const _Tp&>())>>
The problem is that this check produces a hard error (rather than substitution
failure) for declval<std::ostream&>() << declval<const N::A&>().
The relevant operator is not found by ADL, because it's not in the associated
namespaces of std::ostream or N::A (which is IMHO a design error in the code,
but nevermind). So the void_t expression should get a substitution error.
I think the problem is that PR 51577 causes GCC to look in the global scope and
so incorrectly find the declaration of:
std::ostream& operator<<(std::ostream& s, const N::A&)
which means that the __is_insertable check ... goes wrong somehow? I think it
makes the void_t expression ambiguous because of the global operator<< overload
which is not meant to be found.
The reduced example above can be reduced further:
namespace std
{
struct ostream { };
template<typename T> T&& declval();
template<typename...> using void_t = void;
struct false_type { static constexpr bool value = false; };
struct true_type { static constexpr bool value = true; };
template<typename _Ostream, typename _Tp, typename = void>
struct __is_insertable : false_type {};
template<typename _Ostream, typename _Tp>
struct __is_insertable<_Ostream, _Tp,
void_t<decltype(declval<_Ostream&>()
<< declval<const _Tp&>())>>
: true_type {};
}
struct CustomStream : std::ostream {};
namespace N {
class A{};
}
std::ostream& operator<<(std::ostream& s, const N::A&)
{
return s;
}
int main()
{
static_assert( ! std::__is_insertable<std::ostream, N::A>::value, "" );
}
This avoids the hard error in __is_insertable, but GCC fails the static_assert
(where as Clang passes it) which is PR 51577.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (10 preceding siblings ...)
2021-05-06 12:12 ` redi at gcc dot gnu.org
@ 2021-05-06 13:07 ` redi at gcc dot gnu.org
2021-12-16 18:47 ` ppalka at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: redi at gcc dot gnu.org @ 2021-05-06 13:07 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
--- Comment #12 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #9)
> (In reply to Jonathan Wakely from comment #4)
> > The __rvalue_ostream_type constraints are going away soon:
> > https://gcc.gnu.org/pipermail/gcc-patches/2021-March/566863.html
>
> N.B. that change is on gcc trunk now.
And the gcc-11 branch, so the original testcases compile now because the
problematic __is_insertable check isn't in the library now. The reduced cases
above still fail on all branches.
^ permalink raw reply [flat|nested] 14+ messages in thread
* [Bug c++/99692] Lookup for operator<< skips global scope
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
` (11 preceding siblings ...)
2021-05-06 13:07 ` redi at gcc dot gnu.org
@ 2021-12-16 18:47 ` ppalka at gcc dot gnu.org
12 siblings, 0 replies; 14+ messages in thread
From: ppalka at gcc dot gnu.org @ 2021-12-16 18:47 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99692
Patrick Palka <ppalka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Resolution|--- |FIXED
Status|NEW |RESOLVED
Target Milestone|--- |12.0
--- Comment #13 from Patrick Palka <ppalka at gcc dot gnu.org> ---
Should be fully fixed for GCC 12 by r12-6022.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2021-12-16 18:47 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-03-21 4:01 [Bug c++/99692] New: Lookup for operator<< skips global scope skaniskin at berkeley dot edu
2021-03-21 5:26 ` [Bug libstdc++/99692] " pinskia at gcc dot gnu.org
2021-03-21 5:28 ` pinskia at gcc dot gnu.org
2021-03-21 6:01 ` skaniskin at gmail dot com
2021-03-21 12:21 ` redi at gcc dot gnu.org
2021-03-21 12:23 ` redi at gcc dot gnu.org
2021-03-21 13:56 ` skaniskin at gmail dot com
2021-03-21 23:24 ` redi at gcc dot gnu.org
2021-05-06 4:07 ` [Bug c++/99692] " skaniskin at gmail dot com
2021-05-06 9:05 ` redi at gcc dot gnu.org
2021-05-06 9:38 ` redi at gcc dot gnu.org
2021-05-06 12:12 ` redi at gcc dot gnu.org
2021-05-06 13:07 ` redi at gcc dot gnu.org
2021-12-16 18:47 ` ppalka at gcc dot gnu.org
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).