12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // Copyright 2021 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ALLOC_NOTREACHED_H_
- #define BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ALLOC_NOTREACHED_H_
- #include "base/allocator/partition_allocator/logging_buildflags.h"
- #include "base/allocator/partition_allocator/partition_alloc_base/compiler_specific.h"
- #include "base/allocator/partition_allocator/partition_alloc_base/debug/debugging_buildflags.h"
- #include "base/allocator/partition_allocator/partition_alloc_buildflags.h"
- #include "base/allocator/partition_allocator/partition_alloc_check.h"
- // When PartitionAlloc is used as the default allocator, we cannot use the
- // regular (D)CHECK() macros, as they allocate internally. (c.f. //
- // base/allocator/partition_allocator/partition_alloc_check.h)
- // So PA_NOTREACHED() uses PA_DCHECK() instead of DCHECK().
- #if BUILDFLAG(PA_ENABLE_LOG_ERROR_NOT_REACHED)
- #define PA_NOTREACHED() \
- true ? ::partition_alloc::internal::logging::RawError( \
- __FILE__ "(" PA_STRINGIFY(__LINE__) ") PA_NOTREACHED() hit.") \
- : PA_EAT_CHECK_STREAM_PARAMS()
- #elif BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && defined(OFFICIAL_BUILD) && \
- defined(NDEBUG) && BUILDFLAG(PA_DCHECK_IS_ON)
- // PA_DCHECK(condition) is PA_CHECK(condition) if BUILDFLAG(PA_DCHECK_IS_ON).
- // When BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC), OFFICIAL_BUILD, NDEBUG are
- // defined, PA_CHECK(false) is IMMEDIATE_CRASH(). Since IMMEDIATE_CRASH()
- // hints __builtin_unreachable() to the compiler, the following code causes
- // compile failure:
- // switch(...) {
- // ...
- // case X:
- // PA_DCHECK(false);
- // [[fallthrough]]; // The compiler knows "not reached".
- // case Y:
- // ...
- // So define PA_NOTREACHED() by using async-signal-safe RawCheck().
- #define PA_NOTREACHED() \
- PA_UNLIKELY(true) \
- ? ::partition_alloc::internal::logging::RawCheck( \
- __FILE__ "(" PA_STRINGIFY(__LINE__) ") PA_NOTREACHED() hit.") \
- : PA_EAT_CHECK_STREAM_PARAMS()
- #else
- // PA_CHECK() uses RawCheck() for error reporting. So "PA_DCHECK(false);
- // [[fallthrough]];" doesn't cause compile failure.
- #define PA_NOTREACHED() PA_DCHECK(false)
- #endif
- #endif // BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ALLOC_NOTREACHED_H_
|