re2 1.24.0 → 1.25.0

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 (370) hide show
  1. package/LICENSE +15 -20
  2. package/README.md +63 -4
  3. package/binding.gyp +1 -2
  4. package/lib/addon.cc +9 -5
  5. package/lib/exec.cc +4 -4
  6. package/lib/match.cc +4 -4
  7. package/lib/new.cc +6 -6
  8. package/lib/pattern.cc +148 -1
  9. package/lib/replace.cc +5 -4
  10. package/lib/search.cc +1 -1
  11. package/lib/set.cc +85 -10
  12. package/lib/test.cc +1 -1
  13. package/lib/unicode_properties.h +15840 -0
  14. package/lib/wrapped_re2.h +40 -4
  15. package/lib/wrapped_re2_set.h +3 -1
  16. package/llms-full.txt +497 -0
  17. package/llms.txt +135 -0
  18. package/package.json +19 -11
  19. package/re2.d.ts +2 -0
  20. package/re2.js +1 -0
  21. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
  22. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  23. package/vendor/abseil-cpp/FAQ.md +130 -79
  24. package/vendor/abseil-cpp/MODULE.bazel +6 -7
  25. package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
  26. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
  27. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
  28. package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  29. package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
  30. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
  31. package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
  32. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
  33. package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
  34. package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
  35. package/vendor/abseil-cpp/absl/base/casts.h +8 -1
  36. package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
  37. package/vendor/abseil-cpp/absl/base/config.h +53 -9
  38. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
  39. package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
  40. package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
  41. package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
  42. package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
  43. package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
  44. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
  45. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
  46. package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  47. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
  48. package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  49. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  50. package/vendor/abseil-cpp/absl/base/macros.h +36 -20
  51. package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
  52. package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
  53. package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
  54. package/vendor/abseil-cpp/absl/base/options.h +55 -1
  55. package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
  56. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  57. package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  58. package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
  59. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
  60. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
  61. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
  62. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  63. package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
  64. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
  65. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
  68. package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
  69. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
  70. package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
  71. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
  72. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
  73. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
  74. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
  75. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
  76. package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
  77. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
  78. package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
  79. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
  80. package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
  81. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  82. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
  83. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
  84. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
  87. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
  88. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
  89. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
  90. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
  91. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
  92. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
  93. package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
  94. package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
  95. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
  96. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
  97. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
  101. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
  102. package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
  103. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
  104. package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
  105. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
  106. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
  107. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
  108. package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
  109. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
  110. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
  111. package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  112. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  113. package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  114. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
  115. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
  116. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
  117. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  118. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
  119. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
  120. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
  121. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
  122. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
  123. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  124. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
  125. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
  126. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
  127. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
  128. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
  129. package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  130. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
  131. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
  132. package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  133. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
  134. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
  135. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  136. package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
  137. package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
  138. package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
  139. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
  140. package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
  141. package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
  142. package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
  143. package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
  144. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
  145. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
  146. package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
  147. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
  148. package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
  149. package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
  150. package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
  151. package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
  152. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
  153. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
  154. package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
  155. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  156. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
  157. package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
  158. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
  159. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
  160. package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
  161. package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
  162. package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
  163. package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
  164. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
  165. package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
  166. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
  167. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
  168. package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
  169. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
  170. package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  171. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
  172. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
  173. package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
  174. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  175. package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
  176. package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  177. package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  178. package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
  179. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
  180. package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
  181. package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
  182. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
  183. package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
  184. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
  185. package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
  186. package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  187. package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
  188. package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
  189. package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
  190. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  191. package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
  192. package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
  193. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
  194. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
  195. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
  196. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
  197. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
  198. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
  199. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
  200. package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
  201. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
  202. package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
  203. package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
  204. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  205. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
  206. package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  207. package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
  208. package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
  209. package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  210. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
  211. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  212. package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  213. package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  214. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  215. package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
  216. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
  217. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  218. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
  219. package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  220. package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
  221. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  222. package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  223. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
  224. package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
  225. package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  226. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
  227. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  228. package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
  229. package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
  230. package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  231. package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
  232. package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
  233. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
  234. package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  235. package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
  236. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
  237. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  238. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
  239. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
  240. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
  241. package/vendor/abseil-cpp/absl/status/status.cc +62 -70
  242. package/vendor/abseil-cpp/absl/status/status.h +249 -23
  243. package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
  244. package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
  245. package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
  246. package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
  247. package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
  248. package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
  249. package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
  250. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
  251. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  252. package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
  253. package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
  254. package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
  255. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
  256. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
  257. package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
  258. package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
  259. package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
  260. package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
  261. package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  262. package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
  263. package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
  264. package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
  265. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
  266. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
  267. package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
  268. package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
  269. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
  270. package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
  271. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  272. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  273. package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  274. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
  275. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
  276. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
  277. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
  278. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
  279. package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  280. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  281. package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  282. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
  283. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
  284. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
  285. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
  286. package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
  287. package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  288. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
  289. package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
  290. package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
  291. package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
  292. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
  293. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
  294. package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
  295. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
  296. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
  297. package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
  298. package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
  299. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
  300. package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
  301. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
  302. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
  303. package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  304. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
  305. package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
  306. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
  307. package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
  308. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
  309. package/vendor/abseil-cpp/absl/time/clock.h +3 -0
  310. package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
  311. package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
  312. package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
  313. package/vendor/abseil-cpp/absl/time/format.cc +3 -10
  314. package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
  315. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
  316. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
  317. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
  318. package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  319. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  320. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
  321. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
  322. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
  323. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
  324. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
  325. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
  326. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
  327. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
  328. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
  329. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
  330. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
  331. package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
  332. package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
  333. package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
  334. package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
  335. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
  336. package/vendor/abseil-cpp/absl/types/any.h +26 -4
  337. package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
  338. package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
  339. package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
  340. package/vendor/abseil-cpp/absl/types/compare.h +4 -4
  341. package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
  342. package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
  343. package/vendor/abseil-cpp/absl/types/optional.h +30 -3
  344. package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
  345. package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
  346. package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
  347. package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
  348. package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
  349. package/vendor/abseil-cpp/absl/types/span.h +19 -23
  350. package/vendor/abseil-cpp/absl/types/variant.h +75 -18
  351. package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
  352. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
  353. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
  354. package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
  355. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
  356. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
  357. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
  358. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
  359. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
  360. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
  361. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  362. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
  363. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
  364. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
  365. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
  366. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
  367. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
  368. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
  369. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
  370. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
