Fix bazel test -c opt ...:all

Move all side-effectful operations outside of EMBOSS_CHECK and related macros.

Add EMBOSS_CHECK_ABORTS and EMBOSS_DCHECK_ABORTS macros, so that tests can enable/disable EXPECT_DEATH.
diff --git a/compiler/back_end/cpp/generated_code_templates b/compiler/back_end/cpp/generated_code_templates
index 57c2b9c..91e1a4c 100644
--- a/compiler/back_end/cpp/generated_code_templates
+++ b/compiler/back_end/cpp/generated_code_templates
@@ -636,7 +636,9 @@
           emboss_reserved_local_maybe_new_value.ValueOrDefault());
     }
     void Write($_logical_type_$ emboss_reserved_local_value) {
-      EMBOSS_CHECK(TryToWrite(emboss_reserved_local_value));
+      const bool result = TryToWrite(emboss_reserved_local_value);
+      (void)result;
+      EMBOSS_CHECK(result);
     }
     void UncheckedWrite($_logical_type_$ emboss_reserved_local_value) {
       view_.$_destination_$.UncheckedWrite(($_transform_$).ValueOrDefault());
diff --git a/compiler/back_end/cpp/testcode/auto_array_size_test.cc b/compiler/back_end/cpp/testcode/auto_array_size_test.cc
index b220649..8e03d40 100644
--- a/compiler/back_end/cpp/testcode/auto_array_size_test.cc
+++ b/compiler/back_end/cpp/testcode/auto_array_size_test.cc
@@ -205,7 +205,9 @@
   EXPECT_EQ(0x30U, view.four_byte_array()[2].Read());
   EXPECT_EQ(0x40U, view.four_byte_array()[3].Read());
   EXPECT_EQ(4U, view.four_byte_array().SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.four_byte_array()[4].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0x11U, view.four_struct_array()[0].a().Read());
   EXPECT_EQ(0x12U, view.four_struct_array()[0].b().Read());
   EXPECT_EQ(0x21U, view.four_struct_array()[1].a().Read());
@@ -215,7 +217,9 @@
   EXPECT_EQ(0x41U, view.four_struct_array()[3].a().Read());
   EXPECT_EQ(0x42U, view.four_struct_array()[3].b().Read());
   EXPECT_EQ(8U, view.four_struct_array().SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.four_struct_array()[4].a().Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0x50U, view.dynamic_byte_array()[0].Read());
   EXPECT_EQ(0x60U, view.dynamic_byte_array()[1].Read());
   EXPECT_EQ(0x70U, view.dynamic_byte_array()[2].Read());
@@ -236,14 +240,18 @@
   auto writer = MakeAutoSizeView(&buffer);
   writer.array_size().Write(0);
   EXPECT_EQ(13U, writer.SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(writer.dynamic_byte_array()[0].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   writer.array_size().Write(3);
   EXPECT_EQ(22U, writer.SizeInBytes());
   writer.four_byte_array()[0].Write(0x10);
   writer.four_byte_array()[1].Write(0x20);
   writer.four_byte_array()[2].Write(0x30);
   writer.four_byte_array()[3].Write(0x40);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(writer.four_byte_array()[4].Write(0), "");
+#endif  // EMBOSS_CHECK_ABORTS
   writer.four_struct_array()[0].a().Write(0x11);
   writer.four_struct_array()[0].b().Write(0x12);
   writer.four_struct_array()[1].a().Write(0x21);
diff --git a/compiler/back_end/cpp/testcode/bcd_test.cc b/compiler/back_end/cpp/testcode/bcd_test.cc
index da51e8e..fa3cc13 100644
--- a/compiler/back_end/cpp/testcode/bcd_test.cc
+++ b/compiler/back_end/cpp/testcode/bcd_test.cc
@@ -95,9 +95,11 @@
   EXPECT_EQ(::std::vector</**/ ::std::uint8_t>(kBcd, kBcd + sizeof kBcd),
             ::std::vector</**/ ::std::uint8_t>(buffer, buffer + sizeof buffer));
 
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(writer.one_byte().Write(100), "");
   EXPECT_DEATH(writer.three_byte().Write(1445566), "");
   EXPECT_DEATH(writer.ten_bit().Write(400), "");
+#endif  // EMBOSS_CHECK_ABORTS
 }
 
 TEST(BcdSizesView, OkIsTrueForGoodBcd) {
@@ -146,6 +148,7 @@
   view.twelve_bit().UncheckedRead();
 }
 
+#if EMBOSS_CHECK_ABORTS
 TEST(BcdSizesView, ReadingInvalidBcdCrashes) {
   auto view = BcdSizesView(kBadBcd, sizeof kBadBcd);
   EXPECT_DEATH(view.one_byte().Read(), "");
@@ -161,6 +164,7 @@
   EXPECT_DEATH(view.ten_bit().Read(), "");
   EXPECT_DEATH(view.twelve_bit().Read(), "");
 }
+#endif  // EMBOSS_CHECK_ABORTS
 
 TEST(BcdSizesView, OkIsFalseForBadBcd) {
   auto view = BcdSizesView(kBadBcd, sizeof kBadBcd);
@@ -270,30 +274,40 @@
   auto y = BcdSizesView(&buf_y);
 
   EXPECT_TRUE(x.UncheckedEquals(x));
-  EXPECT_DEATH(x.Equals(x), "");
   EXPECT_TRUE(y.UncheckedEquals(y));
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(x.Equals(x), "");
   EXPECT_DEATH(y.Equals(y), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   EXPECT_TRUE(x.UncheckedEquals(y));
-  EXPECT_DEATH(x.Equals(y), "");
   EXPECT_TRUE(y.UncheckedEquals(x));
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(x.Equals(y), "");
   EXPECT_DEATH(y.Equals(x), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   EXPECT_TRUE(x_const.UncheckedEquals(y));
-  EXPECT_DEATH(x_const.Equals(y), "");
   EXPECT_TRUE(y.UncheckedEquals(x_const));
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(x_const.Equals(y), "");
   EXPECT_DEATH(y.Equals(x_const), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   ++buf_y[1];
   EXPECT_FALSE(x.UncheckedEquals(y));
-  EXPECT_DEATH(x.Equals(y), "");
   EXPECT_FALSE(y.UncheckedEquals(x));
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(x.Equals(y), "");
   EXPECT_DEATH(y.Equals(x), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   EXPECT_FALSE(x_const.UncheckedEquals(y));
-  EXPECT_DEATH(x_const.Equals(y), "");
   EXPECT_FALSE(y.UncheckedEquals(x_const));
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(x_const.Equals(y), "");
   EXPECT_DEATH(y.Equals(x_const), "");
+#endif  // EMBOSS_CHECK_ABORTS
 }
 
 }  // namespace
diff --git a/compiler/back_end/cpp/testcode/bits_test.cc b/compiler/back_end/cpp/testcode/bits_test.cc
index 28e6397..d7591ea 100644
--- a/compiler/back_end/cpp/testcode/bits_test.cc
+++ b/compiler/back_end/cpp/testcode/bits_test.cc
@@ -65,7 +65,9 @@
   struct_of_bits.four_byte().low_nibble().Write(115);
   EXPECT_EQ(0xff, data[3]);
   // Out-of-[range] write.
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(struct_of_bits.four_byte().low_nibble().Write(100), "");
+#endif  // EMBOSS_CHECK_ABORTS
 }
 
 TEST(Bits, StructOfBitsFromText) {
diff --git a/compiler/back_end/cpp/testcode/condition_test.cc b/compiler/back_end/cpp/testcode/condition_test.cc
index 2615dc3..029abae 100644
--- a/compiler/back_end/cpp/testcode/condition_test.cc
+++ b/compiler/back_end/cpp/testcode/condition_test.cc
@@ -61,6 +61,7 @@
   EXPECT_FALSE(writer.xc().Ok());
 }
 
+#if EMBOSS_CHECK_ABORTS
 TEST(Conditional, BasicConditionFalseReadCrashes) {
   ::std::uint8_t buffer[2] = {1, 2};
   auto writer = BasicConditionalWriter(buffer, sizeof buffer);
@@ -72,6 +73,7 @@
   auto writer = BasicConditionalWriter(buffer, sizeof buffer);
   EXPECT_DEATH(writer.xc().Write(3), "");
 }
+#endif  // EMBOSS_CHECK_ABORTS
 
 TEST(Conditional, BasicConditionTrueSizeIncludesConditionalField) {
   ::std::uint8_t buffer[2] = {0, 2};
@@ -150,7 +152,9 @@
 TEST(Conditional, NegativeConditionFalseReadCrashes) {
   ::std::uint8_t buffer1[2] = {0, 2};
   auto writer1 = NegativeConditionalWriter(buffer1, sizeof buffer1);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(writer1.xc().Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   ::std::uint8_t buffer2[2] = {0, 0};
   auto writer2 = BasicConditionalWriter(buffer2, sizeof buffer2);
@@ -163,7 +167,9 @@
 TEST(Conditional, NegativeConditionFalseWriteCrashes) {
   ::std::uint8_t buffer1[2] = {0, 2};
   auto writer1 = NegativeConditionalWriter(buffer1, sizeof buffer1);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(writer1.xc().Write(3), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   ::std::uint8_t buffer2[2] = {0, 2};
   auto writer2 = NegativeConditionalWriter(buffer2, sizeof buffer2);
diff --git a/compiler/back_end/cpp/testcode/dynamic_size_test.cc b/compiler/back_end/cpp/testcode/dynamic_size_test.cc
index 7147212..a1d5ebf 100644
--- a/compiler/back_end/cpp/testcode/dynamic_size_test.cc
+++ b/compiler/back_end/cpp/testcode/dynamic_size_test.cc
@@ -50,7 +50,9 @@
   EXPECT_EQ(5U, view.message()[4].Read());
   EXPECT_EQ(6U, view.message()[5].Read());
   EXPECT_EQ(6U, view.message().SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.message()[6].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0x0a090807U, view.crc32().Read());
 }
 
@@ -58,7 +60,9 @@
 TEST(MessageView, PaddingFieldWorks) {
   auto view = MessageView(&kMessage);
   EXPECT_EQ(0U, view.padding().SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.padding()[0].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
 }
 
 static constexpr ::std::array</**/ ::std::uint8_t, 16> kPaddedMessage = {{
@@ -80,13 +84,17 @@
   EXPECT_EQ(3U, view.padding()[2].Read());
   EXPECT_EQ(4U, view.padding()[3].Read());
   EXPECT_EQ(4U, view.padding().SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.padding()[4].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(5U, view.message()[0].Read());
   EXPECT_EQ(6U, view.message()[1].Read());
   EXPECT_EQ(7U, view.message()[2].Read());
   EXPECT_EQ(8U, view.message()[3].Read());
   EXPECT_EQ(4U, view.message().SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.message()[4].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0x0c0b0a09U, view.crc32().Read());
 }
 
@@ -103,8 +111,10 @@
     writer.message()[i].Write(i + 1);
   }
   EXPECT_EQ(12U, writer.SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(writer.message()[writer.message_length().Read()].Read(), "");
   EXPECT_DEATH(writer.padding()[0].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   writer.crc32().Write(0x0a090807);
   EXPECT_EQ(
       ::std::vector</**/ ::std::uint8_t>(kMessage.begin(), kMessage.end()),
diff --git a/compiler/back_end/cpp/testcode/enum_test.cc b/compiler/back_end/cpp/testcode/enum_test.cc
index 7b5ca4d..4f9f1e4 100644
--- a/compiler/back_end/cpp/testcode/enum_test.cc
+++ b/compiler/back_end/cpp/testcode/enum_test.cc
@@ -126,7 +126,9 @@
                 kManifestEntry, kManifestEntry + sizeof kManifestEntry),
             ::std::vector</**/ ::std::uint8_t>(buffer, buffer + sizeof buffer));
 
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(writer.kind().Write(Kind::LARGE_VALUE), "");
+#endif  // EMBOSS_CHECK_ABORTS
   writer.kind().Write(static_cast<Kind>(0xff));
   EXPECT_EQ(static_cast<Kind>(0xff), writer.kind().Read());
   EXPECT_EQ(0xff, buffer[0]);
diff --git a/compiler/back_end/cpp/testcode/requires_test.cc b/compiler/back_end/cpp/testcode/requires_test.cc
index 66fbe7f..661fe6a 100644
--- a/compiler/back_end/cpp/testcode/requires_test.cc
+++ b/compiler/back_end/cpp/testcode/requires_test.cc
@@ -118,7 +118,9 @@
   EXPECT_TRUE(view.must_be_false().CouldWriteValue(false));
   EXPECT_TRUE(view.alias_of_a_must_be_true().CouldWriteValue(true));
   EXPECT_FALSE(view.alias_of_a_must_be_true().CouldWriteValue(false));
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.alias_of_a_must_be_true().Write(false), "");
+#endif  // EMBOSS_CHECK_ABORTS
 }
 
 TEST(RequiresEnums, Ok) {
diff --git a/compiler/back_end/cpp/testcode/virtual_field_test.cc b/compiler/back_end/cpp/testcode/virtual_field_test.cc
index 1c5de41..fbedf6a 100644
--- a/compiler/back_end/cpp/testcode/virtual_field_test.cc
+++ b/compiler/back_end/cpp/testcode/virtual_field_test.cc
@@ -90,12 +90,14 @@
   EXPECT_EQ(-250, view.product().Read());
 }
 
+#if EMBOSS_CHECK_ABORTS
 TEST(Computed, ReadFailsWhenUnderlyingFieldIsNotOk) {
   ::std::array<char, 0> values = {};
   const auto view = MakeStructureWithComputedValuesView(&values);
   EXPECT_DEATH(view.value().Read(), "");
   EXPECT_DEATH(view.doubled().Read(), "");
 }
+#endif  // EMBOSS_CHECK_ABORTS
 
 // Check the return types of nonstatic Read methods.
 static_assert(
@@ -189,7 +191,9 @@
   EXPECT_EQ(6, view.x_plus_one().UncheckedRead());
   view.x().Write(0x80000000U);
   EXPECT_FALSE(view.has_two_x().Value());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.two_x().Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_TRUE(view.has_x_plus_one().Value());
   EXPECT_EQ(0x80000001U, view.x_plus_one().Read());
 }
@@ -199,7 +203,9 @@
   const auto view = MakeStructureWithConditionalValueView(&values[0], 1);
   EXPECT_FALSE(view.Ok());
   EXPECT_FALSE(view.x().Ok());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(view.two_x().Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0, view.two_x().UncheckedRead());
 }
 
diff --git a/runtime/cpp/emboss_defines.h b/runtime/cpp/emboss_defines.h
index 31a1b38..5677874 100644
--- a/runtime/cpp/emboss_defines.h
+++ b/runtime/cpp/emboss_defines.h
@@ -68,8 +68,13 @@
 // translation units MUST be built with the same value of NDEBUG!)
 #if !defined(EMBOSS_CHECK)
 #define EMBOSS_CHECK(x) assert((x))
+#define EMBOSS_CHECK_ABORTS (!(NDEBUG))
 #endif  // !defined(EMBOSS_CHECK)
 
+#if !defined(EMBOSS_CHECK_ABORTS)
+#error "Custom EMBOSS_CHECK without EMBOSS_CHECK_ABORTS."
+#endif  // !defined(EMBOSS_CHECK_ABORTS)
+
 #if !defined(EMBOSS_CHECK_LE)
 #define EMBOSS_CHECK_LE(x, y) EMBOSS_CHECK((x) <= (y))
 #endif  // !defined(EMBOSS_CHECK_LE)
@@ -101,8 +106,13 @@
 // disable EMBOSS_DCHECK in situations where you do not disable EMBOSS_CHECK.
 #if !defined(EMBOSS_DCHECK)
 #define EMBOSS_DCHECK(x) assert((x))
+#define EMBOSS_DCHECK_ABORTS (!(NDEBUG))
 #endif  // !defined(EMBOSS_DCHECK)
 
+#if !defined(EMBOSS_DCHECK_ABORTS)
+#error "Custom EMBOSS_DCHECK without EMBOSS_DCHECK_ABORTS."
+#endif  // !defined(EMBOSS_DCHECK_ABORTS)
+
 #if !defined(EMBOSS_DCHECK_LE)
 #define EMBOSS_DCHECK_LE(x, y) EMBOSS_DCHECK((x) <= (y))
 #endif  // !defined(EMBOSS_DCHECK_LE)
diff --git a/runtime/cpp/emboss_enum_view.h b/runtime/cpp/emboss_enum_view.h
index 78dcded..f59cd6d 100644
--- a/runtime/cpp/emboss_enum_view.h
+++ b/runtime/cpp/emboss_enum_view.h
@@ -54,7 +54,11 @@
   ValueType UncheckedRead() const {
     return static_cast<ValueType>(buffer_.UncheckedReadUInt());
   }
-  void Write(ValueType value) const { EMBOSS_CHECK(TryToWrite(value)); }
+  void Write(ValueType value) const {
+    const bool result = TryToWrite(value);
+    (void)result;
+    EMBOSS_CHECK(result);
+  }
   bool TryToWrite(ValueType value) const {
     if (!CouldWriteValue(value)) return false;
     if (!IsComplete()) return false;
diff --git a/runtime/cpp/emboss_prelude.h b/runtime/cpp/emboss_prelude.h
index b20affe..263b802 100644
--- a/runtime/cpp/emboss_prelude.h
+++ b/runtime/cpp/emboss_prelude.h
@@ -53,7 +53,11 @@
     return result;
   }
   bool UncheckedRead() const { return bit_block_.UncheckedReadUInt(); }
-  void Write(bool value) const { EMBOSS_CHECK(TryToWrite(value)); }
+  void Write(bool value) const {
+    const bool result = TryToWrite(value);
+    (void)result;
+    EMBOSS_CHECK(result);
+  }
   bool TryToWrite(bool value) const {
     if (!CouldWriteValue(value)) return false;
     if (!IsComplete()) return false;
@@ -174,7 +178,9 @@
                                                IntT>::type>::type>::value) ||
                 ::std::is_enum<IntT>::value>::type>
   void Write(IntT value) const {
-    EMBOSS_CHECK(TryToWrite(value));
+    const bool result = TryToWrite(value);
+    (void)result;
+    EMBOSS_CHECK(result);
   }
 
   template <typename IntT,
@@ -337,7 +343,9 @@
                                                IntT>::type>::type>::value) ||
                 ::std::is_enum<IntT>::value>::type>
   void Write(IntT value) const {
-    EMBOSS_CHECK(TryToWrite(value));
+    const bool result = TryToWrite(value);
+    (void)result;
+    EMBOSS_CHECK(result);
   }
 
   template <typename IntT,
@@ -490,6 +498,7 @@
         return -1;
       } else {
         EMBOSS_CHECK(false);
+        return -1;  // Return value if EMBOSS_CHECK is disabled.
       }
     } else {
       typename BitViewType::ValueType sign_bit =
@@ -605,7 +614,11 @@
   ValueType UncheckedRead() const {
     return ConvertToBinary(buffer_.UncheckedReadUInt());
   }
-  void Write(ValueType value) const { EMBOSS_CHECK(TryToWrite(value)); }
+  void Write(ValueType value) const {
+    const bool result = TryToWrite(value);
+    (void)result;
+    EMBOSS_CHECK(result);
+  }
   bool TryToWrite(ValueType value) const {
     if (!CouldWriteValue(value)) return false;
     if (!IsComplete()) return false;
@@ -720,7 +733,11 @@
   ValueType UncheckedRead() const {
     return ConvertToFloat(buffer_.UncheckedReadUInt());
   }
-  void Write(ValueType value) const { EMBOSS_CHECK(TryToWrite(value)); }
+  void Write(ValueType value) const {
+    const bool result = TryToWrite(value);
+    (void)result;
+    EMBOSS_CHECK(result);
+  }
   bool TryToWrite(ValueType value) const {
     if (!CouldWriteValue(value)) return false;
     if (!IsComplete()) return false;
diff --git a/runtime/cpp/emboss_text_util.h b/runtime/cpp/emboss_text_util.h
index 2ee5770..8640851 100644
--- a/runtime/cpp/emboss_text_util.h
+++ b/runtime/cpp/emboss_text_util.h
@@ -576,11 +576,11 @@
   ::std::array<char, 30> buffer;
   // TODO(bolms): Figure out how to get ::std::snprintf to work on
   // microcontroller builds.
-  EMBOSS_CHECK_LE(
-      static_cast</**/ ::std::size_t>(::snprintf(
-          &(buffer[0]), buffer.size(), "%.*g",
-          FloatConstants<Float>::kPrintfPrecision(), static_cast<double>(n))),
-      buffer.size());
+  ::std::size_t snprintf_result = static_cast</**/ ::std::size_t>(::snprintf(
+      &(buffer[0]), buffer.size(), "%.*g",
+      FloatConstants<Float>::kPrintfPrecision(), static_cast<double>(n)));
+  (void)snprintf_result;  // Unused if EMBOSS_CHECK_LE is compiled out.
+  EMBOSS_CHECK_LE(snprintf_result, buffer.size());
   stream->Write(&buffer[0]);
 
   // TODO(bolms): Support digit grouping.
diff --git a/runtime/cpp/test/emboss_array_view_test.cc b/runtime/cpp/test/emboss_array_view_test.cc
index bec26bc..e662779 100644
--- a/runtime/cpp/test/emboss_array_view_test.cc
+++ b/runtime/cpp/test/emboss_array_view_test.cc
@@ -55,7 +55,9 @@
   EXPECT_EQ(bytes[0], byte_array[0].Read());
   EXPECT_EQ(bytes[1], byte_array[1].Read());
   EXPECT_EQ(bytes[2], byte_array[2].Read());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(byte_array[sizeof bytes - 4].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(bytes[sizeof bytes - 4],
             byte_array[sizeof bytes - 4].UncheckedRead());
   EXPECT_TRUE(byte_array[sizeof bytes - 5].IsComplete());
@@ -75,7 +77,9 @@
   EXPECT_EQ(0x0d0e0f10U, uint32_array[0].Read());
   EXPECT_EQ(0x090a0b0cU, uint32_array[1].Read());
   EXPECT_EQ(0x05060708U, uint32_array[2].Read());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(uint32_array[3].Read(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0x01020304U, uint32_array[3].UncheckedRead());
   EXPECT_TRUE(uint32_array[2].IsComplete());
   EXPECT_FALSE(uint32_array[3].IsComplete());
diff --git a/runtime/cpp/test/emboss_constant_view_test.cc b/runtime/cpp/test/emboss_constant_view_test.cc
index e5484b9..edbcb00 100644
--- a/runtime/cpp/test/emboss_constant_view_test.cc
+++ b/runtime/cpp/test/emboss_constant_view_test.cc
@@ -22,7 +22,9 @@
 
 TEST(MaybeConstantViewTest, Read) {
   EXPECT_EQ(7, MaybeConstantView</**/ ::std::uint8_t>(7).Read());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(MaybeConstantView</**/ ::std::uint8_t>().Read(), "Known\\(\\)");
+#endif // EMBOSS_CHECK_ABORTS
 }
 
 TEST(MaybeConstantViewTest, UncheckedRead) {
diff --git a/runtime/cpp/test/emboss_defines_test.cc b/runtime/cpp/test/emboss_defines_test.cc
index 9efc2da..b240eb4 100644
--- a/runtime/cpp/test/emboss_defines_test.cc
+++ b/runtime/cpp/test/emboss_defines_test.cc
@@ -22,22 +22,24 @@
 namespace support {
 namespace test {
 
+#if EMBOSS_CHECK_ABORTS
 TEST(CheckPointerAlignment, Aligned) {
   ::std::uint32_t t;
-  EMBOSS_DCHECK_POINTER_ALIGNMENT(&t, sizeof t, 0);
-  EMBOSS_DCHECK_POINTER_ALIGNMENT(&t, 1, 0);
-  EMBOSS_DCHECK_POINTER_ALIGNMENT(reinterpret_cast<char *>(&t) + 1, sizeof t,
-                                  1);
-  EMBOSS_DCHECK_POINTER_ALIGNMENT(reinterpret_cast<char *>(&t) + 1, 1, 0);
+  EMBOSS_CHECK_POINTER_ALIGNMENT(&t, sizeof t, 0);
+  EMBOSS_CHECK_POINTER_ALIGNMENT(&t, 1, 0);
+  EMBOSS_CHECK_POINTER_ALIGNMENT(reinterpret_cast<char *>(&t) + 1, sizeof t, 1);
+  EMBOSS_CHECK_POINTER_ALIGNMENT(reinterpret_cast<char *>(&t) + 1, 1, 0);
 }
 
 TEST(CheckPointerAlignment, Misaligned) {
   ::std::uint32_t t;
-  EXPECT_DEATH(EMBOSS_DCHECK_POINTER_ALIGNMENT(&t, sizeof t, 1), "");
-  EXPECT_DEATH(EMBOSS_DCHECK_POINTER_ALIGNMENT(reinterpret_cast<char *>(&t) + 1,
-                                               sizeof t, 0),
+  EXPECT_DEATH(EMBOSS_CHECK_POINTER_ALIGNMENT(&t, sizeof t, 1), "");
+  EXPECT_DEATH(EMBOSS_CHECK_POINTER_ALIGNMENT(reinterpret_cast<char *>(&t) + 1,
+                                              sizeof t, 0),
                "");
+  (void)t;
 }
+#endif  // EMBOSS_CHECK_ABORTS
 
 #if EMBOSS_SYSTEM_IS_TWOS_COMPLEMENT
 TEST(SystemIsTwosComplement, CastToSigned) {
diff --git a/runtime/cpp/test/emboss_enum_view_test.cc b/runtime/cpp/test/emboss_enum_view_test.cc
index 9fde28f..1127f49 100644
--- a/runtime/cpp/test/emboss_enum_view_test.cc
+++ b/runtime/cpp/test/emboss_enum_view_test.cc
@@ -182,9 +182,11 @@
   ::std::vector</**/ ::std::uint8_t> bytes = {
       {0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08}};
   auto enum64_view = FooViewN<64>{ReadWriteContiguousBuffer{bytes.data(), 4}};
-  EXPECT_DEATH(enum64_view.Read(), "");
   EXPECT_EQ(Foo::kReallyBig, enum64_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(enum64_view.Read(), "");
   EXPECT_DEATH(enum64_view.Write(Foo::kReallyBigBackwards), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_FALSE(enum64_view.TryToWrite(Foo::kReallyBigBackwards));
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{0x10, 0x0f, 0x0e, 0x0d, 0x0c,
                                                 0x0b, 0x0a, 0x09, 0x08}),
@@ -205,7 +207,9 @@
   enum24_view.Write(Foo::kBigBackwards);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{0x0e, 0x0f, 0x10, 0x0d}),
             bytes);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(enum24_view.Write(Foo::k2to24), "");
+#endif  // EMBOSS_CHECK_ABORTS
   enum24_view.UncheckedWrite(Foo::k2to24);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{0x00, 0x00, 0x00, 0x0d}),
             bytes);
@@ -216,9 +220,11 @@
 TEST(EnumView, NonPowerOfTwoSizeInsufficientBuffer) {
   ::std::vector</**/ ::std::uint8_t> bytes = {{0x10, 0x0f, 0x0e, 0x0d}};
   auto enum24_view = FooViewN<24>{ReadWriteContiguousBuffer{bytes.data(), 2}};
-  EXPECT_DEATH(enum24_view.Read(), "");
   EXPECT_EQ(Foo::kBig, enum24_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(enum24_view.Read(), "");
   EXPECT_DEATH(enum24_view.Write(Foo::kBigBackwards), "");
+#endif  // EMBOSS_CHECK_ABORTS
   enum24_view.UncheckedWrite(Foo::kBigBackwards);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{0x0e, 0x0f, 0x10, 0x0d}),
             bytes);
diff --git a/runtime/cpp/test/emboss_maybe_test.cc b/runtime/cpp/test/emboss_maybe_test.cc
index 2c8a691..3fdc7da 100644
--- a/runtime/cpp/test/emboss_maybe_test.cc
+++ b/runtime/cpp/test/emboss_maybe_test.cc
@@ -46,7 +46,9 @@
   EXPECT_EQ(3, Maybe<int>().ValueOr(3));
   EXPECT_EQ(0, Maybe<int>().ValueOrDefault());
   EXPECT_FALSE(Maybe<bool>().ValueOrDefault());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(Maybe<int>().Value(), "Known()");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_FALSE(Maybe<bool>().ValueOrDefault());
   EXPECT_EQ(static_cast<Foo>(0), Maybe<Foo>().ValueOrDefault());
 
diff --git a/runtime/cpp/test/emboss_memory_util_test.cc b/runtime/cpp/test/emboss_memory_util_test.cc
index 5460347..eec43fa 100644
--- a/runtime/cpp/test/emboss_memory_util_test.cc
+++ b/runtime/cpp/test/emboss_memory_util_test.cc
@@ -334,7 +334,9 @@
       {0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05,
        0x04, 0x03, 0x02, 0x01}};
   const auto buffer = ReadOnlyContiguousBuffer{bytes.data(), bytes.size() - 4};
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(buffer.ReadBigEndianUInt<64>(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_TRUE(buffer.Ok());
   EXPECT_EQ(bytes.size() - 4, buffer.SizeInBytes());
   EXPECT_EQ(0x100f0e0d0c0b0a09UL, buffer.UncheckedReadBigEndianUInt<64>());
@@ -357,14 +359,18 @@
   EXPECT_FALSE(ReadOnlyContiguousBuffer().Ok());
   EXPECT_FALSE(
       (ReadOnlyContiguousBuffer{static_cast<char *>(nullptr), 12}.Ok()));
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH((ReadOnlyContiguousBuffer{static_cast<char *>(nullptr), 4}
                     .ReadBigEndianUInt<32>()),
                "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0U, ReadOnlyContiguousBuffer().SizeInBytes());
   EXPECT_EQ(0U, (ReadOnlyContiguousBuffer{static_cast<char *>(nullptr), 12}
                      .SizeInBytes()));
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(
       (ReadOnlyContiguousBuffer{bytes.data(), 0}.ReadBigEndianUInt<8>()), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   // The size of the resulting buffer should be the minimum of the available
   // size and the requested size.
@@ -419,6 +425,7 @@
                                           0x06, 0x05, 0x04, 0x03, 0x02, 0x01}),
       bytes);
 
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(ReadWriteContiguousBuffer().ReadLittleEndianUInt<8>(), "");
   EXPECT_DEATH(
       (ReadWriteContiguousBuffer{static_cast<unsigned char *>(nullptr), 1}
@@ -428,6 +435,7 @@
       (ReadWriteContiguousBuffer{static_cast<unsigned char *>(nullptr), 1}
            .WriteLittleEndianUInt<8>(0xff)),
       "");
+#endif  // EMBOSS_CHECK_ABORTS
 }
 
 TEST(ContiguousBuffer, AssignmentFromCompatibleContiguousBuffers) {
@@ -467,7 +475,9 @@
   EXPECT_TRUE(buffer.Ok());
   EXPECT_EQ(0x0807060504030201UL, buffer.ReadUInt<64>());
   EXPECT_EQ(0x0807060504030201UL, buffer.UncheckedReadUInt<64>());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(buffer.ReadUInt<56>(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0x07060504030201UL, buffer.UncheckedReadUInt<56>());
   buffer.WriteUInt<64>(0x0102030405060708);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{21, 22, 8, 7, 6, 5, 4, 3, 2, 1,
@@ -477,7 +487,9 @@
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{21, 22, 1, 2, 3, 4, 5, 6, 7, 8,
                                                 23, 24}),
             bytes);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(buffer.WriteUInt<56>(0x77777777777777), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   EXPECT_FALSE(LittleEndianByteOrderer<ReadOnlyContiguousBuffer>().Ok());
   EXPECT_EQ(0U,
@@ -500,7 +512,9 @@
   EXPECT_TRUE(buffer.Ok());
   EXPECT_EQ(0x0102030405060708UL, buffer.ReadUInt<64>());
   EXPECT_EQ(0x0102030405060708UL, buffer.UncheckedReadUInt<64>());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(buffer.ReadUInt<56>(), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(0x01020304050607UL, buffer.UncheckedReadUInt<56>());
   buffer.WriteUInt<64>(0x0807060504030201);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{21, 22, 8, 7, 6, 5, 4, 3, 2, 1,
@@ -510,7 +524,9 @@
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{21, 22, 1, 2, 3, 4, 5, 6, 7, 8,
                                                 23, 24}),
             bytes);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(buffer.WriteUInt<56>(0x77777777777777), "");
+#endif  // EMBOSS_CHECK_ABORTS
 
   EXPECT_FALSE(BigEndianByteOrderer<ReadOnlyContiguousBuffer>().Ok());
   EXPECT_EQ(0U, BigEndianByteOrderer<ReadOnlyContiguousBuffer>().SizeInBytes());
@@ -539,6 +555,7 @@
 
   EXPECT_FALSE(NullByteOrderer<ReadOnlyContiguousBuffer>().Ok());
   EXPECT_EQ(0U, NullByteOrderer<ReadOnlyContiguousBuffer>().SizeInBytes());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH((NullByteOrderer<ReadOnlyContiguousBuffer>{
                    ReadOnlyContiguousBuffer{bytes, 0}}
                     .ReadUInt<8>()),
@@ -547,6 +564,7 @@
                    ReadOnlyContiguousBuffer{bytes, 2}}
                     .ReadUInt<8>()),
                "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_EQ(bytes[0], (NullByteOrderer<ReadOnlyContiguousBuffer>{
                           ReadOnlyContiguousBuffer{bytes, 0}}
                            .UncheckedReadUInt<8>()));
@@ -623,7 +641,9 @@
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{0x10, 0x0f, 0x0e, 0x0d, 0x0c,
                                                 0x0b, 0x0a, 0x09}),
             bytes);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(offset_block.WriteUInt(0x10f0e0d0c0b0a), "");
+#endif  // EMBOSS_CHECK_ABORTS
   offset_block.UncheckedWriteUInt(0x10f0e0d0c0b0a);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{0x10, 0x0a, 0x0b, 0x0c, 0x0d,
                                                 0x0e, 0x0f, 0x09}),
@@ -641,7 +661,9 @@
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{0x10, 0x0a, 0x0b, 0x0c, 0x0d,
                                                 0x0e, 0x0f, 0x09}),
             bytes);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(offset_offset_block.WriteUInt(0x10c0d), "");
+#endif  // EMBOSS_CHECK_ABORTS
   offset_offset_block.UncheckedWriteUInt(0x20c0d);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{0x10, 0x0a, 0x0b, 0x0d, 0x0c,
                                                 0x0e, 0x0f, 0x09}),
diff --git a/runtime/cpp/test/emboss_prelude_test.cc b/runtime/cpp/test/emboss_prelude_test.cc
index ed8d516..9fb1cb6 100644
--- a/runtime/cpp/test/emboss_prelude_test.cc
+++ b/runtime/cpp/test/emboss_prelude_test.cc
@@ -218,9 +218,11 @@
       {0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08}};
   auto uint64_view =
       UIntViewN<64>{BitBlockN<64>{ReadWriteContiguousBuffer{bytes.data(), 4}}};
-  EXPECT_DEATH(uint64_view.Read(), "");
   EXPECT_EQ(0x090a0b0c0d0e0f10UL, uint64_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(uint64_view.Read(), "");
   EXPECT_DEATH(uint64_view.Write(0x100f0e0d0c0b0a09UL), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_FALSE(uint64_view.TryToWrite(0x100f0e0d0c0b0a09UL));
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{
                 {0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08}}),
@@ -240,7 +242,9 @@
       UIntViewN<24>{BitBlockN<24>{ReadWriteContiguousBuffer{bytes.data(), 3}}};
   EXPECT_EQ(0x0e0f10U, uint24_view.Read());
   EXPECT_EQ(0x0e0f10U, uint24_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(uint24_view.Write(0x1000000), "");
+#endif  // EMBOSS_CHECK_ABORTS
   uint24_view.Write(0x100f0e);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x0e, 0x0f, 0x10, 0x0d}}),
             bytes);
@@ -255,9 +259,11 @@
   ::std::vector</**/ ::std::uint8_t> bytes = {{0x10, 0x0f, 0x0e, 0x0d}};
   auto uint24_view =
       UIntViewN<24>{BitBlockN<24>{ReadWriteContiguousBuffer{bytes.data(), 2}}};
-  EXPECT_DEATH(uint24_view.Read(), "");
   EXPECT_EQ(0x0e0f10U, uint24_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(uint24_view.Read(), "");
   EXPECT_DEATH(uint24_view.Write(0x100f0e), "");
+#endif  // EMBOSS_CHECK_ABORTS
   uint24_view.UncheckedWrite(0x100f0e);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x0e, 0x0f, 0x10, 0x0d}}),
             bytes);
