about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--absl/base/BUILD.bazel19
-rw-r--r--absl/base/CMakeLists.txt8
-rw-r--r--absl/base/exception_safety_testing_test.cc4
-rw-r--r--absl/base/internal/exception_safety_testing.cc4
-rw-r--r--absl/base/internal/exception_safety_testing.h7
-rw-r--r--absl/base/throw_delegate_test.cc13
-rw-r--r--absl/container/BUILD.bazel45
-rw-r--r--absl/container/CMakeLists.txt48
-rw-r--r--absl/container/fixed_array_exception_safety_test.cc9
-rw-r--r--absl/container/inlined_vector_exception_safety_test.cc9
-rw-r--r--absl/copts/AbseilConfigureCopts.cmake8
-rw-r--r--absl/copts/GENERATED_AbseilCopts.cmake22
-rw-r--r--absl/copts/GENERATED_copts.bzl22
-rw-r--r--absl/copts/configure_copts.bzl13
-rw-r--r--absl/copts/copts.py17
-rw-r--r--absl/flags/BUILD.bazel2
-rw-r--r--absl/hash/BUILD.bazel2
-rw-r--r--absl/memory/BUILD.bazel9
-rw-r--r--absl/memory/CMakeLists.txt4
-rw-r--r--absl/memory/memory_exception_safety_test.cc6
-rw-r--r--absl/random/BUILD.bazel6
-rw-r--r--absl/random/CMakeLists.txt2
-rw-r--r--absl/random/internal/BUILD.bazel4
-rw-r--r--absl/strings/BUILD.bazel5
-rw-r--r--absl/strings/CMakeLists.txt3
-rw-r--r--absl/strings/string_view.h14
-rw-r--r--absl/strings/string_view_test.cc20
-rw-r--r--absl/types/BUILD.bazel71
-rw-r--r--absl/types/CMakeLists.txt30
-rw-r--r--absl/types/variant_test.cc6
-rw-r--r--absl/utility/BUILD.bazel4
31 files changed, 132 insertions, 304 deletions
diff --git a/absl/base/BUILD.bazel b/absl/base/BUILD.bazel
index cd5dd74f6025..a2e510f8d32e 100644
--- a/absl/base/BUILD.bazel
+++ b/absl/base/BUILD.bazel
@@ -19,8 +19,6 @@ load(
     "//absl:copts/configure_copts.bzl",
     "ABSL_DEFAULT_COPTS",
     "ABSL_DEFAULT_LINKOPTS",
-    "ABSL_EXCEPTIONS_FLAG",
-    "ABSL_EXCEPTIONS_FLAG_LINKOPTS",
     "ABSL_TEST_COPTS",
 )
 