@@ -357,6 +357,71 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
357
357
  crc[2] = crc2;
358
358
  }
359
359
 
360
+ #if defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD) && defined(__AVX__)
361
+ // This is only used if we have vector version of PCLMULQDQ.
362
+ // We don't have it on arm, and it isn't supported by default
363
+ // compiler targets on x86. If we want to use it, we need to either use
364
+ // new compiler flags for the whole function and compile it twice
365
+ // with new and default flags or use inline asm.
366
+ // The code below is the same as FinalizePclmulStream, but with
367
+ // PCLMUL and XOR operating on 2 values in a vector at the same time.
368
+ ABSL_ATTRIBUTE_ALWAYS_INLINE uint64_t
369
+ FinalizeVpclmulStream(V256* partialCRC) const {
370
+ uint64_t crc = 0;
371
+ uint64_t low64, high64;
372
+ __asm__(
373
+ // reduce 2 256-bit vectors into s single 256 vector
374
+ "vbroadcasti128 %[k256], %%ymm0 \n"
375
+ "vpclmulqdq $0x00, %%ymm0, %[crc0], %%ymm1 \n"
376
+ "vpclmulqdq $0x11, %%ymm0, %[crc0], %%ymm2 \n"
377
+ "vpxor %%ymm2, %%ymm1, %%ymm1 \n"
378
+ "vpxor %[crc1], %%ymm1, %%ymm1 \n"
379
+ // reduce upper and lower parts of 256-bit vector
380
+ "vextracti128 $1, %%ymm1, %%xmm2 \n"
381
+ "vpclmulqdq $0x00, %[k128], %%xmm1, %%xmm3 \n"
382
+ "vpclmulqdq $0x11, %[k128], %%xmm1, %%xmm1 \n"
383
+ "vpxor %%xmm1, %%xmm3, %%xmm3 \n"
384
+ "vpxor %%xmm2, %%xmm3, %%xmm3 \n"
385
+ // Move 2 parts of 128-bit vector into scalar register
386
+ // and reduce using sacalr crc instruction
387
+ "vmovq %%xmm3, %[low] \n"
388
+ "vpextrq $1, %%xmm3, %[high] \n"
389
+ "crc32q %[low], %[crc_out] \n"
390
+ "crc32q %[high], %[crc_out] \n"
391
+ : [crc_out] "+r"(crc), [low] "=&r"(low64), [high] "=&r"(high64)
392
+ : [k256] "m"(*(const __m128i*)kFoldAcross256Bits),
393
+ [crc0] "x"(partialCRC[0]), [crc1] "x"(partialCRC[1]),
394
+ [k128] "m"(*(const __m128i*)kFoldAcross128Bits)
395
+ : "ymm0", "ymm1", "ymm2", "ymm3");
396
+ return crc;
397
+ }
398
+
399
+ ABSL_ATTRIBUTE_ALWAYS_INLINE void Process64BytesVpclmul(
400
+ const uint8_t* p, V256* vpartialCRC, V256 loopMultiplicands) const {
401
+ __asm__ volatile(
402
+ "vpclmulqdq $0x11, %3, %0, %%ymm0 \n"
403
+ "vpclmulqdq $0x11, %3, %1, %%ymm1 \n"
404
+ "vpclmulqdq $0x00, %3, %0, %0 \n"
405
+ "vpclmulqdq $0x00, %3, %1, %1 \n"
406
+ "vpxor %%ymm0, %0, %0 \n"
407
+ "vpxor %%ymm1, %1, %1 \n"
408
+ "vpxor (%2), %0, %0 \n"
409
+ "vpxor 32(%2), %1, %1 \n"
410
+ : "+x"(vpartialCRC[0]), "+x"(vpartialCRC[1])
411
+ : "r"(p), "x"(loopMultiplicands)
412
+ : "ymm0", "ymm1");
413
+ }
414
+ #else
415
+ template <typename T = V256>
416
+ ABSL_ATTRIBUTE_ALWAYS_INLINE void Process64BytesVpclmul(const uint8_t*, T*,
417
+ T) const {
418
+ static_assert(sizeof(T) == 0, "Vector PCLMUL not supported");
419
+ }
420
+ ABSL_ATTRIBUTE_ALWAYS_INLINE uint64_t FinalizeVpclmulStream(V256*) const {
421
+ return 0;
422
+ }
423
+ #endif // defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD) && defined(__AVX__)
424
+
360
425
  // Constants generated by './scripts/gen-crc-consts.py x86_pclmul