@@ -278,7 +284,9 @@
   EXPECT_FALSE(uint23_view.CouldWriteValue(0x800f0e));
   EXPECT_FALSE(uint23_view.CouldWriteValue(0x800000));
   EXPECT_TRUE(uint23_view.CouldWriteValue(0x7fffff));
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(uint23_view.Write(0x800f0e), "");
+#endif  // EMBOSS_CHECK_ABORTS
   uint23_view.Write(0x400f0e);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x0e, 0x0f, 0xc0, 0x80}}),
             bytes);
@@ -407,9 +415,11 @@
       {0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08}};
   auto int64_view =
       IntViewN<64>{BitBlockN<64>{ReadWriteContiguousBuffer{bytes.data(), 4}}};
-  EXPECT_DEATH(int64_view.Read(), "");
   EXPECT_EQ(0x090a0b0c0d0e0f10L, int64_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(int64_view.Read(), "");
   EXPECT_DEATH(int64_view.Write(0x100f0e0d0c0b0a09L), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_FALSE(int64_view.TryToWrite(0x100f0e0d0c0b0a09L));
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{
                 {0x10, 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08}}),
@@ -428,14 +438,18 @@
       IntViewN<24>{BitBlockN<24>{ReadWriteContiguousBuffer{bytes.data(), 3}}};
   EXPECT_EQ(0x0e0f10, int24_view.Read());
   EXPECT_EQ(0x0e0f10, int24_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(int24_view.Write(0x1000000), "");
+#endif  // EMBOSS_CHECK_ABORTS
   int24_view.Write(0x100f0e);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x0e, 0x0f, 0x10, 0x0d}}),
             bytes);
   int24_view.Write(-0x100f0e);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0xf2, 0xf0, 0xef, 0x0d}}),
             bytes);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(int24_view.Write(0x1000000), "");
