1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
// Copyright (C) 2015-2025 Jonathan Müller and foonathan/memory contributors
// SPDX-License-Identifier: Zlib
#ifndef FOONATHAN_MEMORY_DETAIL_ASSERT_HPP_INCLUDED
#define FOONATHAN_MEMORY_DETAIL_ASSERT_HPP_INCLUDED
#include <cstdlib>
#include "../config.hpp"
namespace foonathan
{
namespace memory
{
namespace detail
{
// handles a failed assertion
void handle_failed_assert(const char* msg, const char* file, int line,
const char* fnc) noexcept;
void handle_warning(const char* msg, const char* file, int line,
const char* fnc) noexcept;
// note: debug assertion macros don't use fully qualified name
// because they should only be used in this library, where the whole namespace is available
// can be override via command line definitions
#if FOONATHAN_MEMORY_DEBUG_ASSERT && !defined(FOONATHAN_MEMORY_ASSERT)
#define FOONATHAN_MEMORY_ASSERT(Expr) \
static_cast<void>((Expr) \
|| (detail::handle_failed_assert("Assertion \"" #Expr "\" failed", __FILE__, \
__LINE__, __func__), \
true))
#define FOONATHAN_MEMORY_ASSERT_MSG(Expr, Msg) \
static_cast<void>((Expr) \
|| (detail::handle_failed_assert("Assertion \"" #Expr "\" failed: " Msg, \
__FILE__, __LINE__, __func__), \
true))
#define FOONATHAN_MEMORY_UNREACHABLE(Msg) \
detail::handle_failed_assert("Unreachable code reached: " Msg, __FILE__, __LINE__, __func__)
#define FOONATHAN_MEMORY_WARNING(Msg) detail::handle_warning(Msg, __FILE__, __LINE__, __func__)
#elif !defined(FOONATHAN_MEMORY_ASSERT)
#define FOONATHAN_MEMORY_ASSERT(Expr)
#define FOONATHAN_MEMORY_ASSERT_MSG(Expr, Msg)
#define FOONATHAN_MEMORY_UNREACHABLE(Msg) std::abort()
#define FOONATHAN_MEMORY_WARNING(Msg)
#endif
} // namespace detail
} // namespace memory
} // namespace foonathan
#endif // FOONATHAN_MEMORY_DETAIL_ASSERT_HPP_INCLUDED
|