]> granicus.if.org Git - clang/commitdiff
Futher reduce the includes of our builtin headers, and teach limits.h to avoid
authorChandler Carruth <chandlerc@gmail.com>
Tue, 16 Nov 2010 10:07:43 +0000 (10:07 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Tue, 16 Nov 2010 10:07:43 +0000 (10:07 +0000)
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

lib/Headers/limits.h
lib/Headers/mm_malloc.h

index 26275337d5830c1c65f268187f9975ad47853507..ecd09a4a246d331be58e8d7343753f26853b6ecb 100644 (file)
 #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. */
index e7da5434587ae246ba5492ca662179db51ed6d57..a402b57fd24467b4a64e8d4d6cd837abdcc16171 100644 (file)
 #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__,