+#endif  // EMBOSS_CHECK_ABORTS
   int24_view.UncheckedWrite(0x1000000);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x00, 0x00, 0x00, 0x0d}}),
             bytes);
@@ -447,9 +461,11 @@
   ::std::vector</**/ ::std::uint8_t> bytes = {{0x10, 0x0f, 0x0e, 0x0d}};
   auto int24_view =
       IntViewN<24>{BitBlockN<24>{ReadWriteContiguousBuffer{bytes.data(), 2}}};
-  EXPECT_DEATH(int24_view.Read(), "");
   EXPECT_EQ(0x0e0f10, int24_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(int24_view.Read(), "");
   EXPECT_DEATH(int24_view.Write(0x100f0e), "");
+#endif  // EMBOSS_CHECK_ABORTS
   int24_view.UncheckedWrite(0x100f0e);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x0e, 0x0f, 0x10, 0x0d}}),
             bytes);
@@ -468,7 +484,9 @@
                                     3}}.GetOffsetStorage<1, 0>(0, 23)};
   EXPECT_EQ(0x0, int23_view.Read());
   EXPECT_FALSE(int23_view.CouldWriteValue(0x400f0e));
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(int23_view.Write(0x400f0e), "");
+#endif  // EMBOSS_CHECK_ABORTS
   int23_view.Write(0x200f0e);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x0e, 0x0f, 0xa0, 0x80}}),
             bytes);
