diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2010-11-16 10:07:43 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2010-11-16 10:07:43 +0000 |
commit | ac21a21a49131544777f3bd56d2351a4072954ca (patch) | |
tree | ed78b8a61c700aebbab24e197200d399db0b7ed3 | |
parent | b168cbfa1ca9b50115f8dd787d11d272fff2ad81 (diff) |
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
-rw-r--r-- | lib/Headers/limits.h | 6 | ||||
-rw-r--r-- | lib/Headers/mm_malloc.h | 18 |
2 files changed, 18 insertions, 6 deletions
diff --git a/lib/Headers/limits.h b/lib/Headers/limits.h index 26275337d5..ecd09a4a24 100644 --- a/lib/Headers/limits.h +++ b/lib/Headers/limits.h @@ -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. */ diff --git a/lib/Headers/mm_malloc.h b/lib/Headers/mm_malloc.h index e7da543458..a402b57fd2 100644 --- a/lib/Headers/mm_malloc.h +++ b/lib/Headers/mm_malloc.h @@ -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__, |