зеркало из https://github.com/microsoft/clang-1.git
Futher reduce the includes of our builtin headers, and teach limits.h to avoid
include_next when not hosted or unavailable. This follows the pattern in stdint.h and allows these headers to work even in a freestanding configuration without a standard library. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@119343 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
b168cbfa1c
Коммит
ac21a21a49
|
@ -31,8 +31,12 @@
|
|||
#define _GCC_LIMITS_H_
|
||||
#endif
|
||||
|
||||
/* System headers include a number of constants from POSIX in <limits.h>. */
|
||||
/* System headers include a number of constants from POSIX in <limits.h>.
|
||||
Include it if we're hosted. */
|
||||
#if __STDC_HOSTED__ && \
|
||||
defined(__has_include_next) && __has_include_next(<limits.h>)
|
||||
#include_next <limits.h>
|
||||
#endif
|
||||
|
||||
/* Many system headers try to "help us out" by defining these. No really, we
|
||||
know how big each datatype is. */
|
||||
|
|
|
@ -24,20 +24,28 @@
|
|||
#ifndef __MM_MALLOC_H
|
||||
#define __MM_MALLOC_H
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <malloc.h>
|
||||
#else
|
||||
|
||||
// Forward declare allocation functions to allow this header to parse without
|
||||
// any system headers.
|
||||
#ifndef __cplusplus
|
||||
extern void free(void *ptr);
|
||||
extern void *malloc(size_t size) __attribute__((__malloc__));
|
||||
extern int posix_memalign(void **memptr, size_t alignment, size_t size);
|
||||
#else
|
||||
// Some systems (e.g. those with GNU libc) declare posix_memalign with an
|
||||
// exception specifier. Via an "egregious workaround" in
|
||||
// Sema::CheckEquivalentExceptionSpec, Clang accepts the following as a valid
|
||||
// redeclaration of glibc's declaration.
|
||||
// Some systems (e.g. those with GNU libc) declare some of these functions with
|
||||
// an exception specifier. Via an "egregious workaround" in
|
||||
// Sema::CheckEquivalentExceptionSpec, Clang accepts the following as valid
|
||||
// redeclarations of glibc's declarations.
|
||||
extern "C" void free(void *ptr);
|
||||
extern "C" void *malloc(size_t size) __attribute__((__malloc__));
|
||||
extern "C" int posix_memalign(void **memptr, size_t alignment, size_t size);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
static __inline__ void *__attribute__((__always_inline__, __nodebug__,
|
||||
|
|
Загрузка…
Ссылка в новой задаче