@@ -493,7 +511,9 @@
   EXPECT_FALSE(int1_view.CouldWriteValue(1));
   EXPECT_TRUE(int1_view.CouldWriteValue(0));
   EXPECT_TRUE(int1_view.CouldWriteValue(-1));
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(int1_view.Write(1), "");
+#endif  // EMBOSS_CHECK_ABORTS
   int1_view.Write(-1);
   EXPECT_EQ(0xff, bytes[0]);
   EXPECT_EQ(-1, int1_view.Read());
@@ -669,9 +689,11 @@
       {0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x09, 0x08}};
   auto bcd64_view =
       BcdViewN<64>{BitBlockN<64>{ReadWriteContiguousBuffer{bytes.data(), 4}}};
-  EXPECT_DEATH(bcd64_view.Read(), "");
   EXPECT_EQ(910111213141516UL, bcd64_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(bcd64_view.Read(), "");
   EXPECT_DEATH(bcd64_view.Write(1615141312111009), "");
+#endif  // EMBOSS_CHECK_ABORTS
   EXPECT_FALSE(bcd64_view.TryToWrite(1615141312111009));
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{
                 {0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 0x09, 0x08}}),
@@ -693,7 +715,9 @@
   bcd24_view.Write(161514);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x14, 0x15, 0x16, 0x13}}),
             bytes);
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(bcd24_view.Write(1000000), "");
+#endif  // EMBOSS_CHECK_ABORTS
   bcd24_view.UncheckedWrite(1000000);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x00, 0x00, 0x00, 0x13}}),
             bytes);
