summaryrefslogtreecommitdiff
path: root/absl/base
diff options
context:
space:
mode:
authorGravatar Abseil Team <absl-team@google.com>2020-11-05 10:55:22 -0800
committerGravatar Andy Getz <durandal@google.com>2020-11-05 14:17:56 -0500
commite96d49687d9c078f2d47356b6723c3b5715493f7 (patch)
treecc884fdd720693ff90ae7ebe1ab0ef06f663c521 /absl/base
parent731852f10b737c5a5c3be93777a2c17b24b4c5a6 (diff)
Export of internal Abseil changes
-- 76c5eb1cf346a1a64e0a5e2edf032546d600075a by Andy Getzendanner <durandal@google.com>: Fix stacktrace on aarch64 architecture. Fixes #805 Import of https://github.com/abseil/abseil-cpp/pull/827 PiperOrigin-RevId: 340886173 -- 28f48f7bcadd4681854cddb0a7736d26d7dab000 by Andy Getzendanner <durandal@google.com>: Some attribute cleanups in and around statusor: * mark statusor_internal::Helper::Crash ABSL_ATTRIBUTE_NORETURN * add ABSL_INTERNAL_UNREACHABLE to ABSL_INTERNAL_LOG when severity is FATAL * create ABSL_INTERNAL_UNREACHABLE to wrap __builtin_unreachable and __assume(0) * use ABSL_ATTRIBUTE_NONNULL instead of __builtin_unreachable in statusor_internal::PlacementNew (https://godbolt.org/z/n691fa) PiperOrigin-RevId: 340868438 -- 33905d1d2d01eb6f81b04abaf24170bfebb6df09 by Andy Getzendanner <durandal@google.com>: moved deleted functions to public for better compiler errors. Import of https://github.com/abseil/abseil-cpp/pull/828 PiperOrigin-RevId: 340863976 -- 5e502222dfc3f5a0ef146535a9e16c743b005092 by Jorg Brown <jorg@google.com>: ConvertibleToStringView wastes a lot of cycles initializing members just to reset them immediately after. Only initialize the string storage when needed. This makes StrSplit() 0-30% faster depending on the use case. PiperOrigin-RevId: 340732039 GitOrigin-RevId: 76c5eb1cf346a1a64e0a5e2edf032546d600075a Change-Id: I2ba1f717c4eaad384cd0a22694fd05f9e6a2d8fa
Diffstat (limited to 'absl/base')
-rw-r--r--absl/base/internal/raw_logging.h14
-rw-r--r--absl/base/macros.h11
2 files changed, 19 insertions, 6 deletions
diff --git a/absl/base/internal/raw_logging.h b/absl/base/internal/raw_logging.h
index 2508f3cf..20f4291b 100644
--- a/absl/base/internal/raw_logging.h
+++ b/absl/base/internal/raw_logging.h
@@ -72,12 +72,14 @@
//
// The API is a subset of the above: each macro only takes two arguments. Use
// StrCat if you need to build a richer message.
-#define ABSL_INTERNAL_LOG(severity, message) \
- do { \
- constexpr const char* absl_raw_logging_internal_filename = __FILE__; \
- ::absl::raw_logging_internal::internal_log_function( \
- ABSL_RAW_LOGGING_INTERNAL_##severity, \
- absl_raw_logging_internal_filename, __LINE__, message); \
+#define ABSL_INTERNAL_LOG(severity, message) \
+ do { \
+ constexpr const char* absl_raw_logging_internal_filename = __FILE__; \
+ ::absl::raw_logging_internal::internal_log_function( \
+ ABSL_RAW_LOGGING_INTERNAL_##severity, \
+ absl_raw_logging_internal_filename, __LINE__, message); \
+ if (ABSL_RAW_LOGGING_INTERNAL_##severity == ::absl::LogSeverity::kFatal) \
+ ABSL_INTERNAL_UNREACHABLE; \
} while (0)
#define ABSL_INTERNAL_CHECK(condition, message) \
diff --git a/absl/base/macros.h b/absl/base/macros.h
index 02dd9ff4..3e085a91 100644
--- a/absl/base/macros.h
+++ b/absl/base/macros.h
@@ -144,4 +144,15 @@ ABSL_NAMESPACE_END
#define ABSL_INTERNAL_RETHROW do {} while (false)
#endif // ABSL_HAVE_EXCEPTIONS
+// `ABSL_INTERNAL_UNREACHABLE` is an unreachable statement. A program which
+// reaches one has undefined behavior, and the compiler may optimize
+// accordingly.
+#if defined(__GNUC__) || ABSL_HAVE_BUILTIN(__builtin_unreachable)
+#define ABSL_INTERNAL_UNREACHABLE __builtin_unreachable()
+#elif defined(_MSC_VER)
+#define ABSL_INTERNAL_UNREACHABLE __assume(0)
+#else
+#define ABSL_INTERNAL_UNREACHABLE
+#endif
+
#endif // ABSL_BASE_MACROS_H_