| // Copyright 2020 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_NOTREACHED_H_ |
| #define BASE_NOTREACHED_H_ |
| |
| #include "base/check.h" |
| #include "base/logging_buildflags.h" |
| |
| namespace logging { |
| |
| #if BUILDFLAG(ENABLE_LOG_ERROR_NOT_REACHED) |
| void BASE_EXPORT LogErrorNotReached(const char* file, int line); |
| #define NOTREACHED() \ |
| true ? ::logging::LogErrorNotReached(__FILE__, __LINE__) \ |
| : EAT_CHECK_STREAM_PARAMS() |
| #else |
| #define NOTREACHED() DCHECK(false) |
| #endif |
| |
| // The NOTIMPLEMENTED() macro annotates codepaths which have not been |
| // implemented yet. If output spam is a serious concern, |
| // NOTIMPLEMENTED_LOG_ONCE can be used. |
| #if DCHECK_IS_ON() |
| #define NOTIMPLEMENTED() \ |
| ::logging::CheckError::NotImplemented(__FILE__, __LINE__, \ |
| __PRETTY_FUNCTION__) \ |
| .stream() |
| #else |
| #define NOTIMPLEMENTED() EAT_CHECK_STREAM_PARAMS() |
| #endif |
| |
| #define NOTIMPLEMENTED_LOG_ONCE() \ |
| { \ |
| static bool logged_once = false; \ |
| if (!logged_once) { \ |
| NOTIMPLEMENTED(); \ |
| logged_once = true; \ |
| } \ |
| } \ |
| EAT_CHECK_STREAM_PARAMS() |
| |
| } // namespace logging |
| |
| #endif // BASE_NOTREACHED_H_ |