@@ -708,9 +732,11 @@
   ::std::vector</**/ ::std::uint8_t> bytes = {{0x16, 0x15, 0x14, 0x13}};
   auto bcd24_view =
       BcdViewN<24>{BitBlockN<24>{ReadWriteContiguousBuffer{bytes.data(), 2}}};
-  EXPECT_DEATH(bcd24_view.Read(), "");
   EXPECT_EQ(141516U, bcd24_view.UncheckedRead());
+#if EMBOSS_CHECK_ABORTS
+  EXPECT_DEATH(bcd24_view.Read(), "");
   EXPECT_DEATH(bcd24_view.Write(161514), "");
+#endif  // EMBOSS_CHECK_ABORTS
   bcd24_view.UncheckedWrite(161514);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x14, 0x15, 0x16, 0x13}}),
             bytes);
@@ -730,7 +756,9 @@
   EXPECT_EQ(0x0U, bcd23_view.Read());
   EXPECT_FALSE(bcd23_view.CouldWriteValue(800000));
   EXPECT_TRUE(bcd23_view.CouldWriteValue(799999));
+#if EMBOSS_CHECK_ABORTS
   EXPECT_DEATH(bcd23_view.Write(800000), "");
+#endif  // EMBOSS_CHECK_ABORTS
   bcd23_view.Write(432198);
   EXPECT_EQ((::std::vector</**/ ::std::uint8_t>{{0x98, 0x21, 0xc3, 0x80}}),
             bytes);