361
426
  // crc32_lsb_0x82f63b78' from the Linux kernel.
362
427
  alignas(16) static constexpr uint64_t kFoldAcross512Bits[2] = {
@@ -386,7 +451,7 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreamsBase
386
451
  };
387
452
 
388
453
  template <size_t num_crc_streams, size_t num_pclmul_streams,
389
- CutoffStrategy strategy>
454
+ size_t num_vpclmul_streams, CutoffStrategy strategy>
390
455
  class CRC32AcceleratedX86ARMCombinedMultipleStreams
391
456
  : public CRC32AcceleratedX86ARMCombinedMultipleStreamsBase {
392
457
  ABSL_ATTRIBUTE_HOT
@@ -396,6 +461,9 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
396
461
  "Invalid number of crc streams");
397
462
  static_assert(num_pclmul_streams >= 0 && num_pclmul_streams <= kMaxStreams,
398
463
  "Invalid number of pclmul streams");
464
+ static_assert(
465
+ num_vpclmul_streams >= 0 && num_vpclmul_streams <= kMaxStreams,
466
+ "Invalid number of vpclmul streams");
399
467
  const uint8_t* p = static_cast<const uint8_t*>(bytes);
400
468
  const uint8_t* e = p + length;
401
469
  uint32_t l = *crc;
@@ -474,17 +542,23 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
474
542
  }
475
543
 
476
544
  size_t bs = static_cast<size_t>(e - p) /
477
- (num_crc_streams + num_pclmul_streams) / 64;
545
+ (num_crc_streams + num_pclmul_streams + num_vpclmul_streams) /
546
+ 64;
547
+ const uint8_t* stream_start = p;
478
548
  const uint8_t* crc_streams[kMaxStreams];
549
+ for (size_t i = 0; i < num_crc_streams; i++) {
550
+ crc_streams[i] = stream_start;
551
+ stream_start += bs * 64;
552
+ }
479
553
  const uint8_t* pclmul_streams[kMaxStreams];
480
- // We are guaranteed to have at least one crc stream.
481
- crc_streams[0] = p;
482
- for (size_t i = 1; i < num_crc_streams; i++) {
483
- crc_streams[i] = crc_streams[i - 1] + bs * 64;
554
+ for (size_t i = 0; i < num_pclmul_streams; i++) {
555
+ pclmul_streams[i] = stream_start;
556
+ stream_start += bs * 64;
484
557
  }
485
- pclmul_streams[0] = crc_streams[num_crc_streams - 1] + bs * 64;
486
- for (size_t i = 1; i < num_pclmul_streams; i++) {
487
- pclmul_streams[i] = pclmul_streams[i - 1] + bs * 64;
558
+ const uint8_t* vpclmul_streams[kMaxStreams];
559
+ for (size_t i = 0; i < num_vpclmul_streams; i++) {
560
+ vpclmul_streams[i] = stream_start;
561
+ stream_start += bs * 64;
488
562
  }
489
563
 
490
564
  // Per stream crc sums.
@@ -520,6 +594,18 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
520
594
  pclmul_streams[i] += 16 * 4;
521
595
  }
522
596
 
597
+ V256 vpartialCRC[kMaxStreams][2];
598
+ V256 loopMultiplicands{};
599
+ loopMultiplicands =
600
+ V256_Broadcast128(reinterpret_cast<const V128*>(kFoldAcross512Bits));
601
+ for (size_t i = 0; i < num_vpclmul_streams; i++) {
602
+ vpartialCRC[i][0] = V256_LoadU(
603
+ reinterpret_cast<const V256*>(vpclmul_streams[i] + 32 * 0));
604
+ vpartialCRC[i][1] = V256_LoadU(
605
+ reinterpret_cast<const V256*>(vpclmul_streams[i] + 32 * 1));
606
+ vpclmul_streams[i] += 16 * 4;
607
+ }
608
+
523
609
  for (size_t i = 1; i < bs; i++) {
524
610
  // Prefetch data for next iterations.
525
611
  for (size_t j = 0; j < num_crc_streams; j++) {
@@ -530,6 +616,10 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
530
616
  PrefetchToLocalCache(reinterpret_cast<const char*>(pclmul_streams[j] +
531
617
  kPrefetchHorizon));
532
618
  }
619
+ for (size_t j = 0; j < num_vpclmul_streams; j++) {
620
+ PrefetchToLocalCache(reinterpret_cast<const char*>(
621
+ vpclmul_streams[j] + kPrefetchHorizon));
622
+ }
533
623
 
534
624
  // We process each stream in 64 byte blocks. This can be written as
535
625
  // for (int i = 0; i < num_pclmul_streams; i++) {
@@ -568,6 +658,12 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
568
658
  Process64BytesPclmul(pclmul_streams[2], partialCRC[2]);
569
659
  pclmul_streams[2] += 16 * 4;
570
660
  }
661
+
662
+ if constexpr (num_vpclmul_streams > 0) {
663
+ Process64BytesVpclmul(vpclmul_streams[0], vpartialCRC[0],
664
+ loopMultiplicands);
665
+ vpclmul_streams[0] += 16 * 4;
666
+ }
571
667
  }
