passenger 6.1.0 → 6.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +32 -2
  3. data/Rakefile +6 -13
  4. data/bin/passenger-install-apache2-module +15 -19
  5. data/bin/passenger-install-nginx-module +42 -44
  6. data/bin/passenger-status +9 -10
  7. data/build/common_library.rb +4 -4
  8. data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +1 -1
  9. data/build/test_basics.rb +4 -3
  10. data/dev/copy_boost_headers +54 -40
  11. data/dev/ruby_server.rb +1 -1
  12. data/src/agent/Core/Config.h +1 -1
  13. data/src/agent/Core/Controller/Config.h +1 -1
  14. data/src/agent/Watchdog/Config.h +1 -1
  15. data/src/cxx_supportlib/Constants.h +1 -1
  16. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -1
  17. data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +6 -0
  18. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +94 -110
  19. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +2 -2
  20. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +14 -14
  21. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +3 -3
  22. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +52 -24
  23. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +641 -285
  24. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +593 -260
  25. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +37 -24
  26. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +9 -9
  27. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +3 -3
  28. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/chrono.hpp +93 -0
  29. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +16 -17
  30. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +25 -34
  31. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +204 -97
  32. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +251 -122
  33. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp +56 -56
  34. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_arm.hpp +129 -129
  35. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +253 -125
  36. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_sparc.hpp +25 -25
  37. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +193 -126
  38. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +57 -57
  39. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +96 -97
  40. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +24 -24
  41. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_cas_based.hpp +10 -10
  42. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +27 -24
  43. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_sync.hpp +39 -37
  44. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_linux_arm.hpp +17 -17
  45. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extending_cas_based_arithmetic.hpp +5 -5
  46. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +12 -12
  47. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +21 -21
  48. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +30 -30
  49. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +170 -98
  50. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +209 -119
  51. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +95 -95
  52. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +148 -76
  53. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +293 -123
  54. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +87 -71
  55. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +5 -5
  56. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +88 -88
  57. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +2 -2
  58. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +4 -5
  59. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +4 -4
  60. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +4 -4
  61. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +9 -9
  62. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +4 -4
  63. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +4 -4
  64. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +4 -4
  65. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +5 -5
  66. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +6 -6
  67. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +2 -2
  68. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +2 -2
  69. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +5 -5
  70. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +4 -4
  71. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +7 -7
  72. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +7 -7
  73. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -6
  74. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +110 -49
  75. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +1 -1
  76. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/has_posix_clock_traits.hpp +51 -0
  77. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +26 -32
  78. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_conversions.hpp +15 -15
  79. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +69 -30
  80. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +8 -8
  81. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +51 -31
  82. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +2 -2
  83. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +2 -2
  84. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +6 -6
  85. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -4
  86. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +5 -5
  87. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +31 -31
  88. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +2 -3
  89. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +2 -5
  90. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -3
  91. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +2 -2
  92. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +3 -3
  93. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +3 -3
  94. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +20 -13
  95. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +13 -13
  96. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +3 -3
  97. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +3 -3
  98. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +90 -16
  99. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +80 -11
  100. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +160 -15
  101. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +327 -38
  102. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +276 -33
  103. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +260 -20
  104. data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +4 -3
  105. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +14 -18
  106. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +2 -2
  107. data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +13 -13
  108. data/src/cxx_supportlib/vendor-modified/boost/atomic/posix_clock_traits_fwd.hpp +59 -0
  109. data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +102 -0
  110. data/src/cxx_supportlib/vendor-modified/boost/atomic/wait_result.hpp +56 -0
  111. data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +4 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +5 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  114. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +108 -41
  115. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +1235 -1009
  116. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +3 -2
  117. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +56 -0
  118. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +1 -0
  119. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +9 -9
  120. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +23 -2
  121. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +0 -1
  122. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +88 -23
  123. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +2 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +2 -2
  125. data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +68 -0
  126. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +72 -13
  127. data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +13 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +8 -5
  129. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +31 -10
  130. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +37 -10
  131. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +19 -0
  132. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +72 -5
  134. data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +3 -10
  135. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +54 -23
  136. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +6 -4
  137. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +19 -0
  138. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +32 -5
  139. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +27 -2
  140. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +22 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +37 -17
  142. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +23 -1
  143. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +41 -20
  144. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -8
  145. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +3 -1
  146. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_is_avalanching.hpp +57 -0
  147. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +29 -29
  148. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +3 -3
  149. data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +15 -1
  150. data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +1 -0
  151. data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/core/detail/assert.hpp +18 -0
  153. data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_sleep.hpp +2 -2
  154. data/src/cxx_supportlib/vendor-modified/boost/core/detail/static_assert.hpp +42 -0
  155. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -10
  156. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +35 -27
  157. data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +1 -1
  158. data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +14 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +20 -9
  160. data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +0 -5
  161. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +8 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +1 -0
  164. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +4 -4
  165. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +2 -2
  166. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_rebind.hpp +9 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +1 -0
  168. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +2 -2
  169. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +43 -64
  170. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +0 -83
  171. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -5
  172. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/eval_if_default.hpp +44 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +103 -117
  174. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/conjunction.hpp +53 -0
  175. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/disjunction.hpp +53 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/negation.hpp +53 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/type_identity.hpp +54 -0
  178. data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +32 -38
  179. data/src/cxx_supportlib/vendor-modified/boost/iterator/enable_if_convertible.hpp +84 -0
  180. data/src/cxx_supportlib/vendor-modified/boost/iterator/interoperable.hpp +22 -34
  181. data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +16 -16
  182. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +162 -309
  183. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +52 -161
  184. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +3 -11
  185. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +804 -977
  186. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +24 -17
  187. data/src/cxx_supportlib/vendor-modified/boost/iterator/min_category.hpp +83 -0
  188. data/src/cxx_supportlib/vendor-modified/boost/iterator/minimum_category.hpp +11 -73
  189. data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +56 -57
  190. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +123 -156
  191. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +1 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +36 -33
  194. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +43 -50
  195. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +23 -27
  196. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +10 -11
  198. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +1 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
  200. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +6 -7
  201. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/type_traits.hpp +81 -0
  202. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +4 -4
  203. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +8 -9
  204. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
  205. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +1 -12
  206. data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +8 -26
  207. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +1 -1
  208. data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +1 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +6 -0
  210. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +2 -2
  211. data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +11 -44
  212. data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +34 -0
  213. data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +33 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +4 -8
  216. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_assert.hpp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/ptr_to_ref.hpp +1 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +2 -6
  219. data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +2 -6
  220. data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +2 -6
  221. data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +0 -13
  223. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +190 -190
  224. data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +12 -2
  225. data/src/cxx_supportlib/vendor-modified/boost/random/detail/config.hpp +4 -0
  226. data/src/cxx_supportlib/vendor-modified/boost/random/detail/size.hpp +41 -0
  227. data/src/cxx_supportlib/vendor-modified/boost/random/detail/xoshiro_base.hpp +472 -0
  228. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +7 -10
  229. data/src/cxx_supportlib/vendor-modified/boost/random/gamma_distribution.hpp +1 -1
  230. data/src/cxx_supportlib/vendor-modified/boost/random/generalized_inverse_gaussian_distribution.hpp +339 -0
  231. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +12 -14
  232. data/src/cxx_supportlib/vendor-modified/boost/random/inverse_gaussian_distribution.hpp +226 -0
  233. data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +1 -4
  234. data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +63 -63
  235. data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_constant_distribution.hpp +7 -10
  236. data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_linear_distribution.hpp +8 -11
  237. data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -3
  238. data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +1 -4
  239. data/src/cxx_supportlib/vendor-modified/boost/random/xoshiro.hpp +488 -0
  240. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +3 -0
  241. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +2 -0
  242. data/src/cxx_supportlib/vendor-modified/boost/range/detail/has_member_size.hpp +1 -0
  243. data/src/cxx_supportlib/vendor-modified/boost/range/detail/msvc_has_iterator_workaround.hpp +2 -0
  244. data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +1 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/range/iterator.hpp +1 -0
  246. data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +4 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +35 -18
  249. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +18 -101
  250. data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +0 -4
  251. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +0 -4
  252. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +0 -6
  253. data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +0 -4
  254. data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +4 -10
  255. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +63 -17
  256. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +71 -16
  257. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +22 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +11 -4
  259. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +2 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +11 -8
  261. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +2 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +1 -1
  263. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +40 -38
  264. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +2 -0
  265. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +4 -0
  266. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +39 -37
  267. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +46 -9
  268. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +4 -0
  269. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +2 -0
  270. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +6 -4
  271. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +57 -8
  272. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +21 -6
  273. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +18 -3
  274. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +4 -2
  275. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +6 -6
  276. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +23 -18
  277. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +9 -9
  278. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +9 -5
  279. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +11 -7
  280. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +10 -7
  281. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +4 -4
  282. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +3 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +6 -2
  284. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +12 -9
  285. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +6 -3
  286. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +16 -11
  287. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +1 -1
  288. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits_defaults.hpp +2 -0
  289. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +2 -0
  290. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +7 -0
  291. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +54 -49
  292. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +64 -62
  293. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +16 -0
  294. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +12 -0
  295. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +6 -4
  296. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +3 -1
  297. data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +0 -4
  298. data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +0 -4
  299. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +1 -43
  300. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/deprecated_macros.hpp +7 -7
  301. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +2 -77
  302. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +1 -64
  303. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +3 -3
  304. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -77
  305. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_cxx20_constexpr.hpp +37 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +5 -28
  307. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +41 -40
  308. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +0 -15
  309. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +0 -18
  310. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +1 -1
  312. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +1 -0
  313. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +8 -6
  314. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +31 -10
  315. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +34 -8
  316. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +6 -4
  317. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +9 -1
  318. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +5 -5
  319. data/src/cxx_supportlib/vendor-modified/boost/unordered/{unordered_printers.hpp → detail/unordered_printers.hpp} +34 -36
  320. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +6 -49
  321. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +6 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +6 -1
  323. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +6 -1
  324. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +6 -1
  325. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  326. data/src/nginx_module/ContentHandler.c +2 -0
  327. data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +3 -5
  328. data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +3 -5
  329. data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +3 -5
  330. data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +3 -5
  331. data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +1 -1
  332. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +2 -2
  333. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +5 -3
  334. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +2 -2
  335. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +6 -13
  336. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +29 -30
  337. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -3
  338. data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -0
  339. data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -1
  340. data/src/ruby_supportlib/phusion_passenger/utils/json.rb +1 -1
  341. data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +1 -1
  342. data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +1 -1
  343. data/src/ruby_supportlib/phusion_passenger.rb +8 -8
  344. metadata +26 -99
  345. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +0 -47
  346. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +0 -41
  347. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +0 -34
  348. data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -28
  349. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +0 -68
  350. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +0 -42
  351. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +0 -46
  352. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +0 -42
  353. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +0 -42
  354. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +0 -46
  355. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +0 -42
  356. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +0 -64
  357. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +0 -15
  358. data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +0 -195
  359. data/src/cxx_supportlib/vendor-modified/boost/detail/select_type.hpp +0 -36
  360. data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +0 -83
  361. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/internals.hpp +0 -35
  362. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +0 -120
  363. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_debug.cpp +0 -59
  364. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +0 -189
  365. data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +0 -31
  366. data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +0 -72
  367. data/src/cxx_supportlib/vendor-modified/boost/regex/config/cwchar.hpp +0 -207
  368. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/static_mutex.hpp +0 -182
  369. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +0 -797
  370. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +0 -1598
  371. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +0 -3174
  372. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +0 -511
  373. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/char_regex_traits.hpp +0 -81
  374. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +0 -1237
  375. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -213
  376. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/error_type.hpp +0 -59
  377. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +0 -1516
  378. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +0 -54
  379. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_category.hpp +0 -91
  380. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_traits.hpp +0 -135
  381. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +0 -161
  382. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +0 -716
  383. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +0 -183
  384. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +0 -171
  385. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +0 -128
  386. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +0 -645
  387. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +0 -1030
  388. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +0 -1947
  389. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +0 -1131
  390. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +0 -146
  391. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +0 -83
  392. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regbase.hpp +0 -180
  393. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -166
  394. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -1158
  395. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_fwd.hpp +0 -73
  396. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_grep.hpp +0 -155
  397. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -195
  398. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_match.hpp +0 -382
  399. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_merge.hpp +0 -93
  400. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +0 -241
  401. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_replace.hpp +0 -99
  402. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_search.hpp +0 -217
  403. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +0 -174
  404. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -327
  405. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +0 -189
  406. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +0 -997
  407. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +0 -237
  408. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +0 -321
  409. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +0 -516
  410. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/syntax_type.hpp +0 -105
  411. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +0 -185
  412. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +0 -360
  413. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +0 -871
  414. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +0 -1229
  415. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +0 -79
  416. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +0 -63
  417. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +0 -88
  418. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +0 -104
  419. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +0 -69
  420. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +0 -72
  421. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +0 -163
  422. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +0 -152
  423. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +0 -185
  424. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +0 -148
  425. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +0 -170
  426. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +0 -200
  427. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +0 -194
  428. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +0 -179
  429. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +0 -186
  430. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +0 -147
  431. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +0 -174
  432. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +0 -141
  433. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +0 -165
  434. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +0 -163
  435. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +0 -30
  436. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +0 -69
  437. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +0 -128
  438. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +0 -96
  439. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +0 -86
  440. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +0 -94
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Copyright (c) 2009 Helge Bahmann
7
7
  * Copyright (c) 2012 Tim Blechmann
