chromium/third_party/sentencepiece/patches/0007-SentencePiece-introduce-no-exceptions-mode.patch

From f056d5f4cc818a6b9da93e93b5d47cdd7cfb5ca5 Mon Sep 17 00:00:00 2001
From: Piotr Bialecki <[email protected]>
Date: Tue, 10 Oct 2023 11:26:05 -0700
Subject: [PATCH] SentencePiece: introduce no-exceptions mode

---
 third_party/sentencepiece/src/src/util.cc     |  4 +++
 .../src/third_party/darts_clone/darts.h       | 35 +++++++++----------
 2 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/third_party/sentencepiece/src/src/util.cc b/third_party/sentencepiece/src/src/util.cc
index 322406cbc2782..c5e5289807a0c 100644
--- a/third_party/sentencepiece/src/src/util.cc
+++ b/third_party/sentencepiece/src/src/util.cc
@@ -32,11 +32,15 @@ void SetRandomGeneratorSeed(unsigned int seed) {
 }
 
 uint32 GetRandomGeneratorSeed() {
+#if !SENTENCEPIECE_DISABLE_EXCEPTIONS
   try {
+#endif
     return g_seed == kDefaultSeed ? std::random_device{}() : g_seed.load();
+#if !SENTENCEPIECE_DISABLE_EXCEPTIONS
   } catch (...) {
     return g_seed.load();
   }
+#endif
 }
 
 namespace logging {
diff --git a/third_party/sentencepiece/src/third_party/darts_clone/darts.h b/third_party/sentencepiece/src/third_party/darts_clone/darts.h
index f9b32b1ec615b..9b975545aece1 100644
--- a/third_party/sentencepiece/src/third_party/darts_clone/darts.h
+++ b/third_party/sentencepiece/src/third_party/darts_clone/darts.h
@@ -5,6 +5,10 @@
 #include <exception>
 #include <new>
 
+#if DARTS_DISABLE_EXCEPTIONS
+#include "absl/log/absl_check.h"
+#endif
+
 #define DARTS_VERSION "0.32"
 
 // DARTS_THROW() throws a <Darts::Exception> whose message starts with the
@@ -15,9 +19,14 @@
 #define DARTS_INT_TO_STR(value) #value
 #define DARTS_LINE_TO_STR(line) DARTS_INT_TO_STR(line)
 #define DARTS_LINE_STR DARTS_LINE_TO_STR(__LINE__)
+
+#if DARTS_DISABLE_EXCEPTIONS
+#define DARTS_THROW(msg) ABSL_CHECK(false) << msg
+#else
 #define DARTS_THROW(msg)                                      \
   throw Darts::Details::Exception(__FILE__ ":" DARTS_LINE_STR \
                                            ": exception: " msg)
+#endif
 
 namespace Darts {
 
@@ -74,6 +83,7 @@ class DoubleArrayUnit {
   // Copyable.
 };
 
+#if !DARTS_DISABLE_EXCEPTIONS
 // Darts-clone throws an <Exception> for memory allocation failure, invalid
 // arguments or a too large offset. The last case means that there are too many
 // keys in the given set of keys. Note that the `msg' of <Exception> must be a
@@ -96,6 +106,7 @@ class Exception : public std::exception {
   // Disallows operator=.
   Exception& operator=(const Exception&);
 };
+#endif  // !DARTS_DISABLE_EXCEPTIONS
 
 }  // namespace Details
 
@@ -373,15 +384,9 @@ int DoubleArrayImpl<A, B, T, C>::open(const char* file_name,
     }
   }
 
-  unit_type* buf;
-  try {
-    buf = new unit_type[size];
-    for (id_type i = 0; i < 256; ++i) {
-      buf[i] = units[i];
-    }
-  } catch (const std::bad_alloc&) {
-    std::fclose(file);
-    DARTS_THROW("failed to open double-array: std::bad_alloc");
+  unit_type* buf = new unit_type[size];
+  for (id_type i = 0; i < 256; ++i) {
+    buf[i] = units[i];
   }
 
   if (size > 256) {
@@ -688,11 +693,7 @@ void AutoPool<T>::resize_buf(std::size_t size) {
   }
 
   AutoArray<char> buf;
-  try {
-    buf.reset(new char[sizeof(T) * capacity]);
-  } catch (const std::bad_alloc&) {
-    DARTS_THROW("failed to resize pool: std::bad_alloc");
-  }
+  buf.reset(new char[sizeof(T) * capacity]);
 
   if (size_ > 0) {
     T* src = reinterpret_cast<T*>(&buf_[0]);
@@ -804,11 +805,7 @@ class BitVector {
 };
 
 inline void BitVector::build() {
-  try {
-    ranks_.reset(new id_type[units_.size()]);
-  } catch (const std::bad_alloc&) {
-    DARTS_THROW("failed to build rank index: std::bad_alloc");
-  }
+  ranks_.reset(new id_type[units_.size()]);
 
   num_ones_ = 0;
   for (std::size_t i = 0; i < units_.size(); ++i) {
-- 
2.42.0.609.gbb76f46606-goog