572
668
 
573
669
  // PCLMULQDQ based streams require special final step;
@@ -576,6 +672,13 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
576
672
  l64_pclmul[i] = FinalizePclmulStream(partialCRC[i]);
577
673
  }
578
674
 
675
+ uint64_t l64_vpclmul[kMaxStreams] = {0};
676
+ if constexpr (num_vpclmul_streams > 0) {
677
+ for (size_t i = 0; i < num_vpclmul_streams; i++) {
678
+ l64_vpclmul[i] = FinalizeVpclmulStream(vpartialCRC[i]);
679
+ }
680
+ }
681
+
579
682
  // Combine all streams into single result.
580
683
  static_assert(64 % (1 << kNumDroppedBits) == 0);
581
684
  uint32_t magic = ComputeZeroConstant(bs * 64);
@@ -588,9 +691,15 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
588
691
  l64 = MultiplyWithExtraX33(static_cast<uint32_t>(l64), magic);
589
692
  l64 ^= l64_pclmul[i];
590
693
  }
694
+ for (size_t i = 0; i < num_vpclmul_streams; i++) {
695
+ l64 = MultiplyWithExtraX33(static_cast<uint32_t>(l64), magic);
696
+ l64 ^= l64_vpclmul[i];
697
+ }
591
698
 
592
699
  // Update p.
593
- if (num_pclmul_streams > 0) {
700
+ if constexpr (num_vpclmul_streams > 0) {
701
+ p = vpclmul_streams[num_vpclmul_streams - 1];
702
+ } else if constexpr (num_pclmul_streams > 0) {
594
703
  p = pclmul_streams[num_pclmul_streams - 1];
595
704
  } else {
596
705
  p = crc_streams[num_crc_streams - 1];
@@ -618,6 +727,10 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
618
727
  ABSL_INTERNAL_STEP1(l, p);
619
728
  }
620
729
 
730
+ *crc = l;
731
+ }
732
+ };
733
+
621
734
  #undef ABSL_INTERNAL_STEP8BY3
622
735
  #undef ABSL_INTERNAL_STEP8BY2
623
736
  #undef ABSL_INTERNAL_STEP8
@@ -625,10 +738,6 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
625
738
  #undef ABSL_INTERNAL_STEP2
626
739
  #undef ABSL_INTERNAL_STEP1
627
740
 
628
- *crc = l;
629
- }
630
- };
631
-
632
741
  } // namespace
633
742
 
634
743
  // Intel processors with SSE4.2 have an instruction for one particular
@@ -636,14 +745,25 @@ class CRC32AcceleratedX86ARMCombinedMultipleStreams
636
745
  CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
637
746
  CpuType type = GetCpuType();