@@ -241,8 +239,8 @@ cc_library(
     name = "throw_delegate",
     srcs = ["internal/throw_delegate.cc"],
     hdrs = ["internal/throw_delegate.h"],
-    copts = ABSL_DEFAULT_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_DEFAULT_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     visibility = [
         "//absl:__subpackages__",
     ],
@@ -255,9 +253,10 @@ cc_library(
 cc_test(
     name = "throw_delegate_test",
     srcs = ["throw_delegate_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
+        ":config",
         ":throw_delegate",
         "@com_google_googletest//:gtest_main",
     ],
@@ -290,8 +289,8 @@ cc_library(
     testonly = 1,
     srcs = ["internal/exception_safety_testing.cc"],
     hdrs = ["internal/exception_safety_testing.h"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":config",
         ":pretty_function",
@@ -306,8 +305,8 @@ cc_library(
 cc_test(
     name = "exception_safety_testing_test",
     srcs = ["exception_safety_testing_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":exception_safety_testing",
         "//absl/memory",
diff --git a/absl/base/CMakeLists.txt b/absl/base/CMakeLists.txt
index bd56b5c382cb..15a92f5fbd2e 100644
--- a/absl/base/CMakeLists.txt
+++ b/absl/base/CMakeLists.txt
@@ -194,7 +194,6 @@ absl_cc_library(
     "internal/throw_delegate.cc"
   COPTS
     ${ABSL_DEFAULT_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
   DEPS
     absl::config
     absl::raw_logging_internal
@@ -231,9 +230,6 @@ absl_cc_library(
     "internal/exception_safety_testing.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::config
     absl::pretty_function
@@ -252,9 +248,6 @@ absl_cc_test(
     "exception_safety_testing_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::exception_safety_testing
     absl::memory
@@ -296,6 +289,7 @@ absl_cc_test(
     ${ABSL_TEST_COPTS}
   DEPS
     absl::base
+    absl::config
     absl::throw_delegate
     gtest_main
 )
diff --git a/absl/base/exception_safety_testing_test.cc b/absl/base/exception_safety_testing_test.cc
index 2ed386065f0a..575b535d6b52 100644
--- a/absl/base/exception_safety_testing_test.cc
+++ b/absl/base/exception_safety_testing_test.cc
@@ -14,6 +14,8 @@
 
 #include "absl/base/internal/exception_safety_testing.h"
 
+#ifdef ABSL_HAVE_EXCEPTIONS
+
 #include <cstddef>
 #include <exception>
 #include <iostream>
@@ -952,3 +954,5 @@ TEST(ThrowingAllocatorTraitsTest, Assignablility) {
 }  // namespace
 
 }  // namespace testing
+
+#endif  // ABSL_HAVE_EXCEPTIONS
diff --git a/absl/base/internal/exception_safety_testing.cc b/absl/base/internal/exception_safety_testing.cc
index 6ef4325c8613..6ccac41864b1 100644
--- a/absl/base/internal/exception_safety_testing.cc
+++ b/absl/base/internal/exception_safety_testing.cc
@@ -14,6 +14,8 @@
 
 #include "absl/base/internal/exception_safety_testing.h"
 
+#ifdef ABSL_HAVE_EXCEPTIONS
+
 #include "gtest/gtest.h"
 #include "absl/meta/type_traits.h"
 
@@ -73,3 +75,5 @@ std::string GetSpecString(AllocSpec spec) {
 }  // namespace exceptions_internal
 
 }  // namespace testing
+
+#endif  // ABSL_HAVE_EXCEPTIONS
diff --git a/absl/base/internal/exception_safety_testing.h b/absl/base/internal/exception_safety_testing.h
index be38ba549ef7..6ba89d05dfca 100644
--- a/absl/base/internal/exception_safety_testing.h
+++ b/absl/base/internal/exception_safety_testing.h
@@ -17,6 +17,10 @@
 #ifndef ABSL_BASE_INTERNAL_EXCEPTION_SAFETY_TESTING_H_
 #define ABSL_BASE_INTERNAL_EXCEPTION_SAFETY_TESTING_H_
 
+#include "absl/base/config.h"
+
+#ifdef ABSL_HAVE_EXCEPTIONS
+
 #include <cstddef>
 #include <cstdint>
 #include <functional>
@@ -27,7 +31,6 @@
 #include <unordered_map>
 
 #include "gtest/gtest.h"
-#include "absl/base/config.h"
 #include "absl/base/internal/pretty_function.h"
 #include "absl/memory/memory.h"
 #include "absl/meta/type_traits.h"
@@ -1093,4 +1096,6 @@ class ExceptionSafetyTestBuilder {
 
 }  // namespace testing
 
+#endif  // ABSL_HAVE_EXCEPTIONS
+
 #endif  // ABSL_BASE_INTERNAL_EXCEPTION_SAFETY_TESTING_H_
diff --git a/absl/base/throw_delegate_test.cc b/absl/base/throw_delegate_test.cc
index a74dd3cda695..5ba4ce55e6d5 100644
--- a/absl/base/throw_delegate_test.cc
+++ b/absl/base/throw_delegate_test.cc
@@ -18,6 +18,7 @@
 #include <new>
 #include <stdexcept>
 
+#include "absl/base/config.h"
 #include "gtest/gtest.h"
 
 namespace {
@@ -38,31 +39,43 @@ constexpr const char* what_arg = "The quick brown fox jumps over the lazy dog";
 
 template <typename E>
 void ExpectThrowChar(void (*f)(const char*)) {
+#ifdef ABSL_HAVE_EXCEPTIONS
   try {
     f(what_arg);
     FAIL() << "Didn't throw";
   } catch (const E& e) {
     EXPECT_STREQ(e.what(), what_arg);
   }
+#else
+  EXPECT_DEATH_IF_SUPPORTED(f(what_arg), what_arg);
+#endif
 }
 
 template <typename E>
 void ExpectThrowString(void (*f)(const std::string&)) {
+#ifdef ABSL_HAVE_EXCEPTIONS
   try {
     f(what_arg);
     FAIL() << "Didn't throw";
   } catch (const E& e) {
     EXPECT_STREQ(e.what(), what_arg);
   }
+#else
+  EXPECT_DEATH_IF_SUPPORTED(f(what_arg), what_arg);
+#endif
 }
 
 template <typename E>
 void ExpectThrowNoWhat(void (*f)()) {
+#ifdef ABSL_HAVE_EXCEPTIONS
   try {
     f();
     FAIL() << "Didn't throw";
   } catch (const E& e) {
   }
+#else
+  EXPECT_DEATH_IF_SUPPORTED(f(), "");
+#endif
 }
 
 TEST(ThrowHelper, Test) {
diff --git a/absl/container/BUILD.bazel b/absl/container/BUILD.bazel
index 19c538bc48f3..0894bb207c67 100644
--- a/absl/container/BUILD.bazel
+++ b/absl/container/BUILD.bazel
@@ -19,8 +19,6 @@ load(
     "//absl:copts/configure_copts.bzl",
     "ABSL_DEFAULT_COPTS",
     "ABSL_DEFAULT_LINKOPTS",
-    "ABSL_EXCEPTIONS_FLAG",
-    "ABSL_EXCEPTIONS_FLAG_LINKOPTS",
     "ABSL_TEST_COPTS",
 )
 
@@ -72,20 +70,6 @@ cc_library(
 cc_test(
     name = "fixed_array_test",
     srcs = ["fixed_array_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
-    deps = [
-        ":fixed_array",
-        "//absl/base:exception_testing",
-        "//absl/hash:hash_testing",
-        "//absl/memory",
-        "@com_google_googletest//:gtest_main",
-    ],
-)
-
-cc_test(
-    name = "fixed_array_test_noexceptions",
-    srcs = ["fixed_array_test.cc"],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
@@ -100,10 +84,11 @@ cc_test(
 cc_test(
     name = "fixed_array_exception_safety_test",
     srcs = ["fixed_array_exception_safety_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":fixed_array",
+        "//absl/base:config",
         "//absl/base:exception_safety_testing",
         "@com_google_googletest//:gtest_main",
     ],
@@ -161,25 +146,6 @@ cc_library(
 cc_test(
     name = "inlined_vector_test",
     srcs = ["inlined_vector_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
-    deps = [
-        ":counting_allocator",
-        ":inlined_vector",
-        ":test_instance_tracker",
-        "//absl/base:core_headers",
-        "//absl/base:exception_testing",
-        "//absl/base:raw_logging_internal",
-        "//absl/hash:hash_testing",
-        "//absl/memory",
-        "//absl/strings",
-        "@com_google_googletest//:gtest_main",
-    ],
-)
-
-cc_test(
-    name = "inlined_vector_test_noexceptions",
-    srcs = ["inlined_vector_test.cc"],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
@@ -214,9 +180,10 @@ cc_test(
 cc_test(
     name = "inlined_vector_exception_safety_test",
     srcs = ["inlined_vector_exception_safety_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
+    copts = ABSL_TEST_COPTS,
     deps = [
         ":inlined_vector",
+        "//absl/base:config",
         "//absl/base:exception_safety_testing",
         "@com_google_googletest//:gtest_main",
     ],
@@ -878,7 +845,7 @@ cc_test(
     srcs = [
         "btree_test.cc",
     ],
-    copts = ABSL_TEST_COPTS + ["-fexceptions"],
+    copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     shard_count = 10,
     visibility = ["//visibility:private"],
diff --git a/absl/container/CMakeLists.txt b/absl/container/CMakeLists.txt
index 111cc783ee41..933c7a8c48a4 100644
--- a/absl/container/CMakeLists.txt
+++ b/absl/container/CMakeLists.txt
@@ -143,24 +143,6 @@ absl_cc_test(
     "fixed_array_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
-  DEPS
-    absl::fixed_array
-    absl::exception_testing
-    absl::hash_testing
-    absl::memory
-    gmock_main
-)
-
-absl_cc_test(
-  NAME
-    fixed_array_test_noexceptions
-  SRCS
-    "fixed_array_test.cc"
-  COPTS
-    ${ABSL_TEST_COPTS}
   DEPS
     absl::fixed_array
     absl::exception_testing
@@ -176,11 +158,9 @@ absl_cc_test(
     "fixed_array_exception_safety_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::fixed_array
+    absl::config
     absl::exception_safety_testing
     gmock_main
 )
@@ -233,9 +213,6 @@ absl_cc_test(
     "inlined_vector_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::counting_allocator
     absl::inlined_vector
@@ -251,35 +228,14 @@ absl_cc_test(
 
 absl_cc_test(
   NAME
-    inlined_vector_test_noexceptions
-  SRCS
-    "inlined_vector_test.cc"
-  COPTS
-    ${ABSL_TEST_COPTS}
-  DEPS
-    absl::inlined_vector
-    absl::test_instance_tracker
-    absl::core_headers
-    absl::exception_testing
-    absl::hash_testing
-    absl::memory
-    absl::raw_logging_internal
-    absl::strings
-    gmock_main
-)
-
-absl_cc_test(
-  NAME
     inlined_vector_exception_safety_test
   SRCS
     "inlined_vector_exception_safety_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::inlined_vector
+    absl::config
     absl::exception_safety_testing
     gmock_main
 )
diff --git a/absl/container/fixed_array_exception_safety_test.cc b/absl/container/fixed_array_exception_safety_test.cc
index 9984a5e2ae41..9aabfd5c95a6 100644
--- a/absl/container/fixed_array_exception_safety_test.cc
+++ b/absl/container/fixed_array_exception_safety_test.cc
@@ -12,11 +12,16 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include "absl/container/fixed_array.h"
+
+#include "absl/base/config.h"
+
+#ifdef ABSL_HAVE_EXCEPTIONS
+
 #include <initializer_list>
 
 #include "gtest/gtest.h"
 #include "absl/base/internal/exception_safety_testing.h"
-#include "absl/container/fixed_array.h"
 
 namespace absl {
 
@@ -114,3 +119,5 @@ TEST(FixedArrayExceptionSafety, Fill) {
 }  // namespace
 
 }  // namespace absl
+
+#endif  // ABSL_HAVE_EXCEPTIONS
diff --git a/absl/container/inlined_vector_exception_safety_test.cc b/absl/container/inlined_vector_exception_safety_test.cc
index b4fff3250561..25994f1685a2 100644
--- a/absl/container/inlined_vector_exception_safety_test.cc
+++ b/absl/container/inlined_vector_exception_safety_test.cc
@@ -12,6 +12,12 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include "absl/container/inlined_vector.h"
+
+#include "absl/base/config.h"
+
+#ifdef ABSL_HAVE_EXCEPTIONS
+
 #include <array>
 #include <initializer_list>
 #include <iterator>
@@ -20,7 +26,6 @@
 
 #include "gtest/gtest.h"
 #include "absl/base/internal/exception_safety_testing.h"
-#include "absl/container/inlined_vector.h"
 
 namespace {
 
@@ -487,3 +492,5 @@ TYPED_TEST(TwoSizeTest, Swap) {
 }
 
 }  // namespace
+
+#endif  // ABSL_HAVE_EXCEPTIONS
diff --git a/absl/copts/AbseilConfigureCopts.cmake b/absl/copts/AbseilConfigureCopts.cmake
index 4ece4c6f48c7..b430873c5e07 100644
--- a/absl/copts/AbseilConfigureCopts.cmake
+++ b/absl/copts/AbseilConfigureCopts.cmake
@@ -8,7 +8,6 @@ set(ABSL_DEFAULT_LINKOPTS "")
 if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
   set(ABSL_DEFAULT_COPTS "${ABSL_GCC_FLAGS}")
   set(ABSL_TEST_COPTS "${ABSL_GCC_FLAGS};${ABSL_GCC_TEST_FLAGS}")
-  set(ABSL_EXCEPTIONS_FLAG "${ABSL_GCC_EXCEPTIONS_FLAGS}")
   set(ABSL_RANDOM_RANDEN_COPTS "${ABSL_RANDOM_HWAES_X64_FLAGS}")
 elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
   # MATCHES so we get both Clang and AppleClang
@@ -16,13 +15,11 @@ elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
     # clang-cl is half MSVC, half LLVM
     set(ABSL_DEFAULT_COPTS "${ABSL_CLANG_CL_FLAGS}")
     set(ABSL_TEST_COPTS "${ABSL_CLANG_CL_FLAGS};${ABSL_CLANG_CL_TEST_FLAGS}")
-    set(ABSL_EXCEPTIONS_FLAG "${ABSL_CLANG_CL_EXCEPTIONS_FLAGS}")
     set(ABSL_DEFAULT_LINKOPTS "${ABSL_MSVC_LINKOPTS}")
     set(ABSL_RANDOM_RANDEN_COPTS "${ABSL_RANDOM_HWAES_MSVC_X64_FLAGS}")
   else()
     set(ABSL_DEFAULT_COPTS "${ABSL_LLVM_FLAGS}")
     set(ABSL_TEST_COPTS "${ABSL_LLVM_FLAGS};${ABSL_LLVM_TEST_FLAGS}")
-    set(ABSL_EXCEPTIONS_FLAG "${ABSL_LLVM_EXCEPTIONS_FLAGS}")
     set(ABSL_RANDOM_RANDEN_COPTS "${ABSL_RANDOM_HWAES_X64_FLAGS}")
     if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
       # AppleClang doesn't have lsan
@@ -36,20 +33,15 @@ elseif("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
 elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
   set(ABSL_DEFAULT_COPTS "${ABSL_MSVC_FLAGS}")
   set(ABSL_TEST_COPTS "${ABSL_MSVC_FLAGS};${ABSL_MSVC_TEST_FLAGS}")
-  set(ABSL_EXCEPTIONS_FLAG "${ABSL_MSVC_EXCEPTIONS_FLAGS}")
   set(ABSL_DEFAULT_LINKOPTS "${ABSL_MSVC_LINKOPTS}")
   set(ABSL_RANDOM_RANDEN_COPTS "${ABSL_RANDOM_HWAES_MSVC_X64_FLAGS}")
 else()
   message(WARNING "Unknown compiler: ${CMAKE_CXX_COMPILER}.  Building with no default flags")
   set(ABSL_DEFAULT_COPTS "")
   set(ABSL_TEST_COPTS "")
-  set(ABSL_EXCEPTIONS_FLAG "")
   set(ABSL_RANDOM_RANDEN_COPTS "")
 endif()
 
-# This flag is used internally for Bazel builds and is kept here for consistency
-set(ABSL_EXCEPTIONS_FLAG_LINKOPTS "")
-
 if("${CMAKE_CXX_STANDARD}" EQUAL 98)
   message(FATAL_ERROR "Abseil requires at least C++11")
 elseif(NOT "${CMAKE_CXX_STANDARD}")
diff --git a/absl/copts/GENERATED_AbseilCopts.cmake b/absl/copts/GENERATED_AbseilCopts.cmake
index 57394c53ef02..39b79c533705 100644
--- a/absl/copts/GENERATED_AbseilCopts.cmake
+++ b/absl/copts/GENERATED_AbseilCopts.cmake
@@ -3,12 +3,6 @@
 # (1) Edit absl/copts/copts.py.
 # (2) Run `python <path_to_absl>/copts/generate_copts.py`.
 
-list(APPEND ABSL_CLANG_CL_EXCEPTIONS_FLAGS
-    "/U_HAS_EXCEPTIONS"
-    "/D_HAS_EXCEPTIONS=1"
-    "/EHsc"
-)
-
 list(APPEND ABSL_CLANG_CL_FLAGS
     "/W3"
     "-Wno-c++98-compat-pedantic"
@@ -80,10 +74,6 @@ list(APPEND ABSL_CLANG_CL_TEST_FLAGS
     "-Wno-gnu-zero-variadic-macro-arguments"
 )
 
-list(APPEND ABSL_GCC_EXCEPTIONS_FLAGS
-    "-fexceptions"
-)
-
 list(APPEND ABSL_GCC_FLAGS
     "-Wall"
     "-Wextra"
@@ -111,10 +101,6 @@ list(APPEND ABSL_GCC_TEST_FLAGS
     "-Wno-unused-private-field"
 )
 
-list(APPEND ABSL_LLVM_EXCEPTIONS_FLAGS
-    "-fexceptions"
-)
-
 list(APPEND ABSL_LLVM_FLAGS
     "-Wall"
     "-Wextra"
@@ -183,12 +169,6 @@ list(APPEND ABSL_LLVM_TEST_FLAGS
     "-Wno-gnu-zero-variadic-macro-arguments"
 )
 
-list(APPEND ABSL_MSVC_EXCEPTIONS_FLAGS
-    "/U_HAS_EXCEPTIONS"
-    "/D_HAS_EXCEPTIONS=1"
-    "/EHsc"
-)
-
 list(APPEND ABSL_MSVC_FLAGS
     "/W3"
     "/DNOMINMAX"
@@ -227,8 +207,6 @@ list(APPEND ABSL_RANDOM_HWAES_ARM64_FLAGS
 )
 
 list(APPEND ABSL_RANDOM_HWAES_MSVC_X64_FLAGS
-    "/O2"
-    "/Ob2"
 )
 
 list(APPEND ABSL_RANDOM_HWAES_X64_FLAGS
diff --git a/absl/copts/GENERATED_copts.bzl b/absl/copts/GENERATED_copts.bzl
index 18dbb68169fd..7d645cc33748 100644
--- a/absl/copts/GENERATED_copts.bzl
+++ b/absl/copts/GENERATED_copts.bzl
@@ -4,12 +4,6 @@
 (2) Run `python <path_to_absl>/copts/generate_copts.py`.
 """
 
-ABSL_CLANG_CL_EXCEPTIONS_FLAGS = [
-    "/U_HAS_EXCEPTIONS",
-    "/D_HAS_EXCEPTIONS=1",
-    "/EHsc",
-]
-
 ABSL_CLANG_CL_FLAGS = [
     "/W3",
     "-Wno-c++98-compat-pedantic",
@@ -81,10 +75,6 @@ ABSL_CLANG_CL_TEST_FLAGS = [
     "-Wno-gnu-zero-variadic-macro-arguments",
 ]
 
-ABSL_GCC_EXCEPTIONS_FLAGS = [
-    "-fexceptions",
-]
-
 ABSL_GCC_FLAGS = [
     "-Wall",
     "-Wextra",
@@ -112,10 +102,6 @@ ABSL_GCC_TEST_FLAGS = [
     "-Wno-unused-private-field",
 ]
 
-ABSL_LLVM_EXCEPTIONS_FLAGS = [
-    "-fexceptions",
-]
-
 ABSL_LLVM_FLAGS = [
     "-Wall",
     "-Wextra",
@@ -184,12 +170,6 @@ ABSL_LLVM_TEST_FLAGS = [
     "-Wno-gnu-zero-variadic-macro-arguments",
 ]
 
-ABSL_MSVC_EXCEPTIONS_FLAGS = [
-    "/U_HAS_EXCEPTIONS",
-    "/D_HAS_EXCEPTIONS=1",
-    "/EHsc",
-]
-
 ABSL_MSVC_FLAGS = [
     "/W3",
     "/DNOMINMAX",
@@ -228,8 +208,6 @@ ABSL_RANDOM_HWAES_ARM64_FLAGS = [
 ]
 
 ABSL_RANDOM_HWAES_MSVC_X64_FLAGS = [
-    "/O2",
-    "/Ob2",
 ]
 
 ABSL_RANDOM_HWAES_X64_FLAGS = [
diff --git a/absl/copts/configure_copts.bzl b/absl/copts/configure_copts.bzl
index 8c4efe77c21a..2829e4ec6e6f 100644
--- a/absl/copts/configure_copts.bzl
+++ b/absl/copts/configure_copts.bzl
@@ -6,13 +6,10 @@ change Abseil copts, edit absl/copts/copts.py
 
 load(
     "//absl:copts/GENERATED_copts.bzl",
-    "ABSL_GCC_EXCEPTIONS_FLAGS",
     "ABSL_GCC_FLAGS",
     "ABSL_GCC_TEST_FLAGS",
-    "ABSL_LLVM_EXCEPTIONS_FLAGS",
     "ABSL_LLVM_FLAGS",
     "ABSL_LLVM_TEST_FLAGS",
-    "ABSL_MSVC_EXCEPTIONS_FLAGS",
     "ABSL_MSVC_FLAGS",
     "ABSL_MSVC_LINKOPTS",
     "ABSL_MSVC_TEST_FLAGS",
@@ -36,16 +33,6 @@ ABSL_TEST_COPTS = ABSL_DEFAULT_COPTS + select({
     "//conditions:default": ABSL_GCC_TEST_FLAGS,
 })
 
-ABSL_EXCEPTIONS_FLAG = select({
-    "//absl:windows": ABSL_MSVC_EXCEPTIONS_FLAGS,
-    "//absl:llvm_compiler": ABSL_LLVM_EXCEPTIONS_FLAGS,
-    "//conditions:default": ABSL_GCC_EXCEPTIONS_FLAGS,
-})
-
-ABSL_EXCEPTIONS_FLAG_LINKOPTS = select({
-    "//conditions:default": [],
-})
-
 ABSL_DEFAULT_LINKOPTS = select({
     "//absl:windows": ABSL_MSVC_LINKOPTS,
     "//conditions:default": [],
diff --git a/absl/copts/copts.py b/absl/copts/copts.py
index 0db6e0693b9f..a542541505b2 100644
--- a/absl/copts/copts.py
+++ b/absl/copts/copts.py
@@ -109,12 +109,6 @@ LLVM_TEST_DISABLE_WARNINGS_FLAGS = [
     "-Wno-gnu-zero-variadic-macro-arguments",
 ]
 
-MSVC_STYLE_EXCEPTIONS_FLAGS = [
-    "/U_HAS_EXCEPTIONS",
-    "/D_HAS_EXCEPTIONS=1",
-    "/EHsc"
-]
-
 MSVC_DEFINES = [
     "/DNOMINMAX",  # Don't define min and max macros (windows.h)
     # Don't bloat namespace with incompatible winsock versions.
@@ -157,18 +151,14 @@ COPT_VARS = {
         "-Wno-unused-parameter",
         "-Wno-unused-private-field",
     ],
-    "ABSL_GCC_EXCEPTIONS_FLAGS": ["-fexceptions"],
     "ABSL_LLVM_FLAGS":
         LLVM_BIG_WARNING_FLAGS + LLVM_DISABLE_WARNINGS_FLAGS,
     "ABSL_LLVM_TEST_FLAGS":
         LLVM_TEST_DISABLE_WARNINGS_FLAGS,
-    "ABSL_LLVM_EXCEPTIONS_FLAGS": ["-fexceptions"],
     "ABSL_CLANG_CL_FLAGS":
         (MSVC_BIG_WARNING_FLAGS + LLVM_DISABLE_WARNINGS_FLAGS + MSVC_DEFINES),
     "ABSL_CLANG_CL_TEST_FLAGS":
         LLVM_TEST_DISABLE_WARNINGS_FLAGS,
-    "ABSL_CLANG_CL_EXCEPTIONS_FLAGS":
-        MSVC_STYLE_EXCEPTIONS_FLAGS,
     "ABSL_MSVC_FLAGS":
         MSVC_BIG_WARNING_FLAGS + MSVC_DEFINES + [
             # Increase the number of sections available in object files
@@ -193,8 +183,6 @@ COPT_VARS = {
         "/wd4996",  # use of deprecated symbol
         "/DNOMINMAX",  # disable the min() and max() macros from <windows.h>
     ],
-    "ABSL_MSVC_EXCEPTIONS_FLAGS":
-        MSVC_STYLE_EXCEPTIONS_FLAGS,
     "ABSL_MSVC_LINKOPTS": [
         # Object file doesn't export any previously undefined symbols
         "-ignore:4221",
@@ -209,8 +197,5 @@ COPT_VARS = {
         "-maes",
         "-msse4.1",
     ],
-    "ABSL_RANDOM_HWAES_MSVC_X64_FLAGS": [
-        "/O2",  # Maximize speed
-        "/Ob2",  # Aggressive inlining
-    ],
+    "ABSL_RANDOM_HWAES_MSVC_X64_FLAGS": [],
 }
diff --git a/absl/flags/BUILD.bazel b/absl/flags/BUILD.bazel
index e7742de62407..4ed6585b7471 100644
--- a/absl/flags/BUILD.bazel
+++ b/absl/flags/BUILD.bazel
@@ -1,5 +1,5 @@
 #
-#  Copyright 2019 The Abseil Authors.
+# Copyright 2019 The Abseil Authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/absl/hash/BUILD.bazel b/absl/hash/BUILD.bazel
index d6d8dabc89b1..c51248a5cb9b 100644
--- a/absl/hash/BUILD.bazel
+++ b/absl/hash/BUILD.bazel
@@ -1,5 +1,5 @@
 #
-# Copyright 2018 The Abseil Authors.
+# Copyright 2019 The Abseil Authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
diff --git a/absl/memory/BUILD.bazel b/absl/memory/BUILD.bazel
index 00f60657f0a6..2ba9d7cb98ae 100644
--- a/absl/memory/BUILD.bazel
+++ b/absl/memory/BUILD.bazel
@@ -1,5 +1,5 @@
 #
-# Copyright 2017 The Abseil Authors.
+# Copyright 2019 The Abseil Authors.
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
@@ -19,8 +19,6 @@ load(
     "//absl:copts/configure_copts.bzl",
     "ABSL_DEFAULT_COPTS",
     "ABSL_DEFAULT_LINKOPTS",
-    "ABSL_EXCEPTIONS_FLAG",
-    "ABSL_EXCEPTIONS_FLAG_LINKOPTS",
     "ABSL_TEST_COPTS",
 )
 
@@ -56,10 +54,11 @@ cc_test(
     srcs = [
         "memory_exception_safety_test.cc",
     ],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":memory",
+        "//absl/base:config",
         "//absl/base:exception_safety_testing",
         "@com_google_googletest//:gtest_main",
     ],
diff --git a/absl/memory/CMakeLists.txt b/absl/memory/CMakeLists.txt
index 1b3697ec34da..78fb7e1b316b 100644
--- a/absl/memory/CMakeLists.txt
+++ b/absl/memory/CMakeLists.txt
@@ -47,11 +47,9 @@ absl_cc_test(
     "memory_exception_safety_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::memory
+    absl::config
     absl::exception_safety_testing
     gmock_main
 )
diff --git a/absl/memory/memory_exception_safety_test.cc b/absl/memory/memory_exception_safety_test.cc
index a1c397072e7b..729507e97f33 100644
--- a/absl/memory/memory_exception_safety_test.cc
+++ b/absl/memory/memory_exception_safety_test.cc
@@ -14,6 +14,10 @@
 
 #include "absl/memory/memory.h"
 
+#include "absl/base/config.h"
+
+#ifdef ABSL_HAVE_EXCEPTIONS
+
 #include "gtest/gtest.h"
 #include "absl/base/internal/exception_safety_testing.h"
 
@@ -50,3 +54,5 @@ TEST(MakeUnique, CheckForLeaks) {
 
 }  // namespace
 }  // namespace absl
+
+#endif  // ABSL_HAVE_EXCEPTIONS
diff --git a/absl/random/BUILD.bazel b/absl/random/BUILD.bazel
index be6414742f7c..c904618da2a0 100644
--- a/absl/random/BUILD.bazel
+++ b/absl/random/BUILD.bazel
@@ -21,8 +21,6 @@ load(
     "//absl:copts/configure_copts.bzl",
     "ABSL_DEFAULT_COPTS",
     "ABSL_DEFAULT_LINKOPTS",
-    "ABSL_EXCEPTIONS_FLAG",
-    "ABSL_EXCEPTIONS_FLAG_LINKOPTS",
     "ABSL_TEST_COPTS",
 )
 
@@ -87,8 +85,8 @@ cc_library(
     name = "seed_gen_exception",
     srcs = ["seed_gen_exception.cc"],
     hdrs = ["seed_gen_exception.h"],
-    copts = ABSL_DEFAULT_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_DEFAULT_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = ["//absl/base:config"],
 )
 
diff --git a/absl/random/CMakeLists.txt b/absl/random/CMakeLists.txt
index 7603690dc59b..cde89bfd75bd 100644
--- a/absl/random/CMakeLists.txt
+++ b/absl/random/CMakeLists.txt
@@ -79,9 +79,7 @@ absl_cc_library(
     "seed_gen_exception.h"
   COPTS
     ${ABSL_DEFAULT_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
   LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
     ${ABSL_DEFAULT_LINKOPTS}
   DEPS
     absl::config
diff --git a/absl/random/internal/BUILD.bazel b/absl/random/internal/BUILD.bazel
index 21fa43ca8c9e..8eb6c61ac907 100644
--- a/absl/random/internal/BUILD.bazel
+++ b/absl/random/internal/BUILD.bazel
@@ -55,9 +55,7 @@ cc_library(
 
 cc_library(
     name = "distributions",
-    hdrs = [
-        "distributions.h",
-    ],
+    hdrs = ["distributions.h"],
     copts = ABSL_DEFAULT_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
diff --git a/absl/strings/BUILD.bazel b/absl/strings/BUILD.bazel
index cb80841694eb..eae75d85c499 100644
--- a/absl/strings/BUILD.bazel
+++ b/absl/strings/BUILD.bazel
@@ -17,8 +17,6 @@ load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
 load(
     "//absl:copts/configure_copts.bzl",
     "ABSL_DEFAULT_COPTS",
-    "ABSL_EXCEPTIONS_FLAG",
-    "ABSL_EXCEPTIONS_FLAG_LINKOPTS",
     "ABSL_TEST_COPTS",
 )
 
@@ -237,8 +235,7 @@ cc_test(
     name = "string_view_test",
     size = "small",
     srcs = ["string_view_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
     visibility = ["//visibility:private"],
     deps = [
         ":strings",
diff --git a/absl/strings/CMakeLists.txt b/absl/strings/CMakeLists.txt
index 82a906b7e4b9..ccff44419341 100644
--- a/absl/strings/CMakeLists.txt
+++ b/absl/strings/CMakeLists.txt
@@ -161,9 +161,6 @@ absl_cc_test(
     "string_view_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::strings
     absl::config
diff --git a/absl/strings/string_view.h b/absl/strings/string_view.h
index a1b5a17b52b3..68b90aa3126f 100644
--- a/absl/strings/string_view.h
+++ b/absl/strings/string_view.h
@@ -269,10 +269,22 @@ class string_view {
 
   // string_view::operator[]
   //
-  // Returns the ith element of an `string_view` using the array operator.
+  // Returns the ith element of the `string_view` using the array operator.
   // Note that this operator does not perform any bounds checking.
   constexpr const_reference operator[](size_type i) const { return ptr_[i]; }
 
+  // string_view::at()
+  //
+  // Returns the ith element of the `string_view`. Bounds checking is performed,
+  // and an exception of type `std::out_of_range` will be thrown on invalid
+  // access.
+  constexpr const_reference at(size_type i) const {
+    return ABSL_PREDICT_TRUE(i < size())
+               ? ptr_[i]
+               : (base_internal::ThrowStdOutOfRange("absl::string_view::at"),
+                  ptr_[i]);
+  }
+
   // string_view::front()
   //
   // Returns the first element of a `string_view`.
diff --git a/absl/strings/string_view_test.cc b/absl/strings/string_view_test.cc
index 4f531226dfe2..eb8b170bbbde 100644
--- a/absl/strings/string_view_test.cc
+++ b/absl/strings/string_view_test.cc
@@ -29,7 +29,8 @@
 #include "absl/base/config.h"
 #include "absl/base/dynamic_annotations.h"
 
-#ifdef __ANDROID__
+#if defined(ABSL_HAVE_STD_STRING_VIEW) || defined(__ANDROID__)
+// We don't control the death messaging when using std::string_view.
 // Android assert messages only go to system log, so death tests cannot inspect
 // the message for matching.
 #define ABSL_EXPECT_DEATH_IF_SUPPORTED(statement, regex) \
@@ -372,7 +373,7 @@ TEST(StringViewTest, STL1) {
 #ifdef ABSL_HAVE_EXCEPTIONS
   EXPECT_THROW(a.copy(buf, 1, 27), std::out_of_range);
 #else
-  EXPECT_DEATH(a.copy(buf, 1, 27), "absl::string_view::copy");
+  ABSL_EXPECT_DEATH_IF_SUPPORTED(a.copy(buf, 1, 27), "absl::string_view::copy");
 #endif
 }
 
@@ -686,7 +687,8 @@ TEST(StringViewTest, STL2Substr) {
 #ifdef ABSL_HAVE_EXCEPTIONS
   EXPECT_THROW((void)a.substr(99, 2), std::out_of_range);
 #else
-  EXPECT_DEATH((void)a.substr(99, 2), "absl::string_view::substr");
+  ABSL_EXPECT_DEATH_IF_SUPPORTED((void)a.substr(99, 2),
+                                 "absl::string_view::substr");
 #endif
 }
 
@@ -894,6 +896,18 @@ TEST(StringViewTest, Comparisons2) {
   EXPECT_LT(digits.compare(0, npos, "0123456789", 3, 5), 0);  // 6
 }
 
+TEST(StringViewTest, At) {
+  absl::string_view abc = "abc";
+  EXPECT_EQ(abc.at(0), 'a');
+  EXPECT_EQ(abc.at(1), 'b');
+  EXPECT_EQ(abc.at(2), 'c');
+#ifdef ABSL_HAVE_EXCEPTIONS
+  EXPECT_THROW(abc.at(3), std::out_of_range);
+#else
+  ABSL_EXPECT_DEATH_IF_SUPPORTED(abc.at(3), "absl::string_view::at");
+#endif
+}
+
 struct MyCharAlloc : std::allocator<char> {};
 
 TEST(StringViewTest, ExplicitConversionOperator) {
diff --git a/absl/types/BUILD.bazel b/absl/types/BUILD.bazel
index 037d499a604b..236c24bc34d6 100644
--- a/absl/types/BUILD.bazel
+++ b/absl/types/BUILD.bazel
@@ -19,8 +19,6 @@ load(
     "//absl:copts/configure_copts.bzl",
     "ABSL_DEFAULT_COPTS",
     "ABSL_DEFAULT_LINKOPTS",
-    "ABSL_EXCEPTIONS_FLAG",
-    "ABSL_EXCEPTIONS_FLAG_LINKOPTS",
     "ABSL_TEST_COPTS",
 )
 
@@ -59,8 +57,8 @@ cc_library(
         "bad_any_cast.cc",
         "bad_any_cast.h",
     ],
-    copts = ABSL_EXCEPTIONS_FLAG + ABSL_DEFAULT_COPTS,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_DEFAULT_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     visibility = ["//visibility:private"],
     deps = [
         "//absl/base:config",
@@ -74,24 +72,6 @@ cc_test(
     srcs = [
         "any_test.cc",
     ],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
-    deps = [
-        ":any",
-        "//absl/base:config",
-        "//absl/base:exception_testing",
-        "//absl/base:raw_logging_internal",
-        "//absl/container:test_instance_tracker",
-        "@com_google_googletest//:gtest_main",
-    ],
-)
-
-cc_test(
-    name = "any_test_noexceptions",
-    size = "small",
-    srcs = [
-        "any_test.cc",
-    ],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
@@ -107,8 +87,8 @@ cc_test(
 cc_test(
     name = "any_exception_safety_test",
     srcs = ["any_exception_safety_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":any",
         "//absl/base:config",
@@ -139,25 +119,6 @@ cc_test(
     name = "span_test",
     size = "small",
     srcs = ["span_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
-    deps = [
-        ":span",
-        "//absl/base:config",
-        "//absl/base:core_headers",
-        "//absl/base:exception_testing",
-        "//absl/container:fixed_array",
-        "//absl/container:inlined_vector",
-        "//absl/hash:hash_testing",
-        "//absl/strings",
-        "@com_google_googletest//:gtest_main",
-    ],
-)
-
-cc_test(
-    name = "span_test_noexceptions",
-    size = "small",
-    srcs = ["span_test.cc"],
     copts = ABSL_TEST_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
@@ -194,8 +155,8 @@ cc_library(
     name = "bad_optional_access",
     srcs = ["bad_optional_access.cc"],
     hdrs = ["bad_optional_access.h"],
-    copts = ABSL_DEFAULT_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_DEFAULT_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         "//absl/base:config",
         "//absl/base:raw_logging_internal",
@@ -206,8 +167,8 @@ cc_library(
     name = "bad_variant_access",
     srcs = ["bad_variant_access.cc"],
     hdrs = ["bad_variant_access.h"],
-    copts = ABSL_EXCEPTIONS_FLAG + ABSL_DEFAULT_COPTS,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_DEFAULT_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         "//absl/base:config",
         "//absl/base:raw_logging_internal",
@@ -220,8 +181,8 @@ cc_test(
     srcs = [
         "optional_test.cc",
     ],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":optional",
         "//absl/base:config",
@@ -237,8 +198,8 @@ cc_test(
     srcs = [
         "optional_exception_safety_test.cc",
     ],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":optional",
         "//absl/base:config",
@@ -267,8 +228,8 @@ cc_test(
     name = "variant_test",
     size = "small",
     srcs = ["variant_test.cc"],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":variant",
         "//absl/base:config",
@@ -301,8 +262,8 @@ cc_test(
     srcs = [
         "variant_exception_safety_test.cc",
     ],
-    copts = ABSL_TEST_COPTS + ABSL_EXCEPTIONS_FLAG,
-    linkopts = ABSL_EXCEPTIONS_FLAG_LINKOPTS + ABSL_DEFAULT_LINKOPTS,
+    copts = ABSL_TEST_COPTS,
+    linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [
         ":variant",
         "//absl/base:config",
diff --git a/absl/types/CMakeLists.txt b/absl/types/CMakeLists.txt
index 1f7fde09694a..952efc34f634 100644
--- a/absl/types/CMakeLists.txt
+++ b/absl/types/CMakeLists.txt
@@ -50,9 +50,6 @@ absl_cc_library(
    "bad_any_cast.cc"
   COPTS
     ${ABSL_DEFAULT_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::config
     absl::raw_logging_internal
@@ -65,9 +62,6 @@ absl_cc_test(
     "any_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::any
     absl::config
@@ -100,9 +94,6 @@ absl_cc_test(
     "any_exception_safety_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::any
     absl::config
@@ -134,9 +125,6 @@ absl_cc_test(
     "span_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::span
     absl::base
@@ -199,9 +187,6 @@ absl_cc_library(
     "bad_optional_access.cc"
   COPTS
     ${ABSL_DEFAULT_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::config
     absl::raw_logging_internal
@@ -217,9 +202,6 @@ absl_cc_library(
     "bad_variant_access.cc"
   COPTS
     ${ABSL_DEFAULT_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::config
     absl::raw_logging_internal
@@ -233,9 +215,6 @@ absl_cc_test(
     "optional_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::optional
     absl::config
@@ -252,9 +231,6 @@ absl_cc_test(
     "optional_exception_safety_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::optional
     absl::config
@@ -288,9 +264,6 @@ absl_cc_test(
     "variant_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::variant
     absl::config
@@ -337,9 +310,6 @@ absl_cc_test(
     "variant_exception_safety_test.cc"
   COPTS
     ${ABSL_TEST_COPTS}
-    ${ABSL_EXCEPTIONS_FLAG}
-  LINKOPTS
-    ${ABSL_EXCEPTIONS_FLAG_LINKOPTS}
   DEPS
     absl::variant
     absl::config
diff --git a/absl/types/variant_test.cc b/absl/types/variant_test.cc
index 56a6e01c6100..b59127457148 100644
--- a/absl/types/variant_test.cc
+++ b/absl/types/variant_test.cc
@@ -1042,8 +1042,6 @@ TEST(VariantTest, MemberSwap) {
   using V = variant<MoveCanThrow, std::string, int>;
   int i = 33;
   std::string s = "abc";
-  V valueless(in_place_index<0>);
-  ToValuelessByException(valueless);
   {
     // lhs and rhs holds different alternative
     V lhs(i), rhs(s);
@@ -1051,6 +1049,9 @@ TEST(VariantTest, MemberSwap) {
     EXPECT_THAT(lhs, VariantWith<std::string>(s));
     EXPECT_THAT(rhs, VariantWith<int>(i));
   }
+#ifdef ABSL_HAVE_EXCEPTIONS
+  V valueless(in_place_index<0>);
+  ToValuelessByException(valueless);
   {
     // lhs is valueless
     V lhs(valueless), rhs(i);
@@ -1072,6 +1073,7 @@ TEST(VariantTest, MemberSwap) {
     EXPECT_TRUE(lhs.valueless_by_exception());
     EXPECT_TRUE(rhs.valueless_by_exception());
   }
+#endif  // ABSL_HAVE_EXCEPTIONS
 }
 
 //////////////////////
diff --git a/absl/utility/BUILD.bazel b/absl/utility/BUILD.bazel
index 61de30be0f68..6881f939c511 100644
--- a/absl/utility/BUILD.bazel
+++ b/absl/utility/BUILD.bazel
@@ -28,7 +28,9 @@ licenses(["notice"])  # Apache 2.0
 
 cc_library(
     name = "utility",
-    hdrs = ["utility.h"],
+    hdrs = [
+        "utility.h",
+    ],
     copts = ABSL_DEFAULT_COPTS,
     linkopts = ABSL_DEFAULT_LINKOPTS,
     deps = [