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

Reply via email to