mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-10 09:48:58 +02:00
NINJA REPORTS THIS SHIT ALMOST EVERY STEP! [161/863] Building CXX object src\hid_core\CMakeFiles\hid_core.dir\frontend\input_interpreter.cpp.obj D:\dev\eden\src\.\core/hle/kernel/k_auto_object.h(100): warning C4127: conditional expression is constant D:\dev\eden\src\.\core/hle/kernel/k_auto_object.h(100): note: consider using 'if constexpr' statement instead D:\dev\eden\src\.\core/hle/kernel/k_memory_manager.h(246): warning C4127: conditional expression is constant D:\dev\eden\src\.\core/hle/kernel/k_memory_manager.h(246): note: consider using 'if constexpr' statement instead The reason, any mention to UNIMPLEMENTED() macro reaches this point where a constant expression (macro argument) is not declared so. There must be several other ways to suppress, like via cmake C4127 suppression or making every source constexpr, but lazy. Since it's an unimplemented() feature assert call, i`ve just made it non constant. Covers everything. No charges. Signed-off-by: xbzk <xbzk@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3567 Reviewed-by: Lizzie <lizzie@eden-emu.dev> Reviewed-by: DraVee <dravee@eden-emu.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: xbzk <xbzk@eden-emu.dev> Co-committed-by: xbzk <xbzk@eden-emu.dev>
69 lines
3.4 KiB
C++
69 lines
3.4 KiB
C++
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
// SPDX-FileCopyrightText: 2013 Dolphin Emulator Project
|
|
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "common/logging/log.h"
|
|
|
|
// Sometimes we want to try to continue even after hitting an assert.
|
|
// However touching this file yields a global recompilation as this header is included almost
|
|
// everywhere. So let's just move the handling of the failed assert to a single cpp file.
|
|
|
|
void AssertFailSoftImpl();
|
|
[[noreturn]] void AssertFatalImpl();
|
|
|
|
// Prevents errors on old GCC... smh...
|
|
#ifdef _MSC_VER
|
|
#define YUZU_NO_INLINE __declspec(noinline)
|
|
#else
|
|
#define YUZU_NO_INLINE __attribute__((noinline))
|
|
#endif
|
|
|
|
#define ASSERT_MSG(_a_, ...) \
|
|
([&]() YUZU_NO_INLINE { \
|
|
auto&& assert_condition = (_a_); \
|
|
if (!(assert_condition)) [[unlikely]] { \
|
|
LOG_CRITICAL(Debug, __FILE__ ": assert " __VA_ARGS__); \
|
|
AssertFailSoftImpl(); \
|
|
} \
|
|
}())
|
|
#define ASSERT(_a_) ASSERT_MSG(_a_, "{}", #_a_)
|
|
|
|
#define UNREACHABLE_MSG(...) \
|
|
do { \
|
|
LOG_CRITICAL(Debug, __FILE__ ": unreachable " __VA_ARGS__); \
|
|
AssertFatalImpl(); \
|
|
} while (0)
|
|
#define UNREACHABLE() UNREACHABLE_MSG("")
|
|
|
|
#ifdef _DEBUG
|
|
#define DEBUG_ASSERT(_a_) ASSERT(_a_)
|
|
#define DEBUG_ASSERT_MSG(_a_, ...) ASSERT_MSG(_a_, __VA_ARGS__)
|
|
#else // not debug
|
|
#define DEBUG_ASSERT(_a_) \
|
|
do { \
|
|
} while (0)
|
|
#define DEBUG_ASSERT_MSG(_a_, _desc_, ...) \
|
|
do { \
|
|
} while (0)
|
|
#endif
|
|
|
|
#define UNIMPLEMENTED() ASSERT(false && "Unimplemented!")
|
|
#define UNIMPLEMENTED_MSG(...) ASSERT_MSG(false, __VA_ARGS__)
|
|
|
|
#define UNIMPLEMENTED_IF(cond) ASSERT((!(cond)) && "Unimplemented!")
|
|
#define UNIMPLEMENTED_IF_MSG(cond, ...) ASSERT_MSG(!(cond), __VA_ARGS__)
|
|
|
|
// If the assert is ignored, execute _b_
|
|
#define ASSERT_OR_EXECUTE_MSG(_a_, _b_, ...) \
|
|
do { \
|
|
ASSERT_MSG(_a_, __VA_ARGS__); \
|
|
if (!(_a_)) { _b_ } \
|
|
} while (0)
|
|
|
|
// If the assert is ignored, execute _b_
|
|
#define ASSERT_OR_EXECUTE(_a_, _b_) ASSERT_OR_EXECUTE_MSG(_a_, _b_, "{}", #_a_)
|