95989.cc 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright (C) 2020-2022 Free Software Foundation, Inc.
  2. //
  3. // This file is part of the GNU ISO C++ Library. This library is free
  4. // software; you can redistribute it and/or modify it under the
  5. // terms of the GNU General Public License as published by the
  6. // Free Software Foundation; either version 3, or (at your option)
  7. // any later version.
  8. // This library is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. // GNU General Public License for more details.
  12. // You should have received a copy of the GNU General Public License along
  13. // with this library; see the file COPYING3. If not see
  14. // <http://www.gnu.org/licenses/>.
  15. // { dg-options "-std=gnu++2a" }
  16. // { dg-do run { target c++2a } }
  17. // { dg-require-gthreads {} }
  18. // { dg-additional-options "-pthread" { target pthread } }
  19. // { dg-additional-options "-static" { target static } }
  20. #include <thread>
  21. // PR libstdc++/95989
  22. // Segfault compiling with static libraries and using jthread::request_stop
  23. void
  24. test01()
  25. {
  26. std::jthread t{ [] () {} };
  27. }
  28. void
  29. test02()
  30. {
  31. std::jthread t{ [] () {} };
  32. t.request_stop();
  33. }
  34. void
  35. test03()
  36. {
  37. std::jthread t{ [] {} };
  38. std::stop_callback cb(t.get_stop_token(), [] () {});
  39. }
  40. int
  41. main()
  42. {
  43. test01();
  44. test02();
  45. test03();
  46. }