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