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
@@ -142,6 +142,10 @@ static int UnwindImpl(void **result, uintptr_t *frames, int *sizes,
142
142
  void *return_address = nullptr;
143
143
  while (frame_pointer && n < max_depth) {
144
144
  return_address = frame_pointer[-1];
145
+ // Follow x86 and stop if the return address is null (end of stack).
146
+ if (return_address == nullptr) {
147
+ break;
148
+ }
145
149
 
146
150
  // The absl::GetStackFrames routine is called when we are in some
147
151
  // informational context (the failure signal handler for example). Use the
@@ -22,6 +22,7 @@
22
22
 
23
23
  #include <cstddef>
24
24
  #include <cstdint>
25
+ #include <memory>
25
26
 
26
27
  #include "absl/base/config.h"
27
28
  #include "absl/strings/string_view.h"
@@ -35,7 +36,6 @@
35
36
  #include <elf.h>
36
37
  #include <link.h> // For ElfW() macro.
37
38
  #include <functional>
38
- #include <string>
39
39
 
40
40
  namespace absl {
41
41
  ABSL_NAMESPACE_BEGIN
@@ -78,44 +78,54 @@ namespace absl {
78
78
  ABSL_NAMESPACE_BEGIN
79
79
  namespace debugging_internal {
80
80
 
81
- struct SymbolDecoratorArgs {
82
- // The program counter we are getting symbolic name for.
83
- const void *pc;
84
- // 0 for main executable, load address for shared libraries.
85
- ptrdiff_t relocation;
86
- // Read-only file descriptor for ELF image covering "pc",
87
- // or -1 if no such ELF image exists in /proc/self/maps.
88
- int fd;
89
- // Output buffer, size.
90
- // Note: the buffer may not be empty -- default symbolizer may have already
91
- // produced some output, and earlier decorators may have adorned it in
92
- // some way. You are free to replace or augment the contents (within the
93
- // symbol_buf_size limit).
94
- char *const symbol_buf;
95
- size_t symbol_buf_size;
96
- // Temporary scratch space, size.
97
- // Use that space in preference to allocating your own stack buffer to
98
- // conserve stack.
99
- char *const tmp_buf;
100
- size_t tmp_buf_size;
101
- // User-provided argument
102
- void* arg;
103
- };
104
- using SymbolDecorator = void (*)(const SymbolDecoratorArgs *);
81
+ class SymbolDecorator;
105
82
 
106
- // Installs a function-pointer as a decorator. Returns a value less than zero
107
- // if the system cannot install the decorator. Otherwise, returns a unique
108
- // identifier corresponding to the decorator. This identifier can be used to
109
- // uninstall the decorator - See RemoveSymbolDecorator() below.
110
- int InstallSymbolDecorator(SymbolDecorator decorator, void* arg);
83
+ class SymbolDecoratorDeleter {
84
+ public:
85
+ void operator()(SymbolDecorator* ptr);
86
+ };
111
87
 
112
- // Removes a previously installed function-pointer decorator. Parameter "ticket"
113
- // is the return-value from calling InstallSymbolDecorator().
114
- bool RemoveSymbolDecorator(int ticket);
88
+ using SymbolDecoratorPtr =
89
+ std::unique_ptr<SymbolDecorator, SymbolDecoratorDeleter>;
90
+
91
+ // Represents an object that can add additional information to a symbol
92
+ // name.
93
+ class SymbolDecorator {
94
+ public:
95
+ // The signature of a factory function used to register and create a symbol
96
+ // decorator. This function may be called from a signal handler, so it must
97
+ // use an async-signal-safe allocation mechanism to allocate the returned
98
+ // object.
99
+ using Factory = SymbolDecoratorPtr(int fd);
100
+
101
+ virtual ~SymbolDecorator() = default;
102
+
103
+ // Decorates symbol name with additional information.
104
+ //
105
+ // pc represents the program counter we are getting symbolic name for.
106
+ // relocation is difference between the link-time and the load-time address.
107
+ // symbol_buf and symbol_buf_size represent the output buffer and its size.
108
+ // Note that the buffer may not be empty -- default symbolizer may have
109
+ // already produced some output. You are free to replace or augment the
110
+ // contents (within the symbol_buf_size limit). tmp_buf and tmp_buf_size
111
+ // represent temporary scratch space and its size. Use that space in
112
+ // preference to allocating your own stack buffer to conserve stack.
113
+ //
114
+ // This function will not be called concurrently for the same object, but it
115
+ // may be called from a signal handler, so it must avoid any operation that is
116
+ // not async-signal-safe. However, it does not have to be reentrant -- if it
117
+ // is interrupted by a signal and the handler tries to symbolize, the request
118
+ // will go to a new SymbolDecorator instance.
119
+ virtual void Decorate(
120
+ const void* pc,
121
+ ptrdiff_t relocation,
122
+ char* symbol_buf, size_t symbol_buf_size,
123
+ char* tmp_buf, size_t tmp_buf_size) const = 0;
124
+ };
115
125
 
116
- // Remove all installed decorators. Returns true if successful, false if
117
- // symbolization is currently in progress.
118
- bool RemoveAllSymbolDecorators();
126
+ // Registers a new symbol decorator factory and returns the previous one.
127
+ SymbolDecorator::Factory* SetSymbolDecoratorFactory(
128
+ SymbolDecorator::Factory* factory);
119
129
 
120
130
  // Registers an address range to a file mapping.
121
131
  //
@@ -47,7 +47,6 @@
47
47
  #include "absl/base/config.h"
48
48
  #include "absl/base/optimization.h"
49
49
  #include "absl/base/port.h"
50
- #include "absl/debugging/internal/borrowed_fixup_buffer.h"
51
50
  #include "absl/debugging/internal/stacktrace_config.h"
52
51
 
53
52
  #if defined(ABSL_STACKTRACE_INL_HEADER)
@@ -92,19 +91,6 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
92
91
  }
93
92
  #endif
94
93
 
95
- // Some implementations of FixUpStack may need to be passed frame
96
- // information from Unwind, even if the caller doesn't need that
97
- // information. We allocate the necessary buffers for such implementations
98
- // here.
99
- const internal_stacktrace::BorrowedFixupBuffer fixup_buffer(
100
- unwind_with_fixup ? max_depth : 0);
101
- if (frames == nullptr) {
102
- frames = fixup_buffer.frames();
103
- }
104
- if (sizes == nullptr) {
105
- sizes = fixup_buffer.sizes();
106
- }
107
-
108
94
  Unwinder g = custom.load(std::memory_order_acquire);
109
95
  size_t size;
110
96
  // Add 1 to skip count for the unwinder function itself
@@ -117,14 +103,9 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
117
103
  std::fill(frames, frames + size, uintptr_t());
118
104
  }
119
105
  } else {
120
- size = static_cast<size_t>(
121
- unwind_with_fixup
122
- ? UnwindImpl<true, IS_WITH_CONTEXT>(
123
- result, frames, sizes, static_cast<int>(max_depth),
124
- skip_count, uc, min_dropped_frames)
125
- : UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>(
126
- result, frames, sizes, static_cast<int>(max_depth),
127
- skip_count, uc, min_dropped_frames));
106
+ size = static_cast<size_t>(UnwindImpl<IS_STACK_FRAMES, IS_WITH_CONTEXT>(
107
+ result, frames, sizes, static_cast<int>(max_depth), skip_count, uc,
108
+ min_dropped_frames));
128
109
  }
129
110
  if (unwind_with_fixup) {
130
111
  internal_stacktrace::FixUpStack(result, frames, sizes, max_depth, size);
@@ -136,24 +117,13 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int Unwind(void** result, uintptr_t* frames,
136
117
 
137
118
  } // anonymous namespace
138
119
 
139
- ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
140
- internal_stacktrace::GetStackFrames(void** result, uintptr_t* frames,
141
- int* sizes, int max_depth, int skip_count) {
142
- return Unwind<true, false>(result, frames, sizes,
120
+ ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackFrames(
121
+ void** result, int* sizes, int max_depth, int skip_count) {
122
+ return Unwind<true, false>(result, nullptr, sizes,
143
123
  static_cast<size_t>(max_depth), skip_count,
144
124
  nullptr, nullptr);
145
125
  }
146
126
 
147
- ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
148
- internal_stacktrace::GetStackFramesWithContext(void** result, uintptr_t* frames,
149
- int* sizes, int max_depth,
150
- int skip_count, const void* uc,
151
- int* min_dropped_frames) {
152
- return Unwind<true, true>(result, frames, sizes,
153
- static_cast<size_t>(max_depth), skip_count, uc,
154
- min_dropped_frames);
155
- }
156
-
157
127
  ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
158
128
  internal_stacktrace::GetStackTraceNoFixup(void** result, int max_depth,
159
129
  int skip_count) {
@@ -162,6 +132,15 @@ internal_stacktrace::GetStackTraceNoFixup(void** result, int max_depth,
162
132
  nullptr, nullptr, /*unwind_with_fixup=*/false);
163
133
  }
164
134
 
135
+ ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
136
+ GetStackFramesWithContext(void** result, int* sizes, int max_depth,
137
+ int skip_count, const void* uc,
138
+ int* min_dropped_frames) {
139
+ return Unwind<true, true>(result, nullptr, sizes,
140
+ static_cast<size_t>(max_depth), skip_count, uc,
141
+ min_dropped_frames);
142
+ }
143
+
165
144
  ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int GetStackTrace(
166
145
  void** result, int max_depth, int skip_count) {
167
146
  return Unwind<false, false>(result, nullptr, nullptr,
@@ -181,9 +160,8 @@ void SetStackUnwinder(Unwinder w) {
181
160
  custom.store(w, std::memory_order_release);
182
161
  }
183
162
 
184
- ABSL_ATTRIBUTE_ALWAYS_INLINE static inline int DefaultStackUnwinderImpl(
185
- void** pcs, uintptr_t* frames, int* sizes, int depth, int skip,
186
- const void* uc, int* min_dropped_frames) {
163
+ int DefaultStackUnwinder(void** pcs, int* sizes, int depth, int skip,
164
+ const void* uc, int* min_dropped_frames) {
187
165
  skip++; // For this function
188
166
  decltype(&UnwindImpl<false, false>) f;
189
167
  if (sizes == nullptr) {
@@ -199,25 +177,7 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE static inline int DefaultStackUnwinderImpl(
199
177
  f = &UnwindImpl<true, true>;
200
178
  }
201
179
  }
202
- return (*f)(pcs, frames, sizes, depth, skip, uc, min_dropped_frames);
203
- }
204
-
205
- ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int
206
- internal_stacktrace::DefaultStackUnwinder(void** pcs, uintptr_t* frames,
207
- int* sizes, int depth, int skip,
208
- const void* uc,
209
- int* min_dropped_frames) {
210
- int n = DefaultStackUnwinderImpl(pcs, frames, sizes, depth, skip, uc,
211
- min_dropped_frames);
212
- ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
213
- return n;
214
- }
215
-
216
- ABSL_ATTRIBUTE_NOINLINE ABSL_ATTRIBUTE_NO_TAIL_CALL int DefaultStackUnwinder(
217
- void** pcs, int* sizes, int depth, int skip, const void* uc,
218
- int* min_dropped_frames) {
219
- int n = DefaultStackUnwinderImpl(pcs, nullptr, sizes, depth, skip, uc,
220
- min_dropped_frames);
180
+ int n = (*f)(pcs, nullptr, sizes, depth, skip, uc, min_dropped_frames);
221
181
  ABSL_BLOCK_TAIL_CALL_OPTIMIZATION();
222
182
  return n;
223
183
  }
@@ -34,7 +34,6 @@
34
34
  #include <stddef.h>
35
35
  #include <stdint.h>
36
36
 
37
- #include "absl/base/attributes.h"
38
37
  #include "absl/base/config.h"
39
38
 
40
39
  namespace absl {
@@ -42,43 +41,9 @@ ABSL_NAMESPACE_BEGIN
42
41
 
43
42
  namespace internal_stacktrace {
44
43
 
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
44
  // As above, but skips fix-ups for efficiency.
73
45
  extern int GetStackTraceNoFixup(void** result, int max_depth, int skip_count);
74
46
 
75
- // Same as `absl::DefaultStackUnwinder`, but with an optional `frames` parameter
76
- // to allow callers to receive the raw stack frame addresses.
77
- // This is internal for now; do not depend on this externally.
78
- extern int DefaultStackUnwinder(void** pcs, uintptr_t* frames, int* sizes,
79
- int max_depth, int skip_count, const void* uc,
80
- int* min_dropped_frames);
81
-
82
47
  } // namespace internal_stacktrace
83
48
 
84
49
  // GetStackFrames()
@@ -123,13 +88,8 @@ extern int DefaultStackUnwinder(void** pcs, uintptr_t* frames, int* sizes,
123
88
  //
124
89
  // This routine may return fewer stack frame entries than are
125
90
  // available. Also note that `result` and `sizes` must both be non-null.
126
- ABSL_ATTRIBUTE_ALWAYS_INLINE inline int GetStackFrames(void** result,
127
- int* sizes,
128
- int max_depth,
129
- int skip_count) {
130
- return internal_stacktrace::GetStackFrames(result, nullptr, sizes, max_depth,
131
- skip_count);
132
- }
91
+ extern int GetStackFrames(void** result, int* sizes, int max_depth,
92
+ int skip_count);
133
93
 
134
94
  // GetStackFramesWithContext()
135
95
  //
@@ -152,12 +112,9 @@ ABSL_ATTRIBUTE_ALWAYS_INLINE inline int GetStackFrames(void** result,
152
112
  // or other reasons. (This value will be set to `0` if no frames were dropped.)
153
113
  // The number of total stack frames is guaranteed to be >= skip_count +
154
114
  // max_depth + *min_dropped_frames.
155
- ABSL_ATTRIBUTE_ALWAYS_INLINE inline int GetStackFramesWithContext(
156
- void** result, int* sizes, int max_depth, int skip_count, const void* uc,
157
- int* min_dropped_frames) {
158
- return internal_stacktrace::GetStackFramesWithContext(
159
- result, nullptr, sizes, max_depth, skip_count, uc, min_dropped_frames);
160
- }
115
+ extern int GetStackFramesWithContext(void** result, int* sizes, int max_depth,
116
+ int skip_count, const void* uc,
117
+ int* min_dropped_frames);
161
118
 
162
119
  // GetStackTrace()
163
120
  //
@@ -17,7 +17,6 @@
17
17
  #include <stddef.h>
18
18
  #include <stdint.h>
19
19
 
20
- #include <algorithm>
21
20
  #include <cerrno>
22
21
  #include <csignal>
23
22
  #include <cstring>
@@ -63,7 +62,6 @@ struct StackTrace {
63
62
  static constexpr int kStackCount = 64;
64
63
  int depth;
65
64
  void* result[kStackCount];
66
- uintptr_t frames[kStackCount];
67
65
  int sizes[kStackCount];
68
66
  };
69
67
 
@@ -193,48 +191,6 @@ ABSL_ATTRIBUTE_NOINLINE static void FixupNoFixupEquivalenceNoInline() {
193
191
  ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
194
192
  EXPECT_GT(g_should_fixup_calls, 0);
195
193
  EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
196
-
197
- // ==========================================================================
198
-
199
- g_fixup_calls = 0;
200
- g_should_fixup_calls = 0;
201
- a.depth = absl::internal_stacktrace::GetStackFrames(
202
- a.result, a.frames, a.sizes, kStackCount, kSkip);
203
- g_enable_fixup = !g_enable_fixup;
204
- b.depth = absl::internal_stacktrace::GetStackFrames(
205
- b.result, b.frames, b.sizes, kStackCount, kSkip);
206
- EXPECT_THAT(
207
- absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
208
- ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
209
- EXPECT_THAT(
210
- absl::MakeSpan(a.sizes, static_cast<size_t>(a.depth)),
211
- ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
212
- EXPECT_THAT(
213
- absl::MakeSpan(a.frames, static_cast<size_t>(a.depth)),
214
- ContainerEq(absl::MakeSpan(b.frames, static_cast<size_t>(b.depth))));
215
- EXPECT_GT(g_should_fixup_calls, 0);
216
- EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
217
-
218
- // ==========================================================================
219
-
220
- g_fixup_calls = 0;
221
- g_should_fixup_calls = 0;
222
- a.depth = absl::internal_stacktrace::GetStackFramesWithContext(
223
- a.result, a.frames, a.sizes, kStackCount, kSkip, nullptr, nullptr);
224
- g_enable_fixup = !g_enable_fixup;
225
- b.depth = absl::internal_stacktrace::GetStackFramesWithContext(
226
- b.result, b.frames, b.sizes, kStackCount, kSkip, nullptr, nullptr);
227
- EXPECT_THAT(
228
- absl::MakeSpan(a.result, static_cast<size_t>(a.depth)),
229
- ContainerEq(absl::MakeSpan(b.result, static_cast<size_t>(b.depth))));
230
- EXPECT_THAT(
231
- absl::MakeSpan(a.sizes, static_cast<size_t>(a.depth)),
232
- ContainerEq(absl::MakeSpan(b.sizes, static_cast<size_t>(b.depth))));
233
- EXPECT_THAT(
234
- absl::MakeSpan(a.frames, static_cast<size_t>(a.depth)),
235
- ContainerEq(absl::MakeSpan(b.frames, static_cast<size_t>(b.depth))));
236
- EXPECT_GT(g_should_fixup_calls, 0);
237
- EXPECT_GE(g_should_fixup_calls, g_fixup_calls);
238
194
  }
239
195
 
240
196
  TEST(StackTrace, FixupNoFixupEquivalence) { FixupNoFixupEquivalenceNoInline(); }
@@ -351,86 +307,6 @@ TEST(StackTrace, CustomUnwinderPerformsFixup) {
351
307
  EXPECT_GT(g_fixup_calls, 0);
352
308
  }
353
309
 
354
- #if ABSL_HAVE_BUILTIN(__builtin_frame_address)
355
- struct FrameInfo {
356
- const void* return_address;
357
- uintptr_t frame_address;
358
- };
359
-
360
- // Returns the canonical frame address and return address for the current stack
361
- // frame, while capturing the stack trace at the same time.
362
- // This performs any platform-specific adjustments necessary to convert from the
363
- // compiler built-ins to the expected API outputs.
364
- ABSL_ATTRIBUTE_NO_SANITIZE_ADDRESS // May read random elements from stack.
365
- ABSL_ATTRIBUTE_NO_SANITIZE_MEMORY // May read random elements from stack.
366
- ABSL_ATTRIBUTE_NOINLINE static FrameInfo
367
- CaptureBacktraceNoInline(StackTrace& backtrace) {
368
- FrameInfo result;
369
- result.return_address = __builtin_return_address(0);
370
- // Large enough to cover all realistic slots the return address could be in
371
- const int kMaxReturnAddressIndex = 5;
372
- void* const* bfa = static_cast<void* const*>(__builtin_frame_address(0));
373
- backtrace.depth = absl::internal_stacktrace::GetStackFramesWithContext(
374
- backtrace.result, backtrace.frames, backtrace.sizes,
375
- StackTrace::kStackCount, /*skip_count=*/0,
376
- /*uc=*/nullptr, /*min_dropped_frames=*/nullptr);
377
- // Make sure the return address is at a reasonable location in the frame
378
- ptrdiff_t i;
379
- for (i = 0; i < kMaxReturnAddressIndex; ++i) {
380
- // Avoid std::find() here, since it lacks no-sanitize attributes.
381
- if (bfa[i] == result.return_address) {
382
- break;
383
- }
384
- }
385
- result.frame_address =
386
- i < kMaxReturnAddressIndex
387
- ? reinterpret_cast<uintptr_t>(
388
- bfa + i + 1 /* get the Canonical Frame Address (CFA) */)
389
- : 0;
390
- return result;
391
- }
392
-
393
- TEST(StackTrace, CanonicalFrameAddresses) {
394
- // Now capture a stack trace and verify that the return addresses and frame
395
- // addresses line up for one frame.
396
- StackTrace backtrace;
397
- const auto [return_address, frame_address] =
398
- CaptureBacktraceNoInline(backtrace);
399
- auto return_addresses = absl::MakeSpan(backtrace.result)
400
- .subspan(0, static_cast<size_t>(backtrace.depth));
401
- auto frame_addresses = absl::MakeSpan(backtrace.frames)
402
- .subspan(0, static_cast<size_t>(backtrace.depth));
403
-
404
- // Many platforms don't support this by default.
405
- bool support_is_expected = false;
406
-
407
- if (support_is_expected) {
408
- // If all zeros were returned, that is valid per the function's contract.
409
- // It just means we don't support returning frame addresses on this
410
- // platform.
411
- bool supported = static_cast<size_t>(std::count(frame_addresses.begin(),
412
- frame_addresses.end(), 0)) <
413
- frame_addresses.size();
414
- EXPECT_TRUE(supported);
415
- if (supported) {
416
- ASSERT_TRUE(frame_address)
417
- << "unable to obtain frame address corresponding to return address";
418
- EXPECT_THAT(return_addresses, Contains(return_address).Times(1));
419
- EXPECT_THAT(frame_addresses, Contains(frame_address).Times(1));
420
- ptrdiff_t ifound = std::find(return_addresses.begin(),
421
- return_addresses.end(), return_address) -
422
- return_addresses.begin();
423
- // Make sure we found the frame in the first place.
424
- ASSERT_LT(ifound, backtrace.depth);
425
- // Make sure the frame address actually corresponds to the return
426
- // address.
427
- EXPECT_EQ(frame_addresses[static_cast<size_t>(ifound)], frame_address);
428
- // Make sure the addresses only appear once.
429
- }
430
- }
431
- }
432
- #endif
433
-
434
310
  // This test is Linux specific.
435
311
  #if defined(__linux__)
436
312
  const void* g_return_address = nullptr;
@@ -502,4 +378,14 @@ TEST(StackTrace, NestedSignal) {
502
378
  }
503
379
  #endif
504
380
 
381
+ TEST(StackTrace, NoNullptrInPopulatedRange) {
382
+ constexpr int kMaxDepth = 1024;
383
+ void* results[kMaxDepth];
384
+ int depth = absl::GetStackTrace(results, kMaxDepth, 0);
385
+ for (int i = 0; i < depth; ++i) {
386
+ EXPECT_NE(results[i], nullptr) << "Unexpected nullptr found at index " << i;
387
+ }
388
+ }
389
+
390
+
505
391
  } // namespace
@@ -12,10 +12,12 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- // SKIP_ABSL_INLINE_NAMESPACE_CHECK
16
-
17
15
  #include "absl/debugging/symbolize.h"
18
16
 
17
+ #include "absl/base/config.h"
18
+ #include "absl/base/internal/low_level_alloc.h"
19
+ #include "absl/debugging/internal/symbolize.h"
20
+
19
21
  #ifdef _WIN32
20
22
  #include <winapifamily.h>
21
23
  #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
@@ -42,3 +44,19 @@
42
44
  #else
43
45
  #include "absl/debugging/symbolize_unimplemented.inc"
44
46
  #endif
47
+
48
+
49
+ namespace absl {
50
+ ABSL_NAMESPACE_BEGIN
51
+
52
+ namespace debugging_internal {
53
+
54
+ void SymbolDecoratorDeleter::operator()(SymbolDecorator* ptr) {
55
+ ptr->~SymbolDecorator();
56
+ base_internal::LowLevelAlloc::Free(ptr);
57
+ }
58
+
59
+ } // namespace debugging_internal
60
+
61
+ ABSL_NAMESPACE_END
62
+ } // namespace absl