| // 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_ |