On Tue, 5 Oct 2021 at 10:29, Daniel Krügler wrote: > > Am Di., 5. Okt. 2021 um 10:55 Uhr schrieb Jonathan Wakely via > Libstdc++ <libstd...@gcc.gnu.org>: > > > > To avoid needing to export a new symbol from the library (for now) the > > new member function uses __attribute__((always_inline)). > > > > libstdc++-v3/ChangeLog: > > > > * include/std/ostream (operator<<(const volatile void*)): > > Add new overload, as per P1147R1. > > * > > testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc: > > New test. > > > > Tested powerpc64le-linux. Committed to trunk. > > I think the test is insufficient, because it will succeed on every > library implementation regardless of the new feature. Without the new > feature it will select the unexpected operator<<(bool) overload and > just print "1".
Yes, that's true. I did test it locally (and the function is ridiculously simple), and the main purpose of that test was to ensure we don't fail to link due to the new member not being explicitly instantiated in the library. But we might as well make the test do something more useful. Done by the attached patch, tested x86_64-linux, pushed to trunk.
commit 313193edfc3986c40dedce3d0b41455d0bcdbe43 Author: Jonathan Wakely <jwak...@redhat.com> Date: Tue Oct 5 14:45:11 2021 libstdc++: Improve test for printing volatile pointers libstdc++-v3/ChangeLog: * testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc: Check result matches non-volatile pointer. diff --git a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc index 1b1a9434a95..151e13d3bdd 100644 --- a/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc +++ b/libstdc++-v3/testsuite/27_io/basic_ostream/inserters_other/char/volatile_ptr.cc @@ -1,11 +1,15 @@ // { dg-options "-std=gnu++23 -fno-inline" } -// { dg-do link { target c++23 } } +// { dg-do run { target c++23 } } -#include <iostream> +#include <sstream> +#include <testsuite_hooks.h> int main() { int i = 0; - volatile void* p = &i; - std::cout << p << std::endl; + volatile void* vp = &i; + std::ostringstream s1, s2; + s1 << &i; + s2 << vp; + VERIFY( s1.str() == s2.str() ); }