#include <kern/assert.h>
kern/assert.h
functionAssert
__attribute__((noinline))
__abortlike extern void Assert(const char *file, int line, const char *expression)▾
claude-fable-5, 2026-08-24 · not from Apple sources · verified against xnu osfmk/kern/debug.c
Reports a failed kernel assertion by calling panic_plain with a message of the form "file:line Assertion failed: expression". Called by the assert() and assertf() macros when MACH_ASSERT is configured; not normally invoked directly. Does not return.
variablekext_assertions_enable
extern int kext_assertions_enable
macroAPPLE_KEXT_ASSERTIONS
#define APPLE_KEXT_ASSERTIONS 0
enummach_assert_type_t
| MACH_ASSERT_DEFAULT | 0 | |
| MACH_ASSERT_3P | 1 | |
| MACH_ASSERT_3S | 2 | |
| MACH_ASSERT_3U | 3 |
typedefmach_assert_type_t
typedef enum mach_assert_type_t mach_assert_type_t;
macroMACH_ASSERT_DESC_ALIGN
#define MACH_ASSERT_DESC_ALIGN __attribute__((packed, aligned(4)))
structmach_assert_hdr
| mach_assert_type_t | type | |
| unsigned int:24 | lineno | |
| const char * | filename |
structmach_assert_default
| struct mach_assert_hdr | hdr | |
| const char * | expr |
structmach_assert_3x
| struct mach_assert_hdr | hdr | |
| const char * | a | |
| const char * | op | |
| const char * | b |
macromach_assert_enabled
#define mach_assert_enabled() 0
macroMACH_ASSERT_SEGSECT
#define MACH_ASSERT_SEGSECT "__DATA_CONST,__assert"
macroMACH_ASSERT_DO
@abstract Wrap any arbitrary expression/code behind a conditional
on whether assertions are enabled.
#define MACH_ASSERT_DO(...) ({
if (mach_assert_enabled()) {
__VA_ARGS__;
}
})macromach_assert_abort
#define mach_assert_abort(reason) ({
__attribute__((used, section(MACH_ASSERT_SEGSECT)))
static const struct mach_assert_default __desc = {
{ MACH_ASSERT_DEFAULT, __LINE__, __FILE_NAME__, },
reason,
};
ml_fatal_trap_with_value(MACH_ASSERT_TRAP_CODE, &__desc);
})macromach_assert_abort3x
#define mach_assert_abort3x(how, s_a, s_op, s_b, v_a, v_b) ({
__attribute__((used, section(MACH_ASSERT_SEGSECT)))
static const struct mach_assert_3x __desc_ ## how = {
{ MACH_ASSERT_ ## how, __LINE__, __FILE_NAME__, },
s_a, s_op, s_b,
};
ml_fatal_trap_with_value3(MACH_ASSERT_TRAP_CODE,
&__desc_ ## how, v_a, v_b);
})macrorelease_assert
@abstract assert() that is never elided or removed even in release builds.
#define release_assert(ex) ({
if (__builtin_expect(!(ex), 0L)) {
mach_assert_abort(#ex);
}
})macromach_assert_enabled_expr
#define mach_assert_enabled_expr(ex) 0
macroassert
#define assert(ex) ((void)0)
macroassertf
#define assertf(ex, fmt, args, ...) ((void)0)
macroassert3s
#define assert3s(a, op, b) ((void)0)
macroassert3u
#define assert3u(a, op, b) ((void)0)
macroassert3p
#define assert3p(a, op, b) ((void)0)
macro_static_assert_1_arg
C++11 only supports the 2 argument version of static_assert.
C++1z has added support for the 1 argument version.
#define _static_assert_1_arg(ex) static_assert((ex), #ex)