638
747
  switch (type) {
639
- case CpuType::kIntelHaswell:
640
748
  case CpuType::kAmdRome:
749
+ return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
750
+ 3, 0, 0, CutoffStrategy::Fold3>();
751
+ case CpuType::kIntelHaswell:
641
752
  case CpuType::kAmdNaples:
753
+ return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
754
+ 3, 1, 0, CutoffStrategy::Fold3>();
642
755
  case CpuType::kAmdMilan:
643
756
  case CpuType::kAmdGenoa:
644
757
  case CpuType::kAmdTurin:
758
+ #if defined(ABSL_CRC_INTERNAL_HAVE_X86_SIMD) && defined(__AVX__)
759
+ // We don't have vector pclmul on arm, but this still needs to
760
+ // compile.
761
+ return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
762
+ 3, 0, 1, CutoffStrategy::Fold3>();
763
+ #else
645
764
  return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
646
- 3, 1, CutoffStrategy::Fold3>();
765
+ 3, 1, 0, CutoffStrategy::Fold3>();
766
+ #endif
647
767
  // PCLMULQDQ is fast, use combined PCLMULQDQ + CRC implementation.
648
768
  case CpuType::kIntelCascadelakeXeon:
649
769
  case CpuType::kIntelSkylakeXeon:
@@ -654,32 +774,32 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
654
774
  case CpuType::kIntelEmeraldrapids:
655
775
  case CpuType::kIntelGraniterapidsap:
656
776
  return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
657
- 3, 2, CutoffStrategy::Fold3>();
777
+ 3, 2, 0, CutoffStrategy::Fold3>();
658
778
  // PCLMULQDQ is slow, don't use it.
659
779
  case CpuType::kIntelIvybridge:
660
780
  case CpuType::kIntelSandybridge:
661
781
  case CpuType::kIntelWestmere:
662
782
  return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
663
- 3, 0, CutoffStrategy::Fold3>();
783
+ 3, 0, 0, CutoffStrategy::Fold3>();
664
784
  case CpuType::kArmNeoverseN1:
665
785
  case CpuType::kArmNeoverseN2:
666
786
  case CpuType::kArmNeoverseV1:
667
787
  case CpuType::kArmNeoverseN3:
668
788
  return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
669
- 1, 1, CutoffStrategy::Unroll64CRC>();
789
+ 1, 1, 0, CutoffStrategy::Unroll64CRC>();
670
790
  case CpuType::kAmpereSiryn:
671
791
  return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
672
- 3, 2, CutoffStrategy::Fold3>();
792
+ 3, 2, 0, CutoffStrategy::Fold3>();
673
793
  case CpuType::kArmNeoverseV2:
674
794
  return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
675
- 1, 2, CutoffStrategy::Unroll64CRC>();
795
+ 1, 2, 0, CutoffStrategy::Unroll64CRC>();
676
796
  #if defined(__aarch64__)
677
797
  default:
678
798
  // Not all ARM processors support the needed instructions, so check here
679
799
  // before trying to use an accelerated implementation.
680
800
  if (SupportsArmCRC32PMULL()) {
681
801
  return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
682
- 1, 1, CutoffStrategy::Unroll64CRC>();
802
+ 1, 1, 0, CutoffStrategy::Unroll64CRC>();
683
803
  } else {
684
804
  return nullptr;
685
805
  }
@@ -687,71 +807,13 @@ CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() {
687
807
  default:
688
808
  // Something else, play it safe and assume slow PCLMULQDQ.
689
809
  return new CRC32AcceleratedX86ARMCombinedMultipleStreams<
690
- 3, 0, CutoffStrategy::Fold3>();
810
+ 3, 0, 0, CutoffStrategy::Fold3>();
691
811
  #endif
692
812
  }
693
813
  }
694
814
 
695
- std::vector<std::unique_ptr<CRCImpl>> NewCRC32AcceleratedX86ARMCombinedAll() {
696
- auto ret = std::vector<std::unique_ptr<CRCImpl>>();
697
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
698
- 1, 0, CutoffStrategy::Fold3>>());
699
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
700
- 1, 1, CutoffStrategy::Fold3>>());
701
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
702
- 1, 2, CutoffStrategy::Fold3>>());
703
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
704
- 1, 3, CutoffStrategy::Fold3>>());
705
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
706
- 2, 0, CutoffStrategy::Fold3>>());
707
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
708
- 2, 1, CutoffStrategy::Fold3>>());
709
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
710
- 2, 2, CutoffStrategy::Fold3>>());
711
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
712
- 2, 3, CutoffStrategy::Fold3>>());
713
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
714
- 3, 0, CutoffStrategy::Fold3>>());
715
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
716
- 3, 1, CutoffStrategy::Fold3>>());
717
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
718
- 3, 2, CutoffStrategy::Fold3>>());
719
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
720
- 3, 3, CutoffStrategy::Fold3>>());
721
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
722
- 1, 0, CutoffStrategy::Unroll64CRC>>());
723
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
724
- 1, 1, CutoffStrategy::Unroll64CRC>>());
725
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
726
- 1, 2, CutoffStrategy::Unroll64CRC>>());
727
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
728
- 1, 3, CutoffStrategy::Unroll64CRC>>());
729
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
730
- 2, 0, CutoffStrategy::Unroll64CRC>>());
731
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
732
- 2, 1, CutoffStrategy::Unroll64CRC>>());
733
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
734
- 2, 2, CutoffStrategy::Unroll64CRC>>());
735
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
736
- 2, 3, CutoffStrategy::Unroll64CRC>>());
737
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
738
- 3, 0, CutoffStrategy::Unroll64CRC>>());
739
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
740
- 3, 1, CutoffStrategy::Unroll64CRC>>());
741
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
742
- 3, 2, CutoffStrategy::Unroll64CRC>>());
743
- ret.push_back(absl::make_unique<CRC32AcceleratedX86ARMCombinedMultipleStreams<
744
- 3, 3, CutoffStrategy::Unroll64CRC>>());
745
-
746
- return ret;
747
- }
748
-
749
815
  #else // !ABSL_INTERNAL_CAN_USE_SIMD_CRC32C
