On Mon, 4 Dec 2023 at 16:42, Will Hawkins wrote: > > Hello! > > Thank you, as always, for the great work that you do on libstdc++. The > inout_ptr implementation properly handles the issue raised in LWG 3897 > but it seems like having an explicit test might be a good idea.
Thanks, Will, we should definitely have a test for this. I've tweaked it a bit to avoid leaking the pointer (in case anybody runs the tests under valgrind or ASan) and to add your new test to the existing file (to avoid the overhead of a separate test just for this one check). See attached ...
commit c02f3696fdb07d1a06c1aa7b035be9a20d65b803 Author: Will Hawkins <hawki...@obs.cr> Date: Mon Dec 4 20:59:44 2023 libstdc++: Add test for LWG Issue 3897 Add a test to verify that the implementation of inout_ptr is not vulnerable to LWG Issue 3897. libstdc++-v3/ChangeLog: * testsuite/20_util/smartptr.adapt/inout_ptr/2.cc: Add check for LWG Issue 3897. Co-authored-by: Jonathan Wakely <jwak...@redhat.com> diff --git a/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/2.cc b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/2.cc index ca6076209c2..b4a2d95227a 100644 --- a/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/2.cc +++ b/libstdc++-v3/testsuite/20_util/smartptr.adapt/inout_ptr/2.cc @@ -96,7 +96,22 @@ test_unique_ptr() VERIFY( upbd->id == 2 ); } +void +test_lwg3897() +{ + // Verify that implementation handles LWG Issue 3897 + auto nuller = [](int** p) { + delete *p; + *p = nullptr; + }; + int* i = new int{5}; + nuller(std::inout_ptr(i)); + + VERIFY( i == nullptr ); +} + int main() { test_unique_ptr(); + test_lwg3897(); }