diff --git a/source/opt/log.h b/source/opt/log.h
index 2b033fe..8432d4a 100644
--- a/source/opt/log.h
+++ b/source/opt/log.h
@@ -22,8 +22,9 @@
 
 #include "message.h"
 
-// Asserts the given condition is true. Otherwise, send a message to the
-// consumer. Accepts the following formats:
+// Asserts the given condition is true. Otherwise, sends a message to the
+// consumer and exits the problem with failure code. Accepts the following
+// formats:
 //
 // SPIRV_ASSERT(<message-consumer>, <condition-expression>);
 // SPIRV_ASSERT(<message-consumer>, <condition-expression>, <message>);
@@ -133,24 +134,30 @@
 
 #define SPIRV_ASSERT_1(consumer, condition)                             \
   do {                                                                  \
-    if (!(condition))                                                   \
+    if (!(condition)) {                                                 \
       spvtools::Log(consumer, MessageLevel::InternalError, __FILE__,    \
                     {__LINE__, 0, 0}, "assertion failed: " #condition); \
+      std::exit(EXIT_FAILURE);                                          \
+    }                                                                   \
   } while (0)
 
 #define SPIRV_ASSERT_2(consumer, condition, message)                 \
   do {                                                               \
-    if (!(condition))                                                \
+    if (!(condition)) {                                              \
       spvtools::Log(consumer, MessageLevel::InternalError, __FILE__, \
                     {__LINE__, 0, 0}, "assertion failed: " message); \
+      std::exit(EXIT_FAILURE);                                       \
+    }                                                                \
   } while (0)
 
 #define SPIRV_ASSERT_more(consumer, condition, format, ...)           \
   do {                                                                \
-    if (!(condition))                                                 \
+    if (!(condition)) {                                               \
       spvtools::Logf(consumer, MessageLevel::InternalError, __FILE__, \
                      {__LINE__, 0, 0}, "assertion failed: " format,   \
                      __VA_ARGS__);                                    \
+      std::exit(EXIT_FAILURE);                                        \
+    }                                                                 \
   } while (0)
 
 #define SPIRV_ASSERT_3(consumer, condition, format, ...) \
diff --git a/test/test_log.cpp b/test/test_log.cpp
index ac19549..47a0f5c 100644
--- a/test/test_log.cpp
+++ b/test/test_log.cpp
@@ -23,63 +23,6 @@
 using namespace spvtools;
 using ::testing::MatchesRegex;
 
-TEST(Log, AssertStatement) {
-  int invocation = 0;
-  auto consumer = [&invocation](MessageLevel level, const char* source,
-                                const spv_position_t&, const char* message) {
-    ++invocation;
-    EXPECT_EQ(MessageLevel::InternalError, level);
-    EXPECT_THAT(source, MatchesRegex(".*test_log.cpp$"));
-    EXPECT_STREQ("assertion failed: 1 + 2 == 5", message);
-  };
-
-  SPIRV_ASSERT(consumer, 1 + 2 == 5);
-#if defined(NDEBUG)
-  (void)consumer;
-  EXPECT_EQ(0, invocation);
-#else
-  EXPECT_EQ(1, invocation);
-#endif
-}
-
-TEST(Log, AssertMessage) {
-  int invocation = 0;
-  auto consumer = [&invocation](MessageLevel level, const char* source,
-                                const spv_position_t&, const char* message) {
-    ++invocation;
-    EXPECT_EQ(MessageLevel::InternalError, level);
-    EXPECT_THAT(source, MatchesRegex(".*test_log.cpp$"));
-    EXPECT_STREQ("assertion failed: happy asserting!", message);
-  };
-
-  SPIRV_ASSERT(consumer, 1 + 2 == 5, "happy asserting!");
-#if defined(NDEBUG)
-  (void)consumer;
-  EXPECT_EQ(0, invocation);
-#else
-  EXPECT_EQ(1, invocation);
-#endif
-}
-
-TEST(Log, AssertFormattedMessage) {
-  int invocation = 0;
-  auto consumer = [&invocation](MessageLevel level, const char* source,
-                                const spv_position_t&, const char* message) {
-    ++invocation;
-    EXPECT_EQ(MessageLevel::InternalError, level);
-    EXPECT_THAT(source, MatchesRegex(".*test_log.cpp$"));
-    EXPECT_STREQ("assertion failed: 1 + 2 actually is 3", message);
-  };
-
-  SPIRV_ASSERT(consumer, 1 + 2 == 5, "1 + 2 actually is %d", 1 + 2);
-#if defined(NDEBUG)
-  (void)consumer;
-  EXPECT_EQ(0, invocation);
-#else
-  EXPECT_EQ(1, invocation);
-#endif
-}
-
 TEST(Log, Unimplemented) {
   int invocation = 0;
   auto consumer = [&invocation](MessageLevel level, const char* source,