750
816
 
751
- std::vector<std::unique_ptr<CRCImpl>> NewCRC32AcceleratedX86ARMCombinedAll() {
752
- return std::vector<std::unique_ptr<CRCImpl>>();
753
- }
754
-
755
817
  // no hardware acceleration available
756
818
  CRCImpl* TryNewCRC32AcceleratedX86ARMCombined() { return nullptr; }
757
819
 
@@ -35,33 +35,6 @@ package(
35
35
 
36
36
  licenses(["notice"])
37
37
 
38
- cc_library(
39
- name = "borrowed_fixup_buffer",
40
- srcs = ["internal/borrowed_fixup_buffer.cc"],
41
- hdrs = ["internal/borrowed_fixup_buffer.h"],
42
- copts = ABSL_DEFAULT_COPTS,
43
- linkopts = ABSL_DEFAULT_LINKOPTS,
44
- deps = [
45
- "//absl/base:config",
46
- "//absl/base:core_headers",
47
- "//absl/base:malloc_internal",
48
- "//absl/hash",
49
- ],
50
- )
51
-
52
- cc_test(
53
- name = "borrowed_fixup_buffer_test",
54
- srcs = ["internal/borrowed_fixup_buffer_test.cc"],
55
- copts = ABSL_TEST_COPTS,
56
- linkopts = ABSL_DEFAULT_LINKOPTS,
57
- deps = [
58
- ":borrowed_fixup_buffer",
59
- "//absl/base:config",
60
- "@googletest//:gtest",
61
- "@googletest//:gtest_main",
62
- ],
63
- )
64
-
65
38
  cc_library(
66
39
  name = "stacktrace",
67
40
  srcs = [
@@ -81,7 +54,6 @@ cc_library(
81
54
  copts = ABSL_DEFAULT_COPTS,
82
55
  linkopts = ABSL_DEFAULT_LINKOPTS,
83
56
  deps = [
84
- ":borrowed_fixup_buffer",
85
57
  ":debugging_internal",
86
58
  "//absl/base:config",
87
59
  "//absl/base:core_headers",
@@ -97,7 +69,6 @@ cc_test(
97
69
  copts = ABSL_TEST_COPTS,
98
70
  linkopts = ABSL_DEFAULT_LINKOPTS,
99
71
  deps = [
100
- ":borrowed_fixup_buffer",
101
72
  ":stacktrace",
102
73
  "//absl/base:config",
103
74
  "//absl/base:core_headers",
@@ -164,10 +135,13 @@ cc_test(
164
135
  "//absl/base",
165
136
  "//absl/base:config",
166
137
  "//absl/base:core_headers",
138
+ "//absl/base:malloc_internal",
139
+ "//absl/cleanup",
167
140
  "//absl/log",
168
141
  "//absl/log:check",
169
142
  "//absl/memory",
170
143
  "//absl/strings",
144
+ "//absl/strings:str_format",
171
145
  "@googletest//:gtest",
172
146
  ],
173
147
  )
@@ -182,7 +156,10 @@ cc_library(
182
156
  ],
183
157
  copts = ABSL_DEFAULT_COPTS,
184
158
  linkopts = ABSL_DEFAULT_LINKOPTS,
185
- visibility = ["//absl/log/internal:__pkg__"],
159
+ visibility = [
160
+ "//absl:friends",
161
+ "//absl/log/internal:__pkg__",
162
+ ],
186
163
  deps = [
187
164
  ":stacktrace",
188
165
  ":symbolize",
@@ -244,7 +221,7 @@ cc_library(
244
221
  ],
245
222
  copts = ABSL_DEFAULT_COPTS,
246
223
  linkopts = ABSL_DEFAULT_LINKOPTS,
247
- visibility = ["//visibility:private"],
224
+ visibility = ["//absl:friends"],
248
225
  deps = [
249
226
  "//absl/base:config",
250
227
  "//absl/base:core_headers",
@@ -261,6 +238,7 @@ cc_library(
261
238
  copts = ABSL_DEFAULT_COPTS,
262
239
  linkopts = ABSL_DEFAULT_LINKOPTS,
263
240
  visibility = [
241
+ "//absl:friends",
264
242
  "//absl/container:__pkg__",
265
243
  "//absl/debugging:__pkg__",
266
244
  ],
@@ -16,38 +16,6 @@
16
16
 
17
17
  find_library(EXECINFO_LIBRARY execinfo)
18
18
 
19
- absl_cc_library(
20
- NAME
21
- borrowed_fixup_buffer
22
- SRCS
23
- "internal/borrowed_fixup_buffer.cc"
24
- HDRS
25
- "internal/borrowed_fixup_buffer.h"
26
- COPTS
27
- ${ABSL_DEFAULT_COPTS}
28
- LINKOPTS
29
- ${ABSL_DEFAULT_LINKOPTS}
30
- DEPS
31
- absl::config
32
- absl::core_headers
33
- absl::hash
34
- absl::malloc_internal
35
- PUBLIC
36
- )
37
-
38
- absl_cc_test(
39
- NAME
40
- borrowed_fixup_buffer_test
41
- SRCS
42
- "internal/borrowed_fixup_buffer_test.cc"
43
- COPTS
44
- ${ABSL_TEST_COPTS}
45
- DEPS
46
- absl::borrowed_fixup_buffer
47
- absl::config
48
- GTest::gmock_main
49
- )
50
-
51
19
  absl_cc_library(
52
20
  NAME
53
21
  stacktrace
@@ -70,7 +38,6 @@ absl_cc_library(
70
38
  LINKOPTS
71
39
  $<$<BOOL:${EXECINFO_LIBRARY}>:${EXECINFO_LIBRARY}>
72
40
  DEPS
73
- absl::borrowed_fixup_buffer
74
41
  absl::debugging_internal
75
42
  absl::config
76
43
  absl::core_headers
@@ -140,12 +107,15 @@ absl_cc_test(
140
107
  DEPS
141
108
  absl::base
142
109
  absl::check
110
+ absl::cleanup
143
111
  absl::config
144
112
  absl::core_headers
145
113
  absl::log
114
+ absl::malloc_internal
146
115
  absl::memory
147
116
  absl::stack_consumption
148
117
  absl::strings
118
+ absl::str_format
149
119
  absl::symbolize
150
120
  GTest::gmock
151
121
  )
@@ -32,6 +32,14 @@ namespace debugging_internal {
32
32
  // DemangleRustSymbolEncoding is async-signal-safe and runs in bounded C++
33
33
  // call-stack space. It is suitable for symbolizing stack traces in a signal
34
34
  // handler.
35
+ //
36
+ // Note that this demangler purposefully omits some details: generic argument
37
+ // lists become `<>`, function types `fn...`, and long tuples `(t, u, v, ...)`.
38
+ // This simplification suits crash backtracing, where the signal handler must
39
+ // not `malloc`, and the human troubleshooter won't want the `file:line` blame
40
+ // drowned in generic arguments. Applications better served by a freely
41
+ // allocating detailed demangler might prefer to use Rust's own `rustc-demangle`
42
+ // crate.
35
43
  bool DemangleRustSymbolEncoding(const char* mangled, char* out,
36
44
  size_t out_size);
37
45
 
@@ -15,6 +15,7 @@
15
15
  #include "absl/debugging/internal/demangle.h"
16
16
 
17
17
  #include <cstdlib>
18
+ #include <memory>
18
19
  #include <string>
19
20
 
20
21
  #include "gmock/gmock.h"
@@ -2000,7 +2001,7 @@ TEST(Demangle, DemangleStackConsumption) {
2000
2001
 
2001
2002
  static void TestOnInput(const char* input) {
2002
2003
  static const int kOutSize = 1048576;
2003
- auto out = absl::make_unique<char[]>(kOutSize);
2004
+ auto out = std::make_unique<char[]>(kOutSize);
2004
2005
  Demangle(input, out.get(), kOutSize);
2005
2006
  }
2006
2007
 
@@ -143,6 +143,12 @@ void DumpPCAndFrameSizeAndSymbol(OutputWriter* writer, void* writer_arg,
143
143
  writer(buf, writer_arg);
144
144
  }
145
145
 
146
+ void DebugStackTraceHookLegacyAdapter(void* const stack[], int depth,
147
+ OutputWriter* writer, void* writer_arg) {
148
+ debug_stack_trace_hook(stack, depth, /*crash_pc=*/nullptr, writer,
149
+ writer_arg);
150
+ }
151
+
146
152
  } // namespace
147
153
 
148
154
  void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook) {
@@ -150,7 +156,11 @@ void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook) {
150
156
  }
151
157
 
152
158
  SymbolizeUrlEmitterLegacy GetDebugStackTraceHookLegacy() {
153
- return debug_stack_trace_hook;
159
+ if (debug_stack_trace_hook == nullptr) {
160
+ // No prior call to RegisterDebugStackTraceHook.
161
+ return nullptr;
162
+ }
163
+ return &DebugStackTraceHookLegacyAdapter;
154
164
  }
155
165
 
156
166
  SymbolizeUrlEmitter GetDebugStackTraceHook() { return debug_stack_trace_hook; }
@@ -313,7 +323,7 @@ void DumpStackTrace(int min_dropped_frames, int max_num_frames,
313
323
 
314
324
  auto hook = GetDebugStackTraceHook();
315
325
  if (hook != nullptr) {
316
- (*hook)(stack, depth, writer, writer_arg);
326
+ hook(stack, depth, /*crash_pc=*/nullptr, writer, writer_arg);
317
327
  }
318
328
 
319
329
  if (allocated_bytes != 0) Deallocate(stack, allocated_bytes);
@@ -31,7 +31,8 @@ typedef void OutputWriter(const char*, void*);
31
31
  // `hook` that is called each time DumpStackTrace() is called.
32
32
  // `hook` may be called from a signal handler.
33
33
  typedef void (*SymbolizeUrlEmitter)(void* const stack[], int depth,
34
- OutputWriter* writer, void* writer_arg);
34
+ const void* crash_pc, OutputWriter* writer,
35
+ void* writer_arg);
35
36
  typedef void (*SymbolizeUrlEmitterLegacy)(void* const stack[], int depth,
36
37
  OutputWriter* writer,
37
38
  void* writer_arg);
@@ -41,8 +42,6 @@ typedef void (*SymbolizeUrlEmitterLegacy)(void* const stack[], int depth,
41
42
  void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook);
42
43
  SymbolizeUrlEmitter GetDebugStackTraceHook();
43
44
 
44
- // Currently exact copy of above. Needed for the 3-CL dance due to
45
- // TCMallocDebugStackTraceHook dependency on this API.
46
45
  SymbolizeUrlEmitterLegacy GetDebugStackTraceHookLegacy();
47
46
 
48
47
  // Returns the program counter from signal context, or nullptr if
@@ -212,6 +212,17 @@ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
212
212
  stack_info.sig_stack_low = stack_info.stack_low;
213
213
  stack_info.sig_stack_high = kUnknownStackEnd;
214
214
 
215
+ #if defined(__linux__)
216
+ // Similarly for the signal stack, retrieve the information into sig_stack and
217
+ // then pass it down per call. Calling sigaltstack with nullptr as the first
218
+ // argument doesn't change the signal stack.
219
+ stack_t sig_stack;
220
+ if (sigaltstack(nullptr, &sig_stack) == 0) {
221
+ stack_info.sig_stack_low = reinterpret_cast<uintptr_t>(sig_stack.ss_sp);
222
+ stack_info.sig_stack_high = stack_info.sig_stack_low + sig_stack.ss_size;
223
+ }
224
+ #endif
225
+
215
226
  // The frame pointer points to low address of a frame. The first 64-bit
216
227
  // word of a frame points to the next frame up the call chain, which normally
217
228
  // is just after the high address of the current frame. The second word of
@@ -74,10 +74,19 @@ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
74
74
  size =
75
75
  static_cast<int>(emscripten_stack_unwind_buffer(pc, stack, kStackLength));
76
76
 
77
- int result_count = size - skip_count;
78
- if (result_count < 0) result_count = 0;
79
- if (result_count > max_depth) result_count = max_depth;
80
- for (int i = 0; i < result_count; i++) result[i] = stack[i + skip_count];
77
+ int num_frames = size - skip_count;
78
+ if (num_frames < 0) num_frames = 0;
79
+ if (num_frames > max_depth) num_frames = max_depth;
80
+
81
+ int result_count = 0;
82
+ for (int i = 0; i < num_frames; i++) {
83
+ int stack_index = i + skip_count;
84
+ // Follow x86 and stop if the return address is null (end of stack).
85
+ if (stack[stack_index] == nullptr) {
86
+ break;
87
+ }
88
+ result[result_count++] = stack[stack_index];
89
+ }
81
90
 
82
91
  if (IS_STACK_FRAMES) {
83
92
  // No implementation for finding out the stack frames yet.
@@ -71,13 +71,20 @@ static int UnwindImpl(void** result, uintptr_t* frames, int* sizes,
71
71
 
72
72
  size = backtrace(stack, kStackLength);
73
73
  skip_count++; // we want to skip the current frame as well
74
- int result_count = size - skip_count;
75
- if (result_count < 0)
76
- result_count = 0;
77
- if (result_count > max_depth)
78
- result_count = max_depth;
79
- for (int i = 0; i < result_count; i++)
80
- result[i] = stack[i + skip_count];
74
+
75
+ int num_frames = size - skip_count;
76
+ if (num_frames < 0) num_frames = 0;
77
+ if (num_frames > max_depth) num_frames = max_depth;
78
+
79
+ int result_count = 0;
80
+ for (int i = 0; i < num_frames; i++) {
81
+ int stack_index = i + skip_count;
82
+ // Follow x86 and stop if the return address is null (end of stack).
83
+ if (stack[stack_index] == nullptr) {
84
+ break;
85
+ }
86
+ result[result_count++] = stack[stack_index];
87
+ }
81
88
 
82
89
  if (IS_STACK_FRAMES) {
83
90
  // No implementation for finding out the stack frames yet.