[libc-commits] [PATCH] D75420: [libc] Add initial assert definition
Alex Brachet via Phabricator via libc-commits
libc-commits at lists.llvm.org
Mon Mar 9 00:30:31 PDT 2020
abrachet marked 9 inline comments as done.
abrachet added inline comments.
================
Comment at: libc/config/linux/api.td:38
let Defn = [{
int *__errno_location();
#define errno (*__errno_location())
----------------
sivachandra wrote:
> I think `extern C` for c++ is missing here.
I'll add just commit this outside of this patch to not mess with the diff.
================
Comment at: libc/config/linux/api.td:45
+ let Macros = [
+ StaticAssertMacro,
+ ];
----------------
sivachandra wrote:
> Why not the `assert` macro?
`assert` shouldn't be inside the include guards of assert.h so I think it needs to be handwritten in assert.h.def
================
Comment at: libc/config/linux/api.td:48
+
+ let Functions = [
+ "__assert_fail",
----------------
sivachandra wrote:
> Instead, we should define the assert macro as:
>
> ```
> #ifdef __cplusplus
> extern C
> #endif
> void __assert_fail(...); // Don't use size_t for arg types
> #define assert ...
> #endif
> ```
Same as above. For reference the generated header looks like
```lang=cpp
//===---------------- C standard library header assert.h ------------------===//
//
// 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_ASSERT_H
#define LLVM_LIBC_ASSERT_H
#include <__llvm-libc-common.h>
#ifndef __cplusplus
#define static_assert _Static_assert
#endif
__BEGIN_C_DECLS
__END_C_DECLS
#ifdef __cplusplus
extern "C"
#endif
_Noreturn void __assert_fail(const char *, const char *,
unsigned, const char *);
#endif // LLVM_LIBC_ASSERT_H
// This file may be usefully included multiple times to change assert()'s
// definition based on NDEBUG.
#undef assert
#ifdef NDEBUG
#define assert(e) (void)0
#else
#define assert(e) \
((e) ? (void)0 : __assert_fail(#e, __FILE__, __LINE__, __PRETTY_FUNCTION__))
#endif
```
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D75420/new/
https://reviews.llvm.org/D75420
More information about the libc-commits
mailing list