re2 1.22.2 → 1.23.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 (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
@@ -31,11 +31,53 @@
31
31
  #ifndef ABSL_DEBUGGING_STACKTRACE_H_
32
32
  #define ABSL_DEBUGGING_STACKTRACE_H_
33
33
 
34
+ #include <stddef.h>
35
+ #include <stdint.h>
36
+
37
+ #include "absl/base/attributes.h"
34
38
  #include "absl/base/config.h"
35
39
 
36
40
  namespace absl {
37
41
  ABSL_NAMESPACE_BEGIN
38
42
 
43
+ namespace internal_stacktrace {
44
+
45
+ // Same as `absl::GetStackFrames`, but with an optional `frames` parameter to
46
+ // allow callers to receive the raw stack frame addresses.
47
+ // This is internal for now; use `absl::GetStackFrames()` instead.
48
+ extern int GetStackFrames(void** result, uintptr_t* frames, int* sizes,
49
+ int max_depth, int skip_count);
50
+
51
+ // Same as `absl::GetStackFramesWithContext`, but with an optional `frames`
52
+ // parameter to allow callers to receive a start address for each stack frame.
53
+ // The address may be zero in cases where it cannot be computed.
54
+ //
55
+ // DO NOT use this function without consulting the owners of absl/debuggging.
56
+ // There is NO GUARANTEE on the precise frame addresses returned on any given
57
+ // platform. It is only intended to provide sufficient non-overlapping bounds on
58
+ // the local variables of a stack frame when used in conjunction with the
59
+ // returned frame sizes. The actual pointers may be ABI-dependent, may vary at
60
+ // run time, and are subject to breakage without notice.
61
+ //
62
+ // Implementation note:
63
+ // Currently, we *attempt* to return the Canonical Frame Address (CFA) in DWARF
64
+ // on most platforms. This is the value of the stack pointer just before the
65
+ // 'call' instruction is executed in the caller.
66
+ // Not all platforms and toolchains support this exact address, so this should
67
+ // not be relied on for correctness.
68
+ extern int GetStackFramesWithContext(void** result, uintptr_t* frames,
69
+ int* sizes, int max_depth, int skip_count,
70
+ const void* uc, int* min_dropped_frames);
71
+
72
+ // Same as `absl::DefaultStackUnwinder`, but with an optional `frames` parameter
73
+ // to allow callers to receive the raw stack frame addresses.
74
+ // This is internal for now; do not depend on this externally.
75
+ extern int DefaultStackUnwinder(void** pcs, uintptr_t* frames, int* sizes,
76
+ int max_depth, int skip_count, const void* uc,
77
+ int* min_dropped_frames);
78
+
79
+ } // namespace internal_stacktrace
80
+
39
81
  // GetStackFrames()
40
82
  //
41
83
  // Records program counter values for up to `max_depth` frames, skipping the
@@ -78,8 +120,13 @@ ABSL_NAMESPACE_BEGIN
78
120
  //
79
121
  // This routine may return fewer stack frame entries than are
80
122
  // available. Also note that `result` and `sizes` must both be non-null.
81
- extern int GetStackFrames(void** result, int* sizes, int max_depth,
82
- int skip_count);
123
+ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int GetStackFrames(void** result,
124
+ int* sizes,
125
+ int max_depth,
126
+ int skip_count) {
127
+ return internal_stacktrace::GetStackFrames(result, nullptr, sizes, max_depth,
128
+ skip_count);
129
+ }
83
130
 
84
131
  // GetStackFramesWithContext()
85
132
  //
@@ -102,9 +149,12 @@ extern int GetStackFrames(void** result, int* sizes, int max_depth,
102
149
  // or other reasons. (This value will be set to `0` if no frames were dropped.)
103
150
  // The number of total stack frames is guaranteed to be >= skip_count +
104
151
  // max_depth + *min_dropped_frames.
105
- extern int GetStackFramesWithContext(void** result, int* sizes, int max_depth,
106
- int skip_count, const void* uc,
107
- int* min_dropped_frames);
152
+ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int GetStackFramesWithContext(
153
+ void** result, int* sizes, int max_depth, int skip_count, const void* uc,
154
+ int* min_dropped_frames) {
155
+ return internal_stacktrace::GetStackFramesWithContext(
156
+ result, nullptr, sizes, max_depth, skip_count, uc, min_dropped_frames);
157
+ }
108
158
 
109
159
  // GetStackTrace()
110
160
  //
@@ -225,6 +275,24 @@ namespace debugging_internal {
225
275
  // working.
226
276
  extern bool StackTraceWorksForTest();
227
277
  } // namespace debugging_internal
278
+
279
+ namespace internal_stacktrace {
280
+ extern bool ShouldFixUpStack();
281
+
282
+ // Fixes up the stack trace of the current thread, in the first `depth` frames
283
+ // of each buffer. The buffers need to be larger than `depth`, to accommodate
284
+ // any newly inserted elements. `depth` is updated to reflect the new number of
285
+ // elements valid across all the buffers. (It is therefore recommended that all
286
+ // buffer sizes be equal.)
287
+ //
288
+ // The `frames` and `sizes` parameters denote the bounds of the stack frame
289
+ // corresponding to each instruction pointer in the `pcs`.
290
+ // Any elements inside these buffers may be zero or null, in which case that
291
+ // information is assumed to be absent/unavailable.
292
+ extern void FixUpStack(void** pcs, uintptr_t* frames, int* sizes,
293
+ size_t capacity, size_t& depth);
294
+ } // namespace internal_stacktrace
295
+
228
296
  ABSL_NAMESPACE_END
229
297
  } // namespace absl
230
298
 
@@ -14,12 +14,58 @@
14
14
 
15
15
  #include "absl/debugging/stacktrace.h"
16
16
 
17
+ #include <stddef.h>
18
+ #include <stdint.h>
19
+
20
+ #include <algorithm>
21
+ #include <cerrno>
22
+ #include <csignal>
23
+ #include <cstring>
24
+ #include <memory>
25
+
26
+ #include "gmock/gmock.h"
17
27
  #include "gtest/gtest.h"
18
- #include "absl/base/macros.h"
28
+ #include "absl/base/attributes.h"
29
+ #include "absl/base/config.h"
19
30
  #include "absl/base/optimization.h"
31
+ #include "absl/types/span.h"
32
+
33
+ static int g_should_fixup_calls = 0;
34
+ static int g_fixup_calls = 0;
35
+ static bool g_enable_fixup = false;
36
+ static uintptr_t g_last_fixup_frame_address = 0;
37
+
38
+ #if ABSL_HAVE_ATTRIBUTE_WEAK
39
+ bool absl::internal_stacktrace::ShouldFixUpStack() {
40
+ ++g_should_fixup_calls;
41
+ return g_enable_fixup;
42
+ }
43
+
44
+ void absl::internal_stacktrace::FixUpStack(void**, uintptr_t*, int*, size_t,
45
+ size_t&) {
46
+ const void* frame_address = nullptr;
47
+ #if ABSL_HAVE_BUILTIN(__builtin_frame_address)
48
+ frame_address = __builtin_frame_address(0);
49
+ #endif
50
+ g_last_fixup_frame_address = reinterpret_cast<uintptr_t>(frame_address);
51
+ ++g_fixup_calls;
52
+ }
53
+ #endif
20
54
 
21
55
  namespace {
22
56
 
57
+ using ::testing::ContainerEq;
58
+ using ::testing::Contains;
59
+ using ::testing::internal::Cleanup;
60
+
61
+ struct StackTrace {
62
+ static constexpr int kStackCount = 64;
63
+ int depth;
64
+ void* result[kStackCount];
65
+ uintptr_t frames[kStackCount];
66
+ int sizes[kStackCount];
67
+ };
68
+
23
69
  // This test is currently only known to pass on Linux x86_64/aarch64.
24
70
  #if defined(__linux__) && (defined(__x86_64__) || defined(__aarch64__))
25
71
  ABSL_ATTRIBUTE_NOINLINE void Unwind(void* p) {
@@ -44,4 +90,392 @@ TEST(StackTrace, HugeFrame) {
44
90
  }
45
91
  #endif
46
92
 
93
+ // This is a separate function to avoid inlining.
94
+ ABSL_ATTRIBUTE_NOINLINE static void FixupNoFixupEquivalenceNoInline() {
95
+ #if !ABSL_HAVE_ATTRIBUTE_WEAK
96
+ GTEST_SKIP() << "Need weak symbol support";
97
+ #endif
98
+ #if defined(__riscv)
99
+ GTEST_SKIP() << "Skipping test on RISC-V due to pre-existing failure";
100
+ #endif
101
+ #if defined(_WIN32)
102
+ // TODO(b/434184677): Add support for fixups on Windows if needed
103
+ GTEST_SKIP() << "Skipping test on Windows due to lack of support for fixups";
104
+ #endif
105
+ bool can_rely_on_frame_pointers = false;
106
+ if (!can_rely_on_frame_pointers) {
107
+ GTEST_SKIP() << "Frame pointers are required, but not guaranteed in OSS";
108
+ }
109
+
110
+ // This test is known not to pass on MSVC (due to weak symbols)
111
+
112
+ const Cleanup restore_state([enable_fixup = g_enable_fixup,
113
+ fixup_calls = g_fixup_calls,
114
+ should_fixup_calls = g_should_fixup_calls]() {
115
+ g_enable_fixup = enable_fixup;
116
+ g_fixup_calls = fixup_calls;
117
+ g_should_fixup_calls = should_fixup_calls;
118
+ });
119
+
120
+ constexpr int kSkip = 1; // Skip our own frame, whose return PCs won't match
121
+ constexpr auto kStackCount = 1;
122
+
123
+ StackTrace a;
124
+ StackTrace b;
125
+
126
+ // ==========================================================================
127
+
128
+ g_fixup_calls = 0;
129
+ g_should_fixup_calls = 0;
130
+ a.depth = absl::GetStackTrace(a.result, kStackCount, kSkip);
131
+ g_enable_fixup = !g_enable_fixup;
132
+ b.depth = absl::GetStackTrace(b.result, kStackCount, kSkip);
133
+ EXPECT_THAT(
134
+ absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
135
+ ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
136
+ EXPECT_GT(g_should_fixup_calls, 0);
137
+ EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
138
+
139
+ // ==========================================================================
140
+
141
+ g_fixup_calls = 0;
142
+ g_should_fixup_calls = 0;
143
+ a.depth = absl::GetStackFrames(a.result, a.sizes, kStackCount, kSkip);
144
+ g_enable_fixup = !g_enable_fixup;
145
+ b.depth = absl::GetStackFrames(b.result, b.sizes, kStackCount, kSkip);
146
+ EXPECT_THAT(
147
+ absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
148
+ ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
149
+ EXPECT_THAT(
150
+ absl::MakeSpan(a.sizes, static_cast<size_t>(a.depth)),
151
+ ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
152
+ EXPECT_GT(g_should_fixup_calls, 0);
153
+ EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
154
+
155
+ // ==========================================================================
156
+
157
+ g_fixup_calls = 0;
158
+ g_should_fixup_calls = 0;
159
+ a.depth = absl::GetStackTraceWithContext(a.result, kStackCount, kSkip,
160
+ nullptr, nullptr);
161
+ g_enable_fixup = !g_enable_fixup;
162
+ b.depth = absl::GetStackTraceWithContext(b.result, kStackCount, kSkip,
163
+ nullptr, nullptr);
164
+ EXPECT_THAT(
165
+ absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
166
+ ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
167
+ EXPECT_GT(g_should_fixup_calls, 0);
168
+ EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
169
+
170
+ // ==========================================================================
171
+
172
+ g_fixup_calls = 0;
173
+ g_should_fixup_calls = 0;
174
+ a.depth = absl::GetStackFramesWithContext(a.result, a.sizes, kStackCount,
175
+ kSkip, nullptr, nullptr);
176
+ g_enable_fixup = !g_enable_fixup;
177
+ b.depth = absl::GetStackFramesWithContext(b.result, b.sizes, kStackCount,
178
+ kSkip, nullptr, nullptr);
179
+ EXPECT_THAT(
180
+ absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
181
+ ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
182
+ EXPECT_THAT(
183
+ absl::MakeSpan(a.sizes, static_cast<size_t>(a.depth)),
184
+ ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
185
+ EXPECT_GT(g_should_fixup_calls, 0);
186
+ EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
187
+
188
+ // ==========================================================================
189
+
190
+ g_fixup_calls = 0;
191
+ g_should_fixup_calls = 0;
192
+ a.depth = absl::internal_stacktrace::GetStackFrames(
193
+ a.result, a.frames, a.sizes, kStackCount, kSkip);
194
+ g_enable_fixup = !g_enable_fixup;
195
+ b.depth = absl::internal_stacktrace::GetStackFrames(
196
+ b.result, b.frames, b.sizes, kStackCount, kSkip);
197
+ EXPECT_THAT(
198
+ absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
199
+ ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
200
+ EXPECT_THAT(
201
+ absl::MakeSpan(a.sizes, static_cast<size_t>(a.depth)),
202
+ ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
203
+ EXPECT_THAT(
204
+ absl::MakeSpan(a.frames, static_cast<size_t>(a.depth)),
205
+ ContainerEq(absl::MakeSpan(b.frames, static_cast<size_t>(b.depth))));
206
+ EXPECT_GT(g_should_fixup_calls, 0);
207
+ EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
208
+
209
+ // ==========================================================================
210
+
211
+ g_fixup_calls = 0;
212
+ g_should_fixup_calls = 0;
213
+ a.depth = absl::internal_stacktrace::GetStackFramesWithContext(
214
+ a.result, a.frames, a.sizes, kStackCount, kSkip, nullptr, nullptr);
215
+ g_enable_fixup = !g_enable_fixup;
216
+ b.depth = absl::internal_stacktrace::GetStackFramesWithContext(
217
+ b.result, b.frames, b.sizes, kStackCount, kSkip, nullptr, nullptr);
218
+ EXPECT_THAT(
219
+ absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
220
+ ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
221
+ EXPECT_THAT(
222
+ absl::MakeSpan(a.sizes, static_cast<size_t>(a.depth)),
223
+ ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
224
+ EXPECT_THAT(
225
+ absl::MakeSpan(a.frames, static_cast<size_t>(a.depth)),
226
+ ContainerEq(absl::MakeSpan(b.frames, static_cast<size_t>(b.depth))));
227
+ EXPECT_GT(g_should_fixup_calls, 0);
228
+ EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
229
+ }
230
+
231
+ TEST(StackTrace, FixupNoFixupEquivalence) { FixupNoFixupEquivalenceNoInline(); }
232
+
233
+ TEST(StackTrace, FixupLowStackUsage) {
234
+ #if !ABSL_HAVE_ATTRIBUTE_WEAK
235
+ GTEST_SKIP() << "Skipping test on MSVC due to weak symbols";
236
+ #endif
237
+ #if defined(_WIN32)
238
+ // TODO(b/434184677): Add support for fixups on Windows if needed
239
+ GTEST_SKIP() << "Skipping test on Windows due to lack of support for fixups";
240
+ #endif
241
+
242
+ const Cleanup restore_state([enable_fixup = g_enable_fixup,
243
+ fixup_calls = g_fixup_calls,
244
+ should_fixup_calls = g_should_fixup_calls]() {
245
+ g_enable_fixup = enable_fixup;
246
+ g_fixup_calls = fixup_calls;
247
+ g_should_fixup_calls = should_fixup_calls;
248
+ });
249
+
250
+ g_enable_fixup = true;
251
+
252
+ // Request a ton of stack frames, regardless of how many are actually used.
253
+ // It's fine to request more frames than we have, since functions preallocate
254
+ // memory before discovering how high the stack really is, and we're really
255
+ // just trying to make sure the preallocations don't overflow the stack.
256
+ //
257
+ // Note that we loop in order to cover all sides of any branches in the
258
+ // implementation that switch allocation behavior (e.g., from stack to heap)
259
+ // and to ensure that no sides allocate too much stack space.
260
+ constexpr size_t kPageSize = 4096;
261
+ for (size_t depth = 2; depth < (1 << 20); depth += depth / 2) {
262
+ const auto stack = std::make_unique<void*[]>(depth);
263
+ const auto frames = std::make_unique<int[]>(depth);
264
+
265
+ absl::GetStackFrames(stack.get(), frames.get(), static_cast<int>(depth), 0);
266
+ const void* frame_address = nullptr;
267
+ #if ABSL_HAVE_BUILTIN(__builtin_frame_address)
268
+ frame_address = __builtin_frame_address(0);
269
+ #endif
270
+ size_t stack_usage =
271
+ reinterpret_cast<uintptr_t>(frame_address) - g_last_fixup_frame_address;
272
+ EXPECT_LT(stack_usage, kPageSize);
273
+ }
274
+ }
275
+
276
+ TEST(StackTrace, CustomUnwinderPerformsFixup) {
277
+ #if !ABSL_HAVE_ATTRIBUTE_WEAK
278
+ GTEST_SKIP() << "Need weak symbol support";
279
+ #endif
280
+ #if defined(_WIN32)
281
+ // TODO(b/434184677): Add support for fixups on Windows if needed
282
+ GTEST_SKIP() << "Skipping test on Windows due to lack of support for fixups";
283
+ #endif
284
+
285
+ constexpr int kSkip = 1; // Skip our own frame, whose return PCs won't match
286
+ constexpr auto kStackCount = 1;
287
+
288
+ absl::SetStackUnwinder(absl::DefaultStackUnwinder);
289
+ const Cleanup restore_state([enable_fixup = g_enable_fixup,
290
+ fixup_calls = g_fixup_calls,
291
+ should_fixup_calls = g_should_fixup_calls]() {
292
+ absl::SetStackUnwinder(nullptr);
293
+ g_enable_fixup = enable_fixup;
294
+ g_fixup_calls = fixup_calls;
295
+ g_should_fixup_calls = should_fixup_calls;
296
+ });
297
+
298
+ StackTrace trace;
299
+
300
+ g_enable_fixup = true;
301
+ g_should_fixup_calls = 0;
302
+ g_fixup_calls = 0;
303
+ absl::GetStackTrace(trace.result, kSkip, kStackCount);
304
+ EXPECT_GT(g_should_fixup_calls, 0);
305
+ EXPECT_GT(g_fixup_calls, 0);
306
+
307
+ g_enable_fixup = true;
308
+ g_should_fixup_calls = 0;
309
+ g_fixup_calls = 0;
310
+ absl::GetStackFrames(trace.result, trace.sizes, kSkip, kStackCount);
311
+ EXPECT_GT(g_should_fixup_calls, 0);
312
+ EXPECT_GT(g_fixup_calls, 0);
313
+
314
+ g_enable_fixup = true;
315
+ g_should_fixup_calls = 0;
316
+ g_fixup_calls = 0;
317
+ absl::GetStackTraceWithContext(trace.result, kSkip, kStackCount, nullptr,
318
+ nullptr);
319
+ EXPECT_GT(g_should_fixup_calls, 0);
320
+ EXPECT_GT(g_fixup_calls, 0);
321
+
322
+ g_enable_fixup = true;
323
+ g_should_fixup_calls = 0;
324
+ g_fixup_calls = 0;
325
+ absl::GetStackFramesWithContext(trace.result, trace.sizes, kSkip, kStackCount,
326
+ nullptr, nullptr);
327
+ EXPECT_GT(g_should_fixup_calls, 0);
328
+ EXPECT_GT(g_fixup_calls, 0);
329
+ }
330
+
331
+ #if ABSL_HAVE_BUILTIN(__builtin_frame_address)
332
+ struct FrameInfo {
333
+ const void* return_address;
334
+ uintptr_t frame_address;
335
+ };
336
+
337
+ // Returns the canonical frame address and return address for the current stack
338
+ // frame, while capturing the stack trace at the same time.
339
+ // This performs any platform-specific adjustments necessary to convert from the
340
+ // compiler built-ins to the expected API outputs.
341
+ ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
342
+ ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
343
+ ABSL_ATTRIBUTE_NOINLINE static FrameInfo
344
+ CaptureBacktraceNoInline(StackTrace& backtrace) {
345
+ FrameInfo result;
346
+ result.return_address = __builtin_return_address(0);
347
+ // Large enough to cover all realistic slots the return address could be in
348
+ const int kMaxReturnAddressIndex = 5;
349
+ void* const* bfa = static_cast<void* const*>(__builtin_frame_address(0));
350
+ backtrace.depth = absl::internal_stacktrace::GetStackFramesWithContext(
351
+ backtrace.result, backtrace.frames, backtrace.sizes,
352
+ StackTrace::kStackCount, /*skip_count=*/0,
353
+ /*uc=*/nullptr, /*min_dropped_frames=*/nullptr);
354
+ // Make sure the return address is at a reasonable location in the frame
355
+ ptrdiff_t i;
356
+ for (i = 0; i < kMaxReturnAddressIndex; ++i) {
357
+ // Avoid std::find() here, since it lacks no-sanitize attributes.
358
+ if (bfa[i] == result.return_address) {
359
+ break;
360
+ }
361
+ }
362
+ result.frame_address =
363
+ i < kMaxReturnAddressIndex
364
+ ? reinterpret_cast<uintptr_t>(
365
+ bfa + i + 1 /* get the Canonical Frame Address (CFA) */)
366
+ : 0;
367
+ return result;
368
+ }
369
+
370
+ TEST(StackTrace, CanonicalFrameAddresses) {
371
+ // Now capture a stack trace and verify that the return addresses and frame
372
+ // addresses line up for one frame.
373
+ StackTrace backtrace;
374
+ const auto [return_address, frame_address] =
375
+ CaptureBacktraceNoInline(backtrace);
376
+ auto return_addresses = absl::MakeSpan(backtrace.result)
377
+ .subspan(0, static_cast<size_t>(backtrace.depth));
378
+ auto frame_addresses = absl::MakeSpan(backtrace.frames)
379
+ .subspan(0, static_cast<size_t>(backtrace.depth));
380
+
381
+ // Many platforms don't support this by default.
382
+ bool support_is_expected = false;
383
+
384
+ if (support_is_expected) {
385
+ // If all zeros were returned, that is valid per the function's contract.
386
+ // It just means we don't support returning frame addresses on this
387
+ // platform.
388
+ bool supported = static_cast<size_t>(std::count(frame_addresses.begin(),
389
+ frame_addresses.end(), 0)) <
390
+ frame_addresses.size();
391
+ EXPECT_TRUE(supported);
392
+ if (supported) {
393
+ ASSERT_TRUE(frame_address)
394
+ << "unable to obtain frame address corresponding to return address";
395
+ EXPECT_THAT(return_addresses, Contains(return_address).Times(1));
396
+ EXPECT_THAT(frame_addresses, Contains(frame_address).Times(1));
397
+ ptrdiff_t ifound = std::find(return_addresses.begin(),
398
+ return_addresses.end(), return_address) -
399
+ return_addresses.begin();
400
+ // Make sure we found the frame in the first place.
401
+ ASSERT_LT(ifound, backtrace.depth);
402
+ // Make sure the frame address actually corresponds to the return
403
+ // address.
404
+ EXPECT_EQ(frame_addresses[static_cast<size_t>(ifound)], frame_address);
405
+ // Make sure the addresses only appear once.
406
+ }
407
+ }
408
+ }
409
+ #endif
410
+
411
+ // This test is Linux specific.
412
+ #if defined(__linux__)
413
+ const void* g_return_address = nullptr;
414
+ bool g_sigusr2_raised = false;
415
+
416
+ void SigUsr2Handler(int, siginfo_t*, void* uc) {
417
+ // Many platforms don't support this by default.
418
+ bool support_is_expected = false;
419
+ constexpr int kMaxStackDepth = 64;
420
+ void* result[kMaxStackDepth];
421
+ int depth =
422
+ absl::GetStackTraceWithContext(result, kMaxStackDepth, 0, uc, nullptr);
423
+ // Verify we can unwind past the nested signal handlers.
424
+ if (support_is_expected) {
425
+ EXPECT_THAT(absl::MakeSpan(result, static_cast<size_t>(depth)),
426
+ Contains(g_return_address).Times(1));
427
+ }
428
+ depth = absl::GetStackTrace(result, kMaxStackDepth, 0);
429
+ if (support_is_expected) {
430
+ EXPECT_THAT(absl::MakeSpan(result, static_cast<size_t>(depth)),
431
+ Contains(g_return_address).Times(1));
432
+ }
433
+ g_sigusr2_raised = true;
434
+ }
435
+
436
+ void SigUsr1Handler(int, siginfo_t*, void*) {
437
+ raise(SIGUSR2);
438
+ ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
439
+ }
440
+
441
+ ABSL_ATTRIBUTE_NOINLINE void RaiseSignal() {
442
+ g_return_address = __builtin_return_address(0);
443
+ raise(SIGUSR1);
444
+ ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
445
+ }
446
+
447
+ ABSL_ATTRIBUTE_NOINLINE void TestNestedSignal() {
448
+ constexpr size_t kAltstackSize = 1 << 14;
449
+ // Allocate altstack on regular stack to make sure it'll have a higher
450
+ // address than some of the regular stack frames.
451
+ char space[kAltstackSize];
452
+ stack_t altstack;
453
+ stack_t old_stack;
454
+ altstack.ss_sp = space;
455
+ altstack.ss_size = kAltstackSize;
456
+ altstack.ss_flags = 0;
457
+ ASSERT_EQ(sigaltstack(&altstack, &old_stack), 0) << strerror(errno);
458
+ struct sigaction act;
459
+ struct sigaction oldusr1act;
460
+ struct sigaction oldusr2act;
461
+ act.sa_sigaction = SigUsr1Handler;
462
+ act.sa_flags = SA_SIGINFO | SA_ONSTACK;
463
+ sigemptyset(&act.sa_mask);
464
+ ASSERT_EQ(sigaction(SIGUSR1, &act, &oldusr1act), 0) << strerror(errno);
465
+ act.sa_sigaction = SigUsr2Handler;
466
+ ASSERT_EQ(sigaction(SIGUSR2, &act, &oldusr2act), 0) << strerror(errno);
467
+ RaiseSignal();
468
+ ASSERT_EQ(sigaltstack(&old_stack, nullptr), 0) << strerror(errno);
469
+ ASSERT_EQ(sigaction(SIGUSR1, &oldusr1act, nullptr), 0) << strerror(errno);
470
+ ASSERT_EQ(sigaction(SIGUSR2, &oldusr2act, nullptr), 0) << strerror(errno);
471
+ ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
472
+ }
473
+
474
+ TEST(StackTrace, NestedSignal) {
475
+ // Verify we can unwind past the nested signal handlers.
476
+ TestNestedSignal();
477
+ EXPECT_TRUE(g_sigusr2_raised);
478
+ }
479
+ #endif
480
+
47
481
  } // namespace