8
- * Copyright (c) 2014 Andrey Semashev
8
+ * Copyright (c) 2014-2025 Andrey Semashev
9
9
  */
10
10
  /*!
11
11
  * \file atomic/detail/core_arch_ops_gcc_x86.hpp
@@ -23,7 +23,7 @@
23
23
  #include <boost/atomic/detail/core_arch_operations_fwd.hpp>
24
24
  #include <boost/atomic/detail/capabilities.hpp>
25
25
  #if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)
26
- #include <boost/cstdint.hpp>
26
+ #include <cstdint>
27
27
  #include <boost/atomic/detail/intptr.hpp>
28
28
  #include <boost/atomic/detail/string_ops.hpp>
29
29
  #include <boost/atomic/detail/core_ops_cas_based.hpp>
@@ -40,16 +40,16 @@ namespace detail {
40
40
 
41
41
  struct core_arch_operations_gcc_x86_base
42
42
  {
43
- static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false;
44
- static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true;
43
+ static constexpr bool full_cas_based = false;
44
+ static constexpr bool is_always_lock_free = true;
45
45
 
46
- static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT
46
+ static BOOST_FORCEINLINE void fence_before(memory_order order) noexcept
47
47
  {
48
48
  if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u)
49
49
  __asm__ __volatile__ ("" ::: "memory");
50
50
  }
51
51
 
52
- static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT
52
+ static BOOST_FORCEINLINE void fence_after(memory_order order) noexcept
53
53
  {
54
54
  if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u)
55
55
  __asm__ __volatile__ ("" ::: "memory");
@@ -60,15 +60,16 @@ template< std::size_t Size, bool Signed, bool Interprocess, typename Derived >
60
60
  struct core_arch_operations_gcc_x86 :
61
61
  public core_arch_operations_gcc_x86_base
62
62
  {
63
- typedef typename storage_traits< Size >::type storage_type;
63
+ using storage_type = typename storage_traits< Size >::type;
64
64
 
65
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = Size;
66
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = Size;
67
- static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
68
- static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
65
+ static constexpr std::size_t storage_size = Size;
66
+ static constexpr std::size_t storage_alignment = Size;
67
+ static constexpr bool is_signed = Signed;
68
+ static constexpr bool is_interprocess = Interprocess;
69
69
 
70
- static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
70
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) noexcept
71
71
  {
72
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
72
73
  if (order != memory_order_seq_cst)
73
74
  {
74
75
  fence_before(order);
@@ -81,30 +82,31 @@ struct core_arch_operations_gcc_x86 :
81
82
  }
82
83
  }
83
84
 
84
- static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT
85
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) noexcept
85
86
  {
86
87
  storage_type v = storage;
87
88
  fence_after(order);
89
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
88
90
  return v;
89
91
  }
90
92
 
91
- static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
93
+ static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) noexcept
92
94
  {
93
95
  return Derived::fetch_add(storage, -v, order);
94
96
  }
95
97
 
96
98
  static BOOST_FORCEINLINE bool compare_exchange_weak(
97
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
99
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
98
100
  {
99
101
  return Derived::compare_exchange_strong(storage, expected, desired, success_order, failure_order);
100
102
  }
101
103
 
102
- static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
104
+ static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) noexcept
103
105
  {
104
106
  return !!Derived::exchange(storage, (storage_type)1, order);
105
107
  }
106
108
 
107
- static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT
109
+ static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) noexcept
108
110
  {
109
111
  store(storage, (storage_type)0, order);
110
112
  }
@@ -114,12 +116,13 @@ template< bool Signed, bool Interprocess >
114
116
  struct core_arch_operations< 1u, Signed, Interprocess > :
115
117
  public core_arch_operations_gcc_x86< 1u, Signed, Interprocess, core_arch_operations< 1u, Signed, Interprocess > >
116
118
  {
117
- typedef core_arch_operations_gcc_x86< 1u, Signed, Interprocess, core_arch_operations< 1u, Signed, Interprocess > > base_type;
118
- typedef typename base_type::storage_type storage_type;
119
- typedef typename storage_traits< 4u >::type temp_storage_type;
119
+ using base_type = core_arch_operations_gcc_x86< 1u, Signed, Interprocess, core_arch_operations< 1u, Signed, Interprocess > >;
120
+ using storage_type = typename base_type::storage_type;
121
+ using temp_storage_type = typename storage_traits< 4u >::type;
120
122
 
121
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
123
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
122
124
  {
125
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
123
126
  __asm__ __volatile__
124
127
  (
125
128
  "lock; xaddb %0, %1"
@@ -127,11 +130,13 @@ struct core_arch_operations< 1u, Signed, Interprocess > :
127
130
  :
128
131
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
129
132
  );
133
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
130
134
  return v;
131
135
  }
132
136
 
133
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
137
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) noexcept
134
138
  {
139
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
135
140
  __asm__ __volatile__
136
141
  (
137
142
  "xchgb %0, %1"
@@ -139,12 +144,14 @@ struct core_arch_operations< 1u, Signed, Interprocess > :
139
144
  :
140
145
  : "memory"
141
146
  );
147
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
142
148
  return v;
143
149
  }
144
150
 
145
151
  static BOOST_FORCEINLINE bool compare_exchange_strong(
146
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
152
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
147
153
  {
154
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, success_order);
148
155
  storage_type previous = expected;
149
156
  bool success;
150
157
  #if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
@@ -166,6 +173,7 @@ struct core_arch_operations< 1u, Signed, Interprocess > :
166
173
  );
167
174
  #endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
168
175
  expected = previous;
176
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, (success ? success_order : failure_order));
169
177
  return success;
170
178
  }
171
179
 
@@ -183,24 +191,30 @@ struct core_arch_operations< 1u, Signed, Interprocess > :
183
191
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
184
192
  )
185
193
 
186
- static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
194
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
187
195
  {
196
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
188
197
  storage_type res = storage;
189
198
  BOOST_ATOMIC_DETAIL_CAS_LOOP("andb", v, res);
199
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
190
200
  return res;
191
201
  }
192
202
 
193
- static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
203
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
194
204
  {
205
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
195
206
  storage_type res = storage;
196
207
  BOOST_ATOMIC_DETAIL_CAS_LOOP("orb", v, res);
208
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
197
209
  return res;
198
210
  }
199
211
 
200
- static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
212
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
201
213
  {
214
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
202
215
  storage_type res = storage;
203
216
  BOOST_ATOMIC_DETAIL_CAS_LOOP("xorb", v, res);
217
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
204
218
  return res;
205
219
  }
206
220
 
@@ -211,12 +225,13 @@ template< bool Signed, bool Interprocess >
211
225
  struct core_arch_operations< 2u, Signed, Interprocess > :
212
226
  public core_arch_operations_gcc_x86< 2u, Signed, Interprocess, core_arch_operations< 2u, Signed, Interprocess > >
213
227
  {
214
- typedef core_arch_operations_gcc_x86< 2u, Signed, Interprocess, core_arch_operations< 2u, Signed, Interprocess > > base_type;
215
- typedef typename base_type::storage_type storage_type;
216
- typedef typename storage_traits< 4u >::type temp_storage_type;
228
+ using base_type = core_arch_operations_gcc_x86< 2u, Signed, Interprocess, core_arch_operations< 2u, Signed, Interprocess > >;
229
+ using storage_type = typename base_type::storage_type;
230
+ using temp_storage_type = typename storage_traits< 4u >::type;
217
231
 
218
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
232
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
219
233
  {
234
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
220
235
  __asm__ __volatile__
221
236
  (
222
237
  "lock; xaddw %0, %1"
@@ -224,11 +239,13 @@ struct core_arch_operations< 2u, Signed, Interprocess > :
224
239
  :
225
240
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
226
241
  );
242
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
227
243
  return v;
228
244
  }
229
245
 
230
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
246
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) noexcept
231
247
  {
248
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
232
249
  __asm__ __volatile__
233
250
  (
234
251
  "xchgw %0, %1"
@@ -236,12 +253,14 @@ struct core_arch_operations< 2u, Signed, Interprocess > :
236
253
  :
237
254
  : "memory"
238
255
  );
256
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
239
257
  return v;
240
258
  }
241
259
 
242
260
  static BOOST_FORCEINLINE bool compare_exchange_strong(
243
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
261
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
244
262
  {
263
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, success_order);
245
264
  storage_type previous = expected;
246
265
  bool success;
247
266
  #if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
@@ -263,6 +282,7 @@ struct core_arch_operations< 2u, Signed, Interprocess > :
263
282
  );
264
283
  #endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
265
284
  expected = previous;
285
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, (success ? success_order : failure_order));
266
286
  return success;
267
287
  }
268
288
 
@@ -280,24 +300,30 @@ struct core_arch_operations< 2u, Signed, Interprocess > :
280
300
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
281
301
  )
282
302
 
283
- static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
303
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
284
304
  {
305
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
285
306
  storage_type res = storage;
286
307
  BOOST_ATOMIC_DETAIL_CAS_LOOP("andw", v, res);
308
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
287
309
  return res;
288
310
  }
289
311
 
290
- static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
312
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
291
313
  {
314
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
292
315
  storage_type res = storage;
293
316
  BOOST_ATOMIC_DETAIL_CAS_LOOP("orw", v, res);
317
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
294
318
  return res;
295
319
  }
296
320
 
297
- static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
321
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
298
322
  {
323
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
299
324
  storage_type res = storage;
300
325
  BOOST_ATOMIC_DETAIL_CAS_LOOP("xorw", v, res);
326
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
301
327
  return res;
302
328
  }
303
329
 
@@ -308,11 +334,12 @@ template< bool Signed, bool Interprocess >
308
334
  struct core_arch_operations< 4u, Signed, Interprocess > :
309
335
  public core_arch_operations_gcc_x86< 4u, Signed, Interprocess, core_arch_operations< 4u, Signed, Interprocess > >
310
336
  {
311
- typedef core_arch_operations_gcc_x86< 4u, Signed, Interprocess, core_arch_operations< 4u, Signed, Interprocess > > base_type;
312
- typedef typename base_type::storage_type storage_type;
337
+ using base_type = core_arch_operations_gcc_x86< 4u, Signed, Interprocess, core_arch_operations< 4u, Signed, Interprocess > >;
338
+ using storage_type = typename base_type::storage_type;
313
339
 
314
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
340
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
315
341
  {
342
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
316
343
  __asm__ __volatile__
317
344
  (
318
345
  "lock; xaddl %0, %1"
@@ -320,11 +347,13 @@ struct core_arch_operations< 4u, Signed, Interprocess > :
320
347
  :
321
348
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
322
349
  );
350
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
323
351
  return v;
324
352
  }
325
353
 
326
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
354
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) noexcept
327
355
  {
356
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
328
357
  __asm__ __volatile__
329
358
  (
330
359
  "xchgl %0, %1"
@@ -332,12 +361,14 @@ struct core_arch_operations< 4u, Signed, Interprocess > :
332
361
  :
333
362
  : "memory"
334
363
  );
364
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
335
365
  return v;
336
366
  }
337
367
 
338
368
  static BOOST_FORCEINLINE bool compare_exchange_strong(
339
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
369
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
340
370
  {
371
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, success_order);
341
372
  storage_type previous = expected;
342
373
  bool success;
343
374
  #if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
@@ -359,6 +390,7 @@ struct core_arch_operations< 4u, Signed, Interprocess > :
359
390
  );
360
391
  #endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
361
392
  expected = previous;
393
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, (success ? success_order : failure_order));
362
394
  return success;
363
395
  }
364
396
 
@@ -376,24 +408,30 @@ struct core_arch_operations< 4u, Signed, Interprocess > :
376
408
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
377
409
  )
378
410
 
379
- static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
411
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
380
412
  {
413
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
381
414
  storage_type res = storage;
382
415
  BOOST_ATOMIC_DETAIL_CAS_LOOP("andl", v, res);
416
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
383
417
  return res;
384
418
  }
385
419
 
386
- static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
420
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
387
421
  {
422
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
388
423
  storage_type res = storage;
389
424
  BOOST_ATOMIC_DETAIL_CAS_LOOP("orl", v, res);
425
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
390
426
  return res;
391
427
  }
392
428
 
393
- static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
429
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
394
430
  {
431
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
395
432
  storage_type res = storage;
396
433
  BOOST_ATOMIC_DETAIL_CAS_LOOP("xorl", v, res);
434
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
397
435
  return res;
398
436
  }
399
437
 
@@ -413,28 +451,30 @@ struct core_arch_operations< 4u, Signed, Interprocess > :
413
451
  template< bool Signed, bool Interprocess >
414
452
  struct gcc_dcas_x86
415
453
  {
416
- typedef typename storage_traits< 8u >::type storage_type;
417
- typedef uint32_t BOOST_ATOMIC_DETAIL_MAY_ALIAS aliasing_uint32_t;
454
+ using storage_type = typename storage_traits< 8u >::type;
455
+ using aliasing_uint32_t = std::uint32_t BOOST_ATOMIC_DETAIL_MAY_ALIAS;
418
456
  #if defined(__SSE2__)
419
- typedef uint32_t xmm_t __attribute__((__vector_size__(16)));
457
+ using xmm_t = std::uint32_t __attribute__((__vector_size__(16)));
420
458
  #elif defined(__SSE__)
421
- typedef float xmm_t __attribute__((__vector_size__(16)));
459
+ using xmm_t = float __attribute__((__vector_size__(16)));
422
460
  #endif
423
461
 
424
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u;
425
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 8u;
426
- static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
427
- static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
428
- static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true;
429
- static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true;
462
+ static constexpr std::size_t storage_size = 8u;
463
+ static constexpr std::size_t storage_alignment = 8u;
464
+ static constexpr bool is_signed = Signed;
465
+ static constexpr bool is_interprocess = Interprocess;
466
+ static constexpr bool full_cas_based = true;
467
+ static constexpr bool is_always_lock_free = true;
430
468
 
431
- static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
469
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) noexcept
432
470
  {
471
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
472
+
433
473
  if (BOOST_LIKELY(order != memory_order_seq_cst && (((uintptr_t)&storage) & 7u) == 0u))
434
474
  {
435
475
  #if defined(__SSE__)
436
476
  #if defined(__SSE2__)
437
- xmm_t value = { static_cast< uint32_t >(v), static_cast< uint32_t >(v >> 32u), 0u, 0u };
477
+ xmm_t value = { static_cast< std::uint32_t >(v), static_cast< std::uint32_t >(v >> 32u), 0u, 0u };
438
478
  #else
439
479
  xmm_t value;
440
480
  BOOST_ATOMIC_DETAIL_MEMSET(&value, 0, sizeof(value));
@@ -478,7 +518,7 @@ struct gcc_dcas_x86
478
518
  "jne 1b\n\t"
479
519
  "xchgl %%ebx, %%esi\n\t"
480
520
  :
481
- : "a" ((uint32_t)v), "c" ((uint32_t)(v >> 32u)), [dest] "D" (&storage)
521
+ : "a" ((std::uint32_t)v), "c" ((std::uint32_t)(v >> 32u)), [dest] "D" (&storage)
482
522
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "edx", "memory"
483
523
  );
484
524
  #else // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX)
@@ -490,14 +530,14 @@ struct gcc_dcas_x86
490
530
  "1: lock; cmpxchg8b %[dest_lo]\n\t"
491
531
  "jne 1b\n\t"
492
532
  : [dest_lo] "=m" (storage), [dest_hi] "=m" (reinterpret_cast< volatile aliasing_uint32_t* >(&storage)[1])
493
- : [value_lo] "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32u))
533
+ : [value_lo] "b" ((std::uint32_t)v), "c" ((std::uint32_t)(v >> 32u))
494
534
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "eax", "edx", "memory"
495
535
  );
496
536
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX)
497
537
  }
498
538
  }
499
539
 
500
- static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
540
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) noexcept
501
541
  {
502
542
  storage_type value;
503
543
 
@@ -543,7 +583,7 @@ struct gcc_dcas_x86
543
583
 
544
584
  #if defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
545
585
 
546
- uint32_t value_bits[2];
586
+ std::uint32_t value_bits[2];
547
587
 
548
588
  // We don't care for comparison result here; the previous value will be stored into value anyway.
549
589
  // Also we don't care for ebx and ecx values, they just have to be equal to eax and edx before cmpxchg8b.
@@ -575,12 +615,16 @@ struct gcc_dcas_x86
575
615
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
576
616
  }
577
617
 
618
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
619
+
578
620
  return value;
579
621
  }
580
622
 
581
623
  static BOOST_FORCEINLINE bool compare_exchange_strong(
582
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
624
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
583
625
  {
626
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, success_order);
627
+
584
628
  #if defined(__clang__)
585
629
 
586
630
  // Clang cannot allocate eax:edx register pairs but it has sync intrinsics
@@ -599,7 +643,7 @@ struct gcc_dcas_x86
599
643
  "lock; cmpxchg8b (%[dest])\n\t"
600
644
  "xchgl %%ebx, %%esi\n\t"
601
645
  : "+A" (expected), [success] "=@ccz" (success)
602
- : "S" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32u)), [dest] "D" (&storage)
646
+ : "S" ((std::uint32_t)desired), "c" ((std::uint32_t)(desired >> 32u)), [dest] "D" (&storage)
603
647
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
604
648
  );
605
649
  #else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
@@ -610,7 +654,7 @@ struct gcc_dcas_x86
610
654
  "xchgl %%ebx, %%esi\n\t"
611
655
  "sete %[success]\n\t"
612
656
  : "+A" (expected), [success] "=qm" (success)
613
- : "S" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32u)), [dest] "D" (&storage)
657
+ : "S" ((std::uint32_t)desired), "c" ((std::uint32_t)(desired >> 32u)), [dest] "D" (&storage)
614
658
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
615
659
  );
616
660
  #endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
@@ -626,7 +670,7 @@ struct gcc_dcas_x86
626
670
  (
627
671
  "lock; cmpxchg8b %[dest]\n\t"
628
672
  : "+A" (expected), [dest] "+m" (storage), [success] "=@ccz" (success)
629
- : "b" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32u))
673
+ : "b" ((std::uint32_t)desired), "c" ((std::uint32_t)(desired >> 32u))
630
674
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
631
675
  );
632
676
  #else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
@@ -635,28 +679,34 @@ struct gcc_dcas_x86
635
679
  "lock; cmpxchg8b %[dest]\n\t"
636
680
  "sete %[success]\n\t"
637
681
  : "+A" (expected), [dest] "+m" (storage), [success] "=qm" (success)
638
- : "b" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32u))
682
+ : "b" ((std::uint32_t)desired), "c" ((std::uint32_t)(desired >> 32u))
639
683
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
640
684
  );
641
685
  #endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
642
686
 
687
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, (success ? success_order : failure_order));
688
+
643
689
  return success;
644
690
 
645
691
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX)
646
692
  }
647
693
 
648
694
  static BOOST_FORCEINLINE bool compare_exchange_weak(
649
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
695
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
650
696
  {
651
697
  return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
652
698
  }
653
699
 
654
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
700
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) noexcept
655
701
  {
702
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
703
+
704
+ storage_type old_value;
705
+
656
706
  #if defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX)
657
707
  #if defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
658
708
 
659
- uint32_t old_bits[2];
709
+ std::uint32_t old_bits[2];
660
710
  __asm__ __volatile__
661
711
  (
662
712
  "xchgl %%ebx, %%esi\n\t"
@@ -667,17 +717,14 @@ struct gcc_dcas_x86
667
717
  "jne 1b\n\t"
668
718
  "xchgl %%ebx, %%esi\n\t"
669
719
  : "=a" (old_bits[0]), "=d" (old_bits[1])
670
- : "S" ((uint32_t)v), "c" ((uint32_t)(v >> 32u)), [dest] "D" (&storage)
720
+ : "S" ((std::uint32_t)v), "c" ((std::uint32_t)(v >> 32u)), [dest] "D" (&storage)
671
721
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
672
722
  );
673
723
 
674
- storage_type old_value;
675
724
  BOOST_ATOMIC_DETAIL_MEMCPY(&old_value, old_bits, sizeof(old_value));
676
- return old_value;
677
725
 
678
726
  #else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
679
727
 
680
- storage_type old_value;
681
728
  __asm__ __volatile__
682
729
  (
683
730
  "xchgl %%ebx, %%esi\n\t"
@@ -688,17 +735,16 @@ struct gcc_dcas_x86
688
735
  "jne 1b\n\t"
689
736
  "xchgl %%ebx, %%esi\n\t"
690
737
  : "=A" (old_value)
691
- : "S" ((uint32_t)v), "c" ((uint32_t)(v >> 32u)), [dest] "D" (&storage)
738
+ : "S" ((std::uint32_t)v), "c" ((std::uint32_t)(v >> 32u)), [dest] "D" (&storage)
692
739
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
693
740
  );
694
- return old_value;
695
741
 
696
742
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
697
743
  #else // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX)
698
744
  #if defined(__MINGW32__) && ((__GNUC__+0) * 100 + (__GNUC_MINOR__+0)) < 407
699
745
 
700
746
  // MinGW gcc up to 4.6 has problems with allocating registers in the asm blocks below
701
- uint32_t old_bits[2];
747
+ std::uint32_t old_bits[2];
702
748
  __asm__ __volatile__
703
749
  (
704
750
  "movl (%[dest]), %%eax\n\t"
@@ -707,17 +753,15 @@ struct gcc_dcas_x86
707
753
  "1: lock; cmpxchg8b (%[dest])\n\t"
708
754
  "jne 1b\n\t"
709
755
  : "=&a" (old_bits[0]), "=&d" (old_bits[1])
710
- : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32u)), [dest] "DS" (&storage)
756
+ : "b" ((std::uint32_t)v), "c" ((std::uint32_t)(v >> 32u)), [dest] "DS" (&storage)
711
757
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
712
758
  );
713
759
 
714
- storage_type old_value;
715
760
  BOOST_ATOMIC_DETAIL_MEMCPY(&old_value, old_bits, sizeof(old_value));
716
- return old_value;
717
761
 
718
762
  #elif defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
719
763
 
720
- uint32_t old_bits[2];
764
+ std::uint32_t old_bits[2];
721
765
  __asm__ __volatile__
722
766
  (
723
767
  "movl %[dest_lo], %%eax\n\t"
@@ -726,17 +770,14 @@ struct gcc_dcas_x86
726
770
  "1: lock; cmpxchg8b %[dest_lo]\n\t"
727
771
  "jne 1b\n\t"
728
772
  : "=&a" (old_bits[0]), "=&d" (old_bits[1]), [dest_lo] "+m" (storage), [dest_hi] "+m" (reinterpret_cast< volatile aliasing_uint32_t* >(&storage)[1])
729
- : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32u))
773
+ : "b" ((std::uint32_t)v), "c" ((std::uint32_t)(v >> 32u))
730
774
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
731
775
  );
732
776
 
733
- storage_type old_value;
734
777
  BOOST_ATOMIC_DETAIL_MEMCPY(&old_value, old_bits, sizeof(old_value));
735
- return old_value;
736
778
 
737
779
  #else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
738
780
 
739
- storage_type old_value;
740
781
  __asm__ __volatile__
741
782
  (
742
783
  "movl %[dest_lo], %%eax\n\t"
@@ -745,13 +786,16 @@ struct gcc_dcas_x86
745
786
  "1: lock; cmpxchg8b %[dest_lo]\n\t"
746
787
  "jne 1b\n\t"
747
788
  : "=&A" (old_value), [dest_lo] "+m" (storage), [dest_hi] "+m" (reinterpret_cast< volatile aliasing_uint32_t* >(&storage)[1])
748
- : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32u))
789
+ : "b" ((std::uint32_t)v), "c" ((std::uint32_t)(v >> 32u))
749
790
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
750
791
  );
751
- return old_value;
752
792
 
753
793
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
754
794
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX)
795
+
796
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
797
+
798
+ return old_value;
755
799
  }
756
800
  };
757
801
 
@@ -767,11 +811,12 @@ template< bool Signed, bool Interprocess >
767
811
  struct core_arch_operations< 8u, Signed, Interprocess > :
768
812
  public core_arch_operations_gcc_x86< 8u, Signed, Interprocess, core_arch_operations< 8u, Signed, Interprocess > >
769
813
  {
770
- typedef core_arch_operations_gcc_x86< 8u, Signed, Interprocess, core_arch_operations< 8u, Signed, Interprocess > > base_type;
771
- typedef typename base_type::storage_type storage_type;
814
+ using base_type = core_arch_operations_gcc_x86< 8u, Signed, Interprocess, core_arch_operations< 8u, Signed, Interprocess > >;
815
+ using storage_type = typename base_type::storage_type;
772
816
 
773
- static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
817
+ static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) noexcept
774
818
  {
819
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
775
820
  __asm__ __volatile__
776
821
  (
777
822
  "lock; xaddq %0, %1"
@@ -779,11 +824,13 @@ struct core_arch_operations< 8u, Signed, Interprocess > :
779
824
  :
780
825
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
781
826
  );
827
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
782
828
  return v;
783
829
  }
784
830
 
785
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
831
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) noexcept
786
832
  {
833
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
787
834
  __asm__ __volatile__
788
835
  (
789
836
  "xchgq %0, %1"
@@ -791,12 +838,14 @@ struct core_arch_operations< 8u, Signed, Interprocess > :
791
838
  :
792
839
  : "memory"
793
840
  );
841
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
794
842
  return v;
795
843
  }
796
844
 
797
845
  static BOOST_FORCEINLINE bool compare_exchange_strong(
798
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
846
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
799
847
  {
848
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, success_order);
800
849
  storage_type previous = expected;
801
850
  bool success;
802
851
  #if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
@@ -818,6 +867,7 @@ struct core_arch_operations< 8u, Signed, Interprocess > :
818
867
  );
819
868
  #endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
820
869
  expected = previous;
870
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, (success ? success_order : failure_order));
821
871
  return success;
822
872
  }
823
873
 
@@ -835,24 +885,30 @@ struct core_arch_operations< 8u, Signed, Interprocess > :
835
885
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\
836
886
  )
837
887
 
838
- static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
888
+ static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) noexcept
839
889
  {
890
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
840
891
  storage_type res = storage;
841
892
  BOOST_ATOMIC_DETAIL_CAS_LOOP("andq", v, res);
893
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
842
894
  return res;
843
895
  }
844
896
 
845
- static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
897
+ static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) noexcept
846
898
  {
899
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
847
900
  storage_type res = storage;
848
901
  BOOST_ATOMIC_DETAIL_CAS_LOOP("orq", v, res);
902
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
849
903
  return res;
850
904
  }
851
905
 
852
- static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
906
+ static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) noexcept
853
907
  {
908
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
854
909
  storage_type res = storage;
855
910
  BOOST_ATOMIC_DETAIL_CAS_LOOP("xorq", v, res);
911
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
856
912
  return res;
857
913
  }
858
914
 
@@ -866,28 +922,30 @@ struct core_arch_operations< 8u, Signed, Interprocess > :
866
922
  template< bool Signed, bool Interprocess >
867
923
  struct gcc_dcas_x86_64
868
924
  {
869
- typedef typename storage_traits< 16u >::type storage_type;
870
- typedef uint64_t BOOST_ATOMIC_DETAIL_MAY_ALIAS aliasing_uint64_t;
925
+ using storage_type = typename storage_traits< 16u >::type;
926
+ using aliasing_uint64_t = std::uint64_t BOOST_ATOMIC_DETAIL_MAY_ALIAS;
871
927
  #if defined(__AVX__)
872
- typedef uint64_t __attribute__((__vector_size__(16))) xmm_t;
928
+ using xmm_t = std::uint64_t __attribute__((__vector_size__(16)));
873
929
  #endif
874
930
 
875
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 16u;
876
- static BOOST_CONSTEXPR_OR_CONST std::size_t storage_alignment = 16u;
877
- static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed;
878
- static BOOST_CONSTEXPR_OR_CONST bool is_interprocess = Interprocess;
879
- static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true;
880
- static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true;
931
+ static constexpr std::size_t storage_size = 16u;
932
+ static constexpr std::size_t storage_alignment = 16u;
933
+ static constexpr bool is_signed = Signed;
934
+ static constexpr bool is_interprocess = Interprocess;
935
+ static constexpr bool full_cas_based = true;
936
+ static constexpr bool is_always_lock_free = true;
881
937
 
882
- static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT
938
+ static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) noexcept
883
939
  {
940
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
941
+
884
942
  #if defined(__AVX__)
885
943
  if (BOOST_LIKELY(order != memory_order_seq_cst && (((uintptr_t)&storage) & 15u) == 0u))
886
944
  {
887
945
  // According to SDM Volume 3, 8.1.1 Guaranteed Atomic Operations, processors supporting AVX guarantee
888
946
  // aligned vector moves to be atomic.
889
947
  #if defined(BOOST_HAS_INT128)
890
- xmm_t value = { static_cast< uint64_t >(v), static_cast< uint64_t >(v >> 64u) };
948
+ xmm_t value = { static_cast< std::uint64_t >(v), static_cast< std::uint64_t >(v >> 64u) };
891
949
  #else
892
950
  xmm_t value;
893
951
  BOOST_ATOMIC_DETAIL_MEMCPY(&value, &v, sizeof(v));
@@ -917,7 +975,7 @@ struct gcc_dcas_x86_64
917
975
  );
918
976
  }
919
977
 
920
- static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT
978
+ static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) noexcept
921
979
  {
922
980
  #if defined(__AVX__)
923
981
  if (BOOST_LIKELY((((uintptr_t)&storage) & 15u) == 0u))
@@ -940,6 +998,7 @@ struct gcc_dcas_x86_64
940
998
  storage_type value;
941
999
  BOOST_ATOMIC_DETAIL_MEMCPY(&value, &v, sizeof(v));
942
1000
  #endif
1001
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
943
1002
  return value;
944
1003
  }
945
1004
  #endif // defined(__AVX__)
@@ -947,9 +1006,11 @@ struct gcc_dcas_x86_64
947
1006
  // Note that despite const qualification cmpxchg16b below may issue a store to the storage. The storage value
948
1007
  // will not change, but this prevents the storage to reside in read-only memory.
949
1008
 
1009
+ storage_type value;
1010
+
950
1011
  #if defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
951
1012
 
952
- uint64_t value_bits[2];
1013
+ std::uint64_t value_bits[2];
953
1014
 
954
1015
  // We don't care for comparison result here; the previous value will be stored into value anyway.
955
1016
  // Also we don't care for rbx and rcx values, they just have to be equal to rax and rdx before cmpxchg16b.
@@ -964,17 +1025,13 @@ struct gcc_dcas_x86_64
964
1025
  );
965
1026
 
966
1027
  #if defined(BOOST_HAS_INT128)
967
- storage_type value = static_cast< storage_type >(value_bits[0]) | (static_cast< storage_type >(value_bits[1]) << 64u);
1028
+ value = static_cast< storage_type >(value_bits[0]) | (static_cast< storage_type >(value_bits[1]) << 64u);
968
1029
  #else
969
- storage_type value;
970
1030
  BOOST_ATOMIC_DETAIL_MEMCPY(&value, value_bits, sizeof(value));
971
1031
  #endif
972
- return value;
973
1032
 
974
1033
  #else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
975
1034
 
976
- storage_type value;
977
-
978
1035
  // We don't care for comparison result here; the previous value will be stored into value anyway.
979
1036
  // Also we don't care for rbx and rcx values, they just have to be equal to rax and rdx before cmpxchg16b.
980
1037
  __asm__ __volatile__
@@ -987,20 +1044,24 @@ struct gcc_dcas_x86_64
987
1044
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
988
1045
  );
989
1046
 
990
- return value;
991
-
992
1047
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
1048
+
1049
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
1050
+
1051
+ return value;
993
1052
  }
994
1053
 
995
1054
  static BOOST_FORCEINLINE bool compare_exchange_strong(
996
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT
1055
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
997
1056
  {
1057
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, success_order);
1058
+
998
1059
  #if defined(__clang__)
999
1060
 
1000
1061
  // Clang cannot allocate rax:rdx register pairs but it has sync intrinsics
1001
1062
  storage_type old_expected = expected;
1002
1063
  expected = __sync_val_compare_and_swap(&storage, old_expected, desired);
1003
- return expected == old_expected;
1064
+ const bool success = expected == old_expected;
1004
1065
 
1005
1066
  #elif defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
1006
1067
 
@@ -1015,8 +1076,6 @@ struct gcc_dcas_x86_64
1015
1076
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
1016
1077
  );
1017
1078
 
1018
- return success;
1019
-
1020
1079
  #else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
1021
1080
 
1022
1081
  bool success;
@@ -1040,21 +1099,27 @@ struct gcc_dcas_x86_64
1040
1099
  );
1041
1100
  #endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS)
1042
1101
 
1043
- return success;
1044
-
1045
1102
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
1103
+
1104
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, (success ? success_order : failure_order));
1105
+
1106
+ return success;
1046
1107
  }
1047
1108
 
1048
1109
  static BOOST_FORCEINLINE bool compare_exchange_weak(
1049
- storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT
1110
+ storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) noexcept
1050
1111
  {
1051
1112
  return compare_exchange_strong(storage, expected, desired, success_order, failure_order);
1052
1113
  }
1053
1114
 
1054
- static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT
1115
+ static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) noexcept
1055
1116
  {
1117
+ BOOST_ATOMIC_DETAIL_TSAN_RELEASE(&storage, order);
1118
+
1119
+ storage_type old_value;
1120
+
1056
1121
  #if defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
1057
- uint64_t old_bits[2];
1122
+ std::uint64_t old_bits[2];
1058
1123
  __asm__ __volatile__
1059
1124
  (
1060
1125
  "movq %[dest_lo], %%rax\n\t"
@@ -1068,14 +1133,13 @@ struct gcc_dcas_x86_64
1068
1133
  );
1069
1134
 
1070
1135
  #if defined(BOOST_HAS_INT128)
1071
- storage_type old_value = static_cast< storage_type >(old_bits[0]) | (static_cast< storage_type >(old_bits[1]) << 64u);
1136
+ old_value = static_cast< storage_type >(old_bits[0]) | (static_cast< storage_type >(old_bits[1]) << 64u);
1072
1137
  #else
1073
- storage_type old_value;
1074
1138
  BOOST_ATOMIC_DETAIL_MEMCPY(&old_value, old_bits, sizeof(old_value));
1075
1139
  #endif
1076
- return old_value;
1140
+
1077
1141
  #else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
1078
- storage_type old_value;
1142
+
1079
1143
  __asm__ __volatile__
1080
1144
  (
1081
1145
  "movq %[dest_lo], %%rax\n\t"
@@ -1088,8 +1152,11 @@ struct gcc_dcas_x86_64
1088
1152
  : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"
1089
1153
  );
1090
1154
 
1091
- return old_value;
1092
1155
  #endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS)
1156
+
1157
+ BOOST_ATOMIC_DETAIL_TSAN_ACQUIRE(&storage, order);
1158
+
1159
+ return old_value;
1093
1160
  }
1094
1161
  };
1095
1162