Alex Brachet b47c9f535c [libc] Add initial assert definition
Summary: This patch adds a temporary `__assert_fail` and `assert` definition to make it available to internal llvm libc code. `__assert_fail` writes to fd 2 directly instead of `stderr`, using SYS_write. I have not put it in its own linux directory because this is temporary and it should be using stdio's api in the future. It does not currently print out the line number (although we could do that by stringifying `__LINE__` if reviewers wish).

Reviewers: sivachandra, gchatelet, PaulkaToast

Reviewed By: sivachandra

Subscribers: mgorny, MaskRay, tschuett, libc-commits

Differential Revision: https://reviews.llvm.org/D75420
2020-03-11 23:45:58 -04:00

32 lines
999 B
C++

//===-------------------- Internal header for assert ----------*- C++ -*---===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_LIBC_SRC_ASSERT_ASSERT_H
#define LLVM_LIBC_SRC_ASSERT_ASSERT_H
#include <stddef.h>
namespace __llvm_libc {
[[noreturn]] void __assert_fail(const char *assertion, const char *file, unsigned line,
const char *function);
} // namespace __llvm_libc
#endif // LLVM_LIBC_SRC_ASSERT_ASSERT_H
#undef assert
#ifdef NDEBUG
#define assert(e) (void)0
#else
#define assert(e) \
((e) ? (void)0 : \
__llvm_libc::__assert_fail(#e, __FILE__, __LINE__, __PRETTY_FUNCTION__))
#endif