]> granicus.if.org Git - clang/commitdiff
Undo part of my previous commit to mm_malloc.h, going back to the use of
authorChandler Carruth <chandlerc@gmail.com>
Mon, 22 Nov 2010 08:06:31 +0000 (08:06 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 22 Nov 2010 08:06:31 +0000 (08:06 +0000)
stdlib.h. There were numerous problems with forward declaring 'malloc' and
'free', but the most important is that these are reserved by POSIX and may be
implemented via a function-like macro.

As suggested by Dale Johannesen, I'm instead guarding the only include of this
in our builtin headers with __STDC_HOSTED__, and I've removed the include of
the header from the test suite. I'll discuss with folks whether we want to have
a hosted section of the test suite or not, and add it (and perhaps other tests)
back there if that's the direction.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@119958 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Headers/mm_malloc.h
lib/Headers/xmmintrin.h
test/Headers/x86-intrinsics-headers.c

index a402b57fd24467b4a64e8d4d6cd837abdcc16171..e7da5434587ae246ba5492ca662179db51ed6d57 100644 (file)
 #ifndef __MM_MALLOC_H
 #define __MM_MALLOC_H
 
-#include <stddef.h>
+#include <stdlib.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 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__));
+// 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.
 extern "C" int posix_memalign(void **memptr, size_t alignment, size_t size);
 #endif
-
 #endif
 
 static __inline__ void *__attribute__((__always_inline__, __nodebug__,
index 6f270f8e0829282c602510266ff9e8b18fd3241d..42dd3e8d3b8787aabf9ad222d04564bf2f628702 100644 (file)
@@ -34,7 +34,11 @@ typedef int __v4si __attribute__((__vector_size__(16)));
 typedef float __v4sf __attribute__((__vector_size__(16)));
 typedef float __m128 __attribute__((__vector_size__(16)));
 
+// This header should only be included in a hosted environment as it depends on
+// a standard library to provide allocation routines.
+#if __STDC_HOSTED__
 #include <mm_malloc.h>
+#endif
 
 static __inline__ __m128 __attribute__((__always_inline__, __nodebug__))
 _mm_add_ss(__m128 a, __m128 b)
index ba833ec0389367a9d45e9a593f5e0ecadfc5c4ab..bdffddedfc7b709671a7fd17417afd3d8aa2c0d6 100644 (file)
@@ -1,13 +1,9 @@
-// RUN: %clang -fsyntax-only %s
-// RUN: %clang -fsyntax-only -fno-lax-vector-conversions %s
-// RUN: %clangxx -fsyntax-only -x c++ %s
+// RUN: %clang -fsyntax-only -ffreestanding %s
+// RUN: %clang -fsyntax-only -ffreestanding -fno-lax-vector-conversions %s
+// RUN: %clangxx -fsyntax-only -ffreestanding -x c++ %s
 
 #if defined(i386) || defined(__x86_64__)
 
-#ifdef __MMX__
-#include <mm_malloc.h>
-#endif
-
 #ifdef __SSE4_2__
 // nmmintrin forwards to smmintrin.
 #include <nmmintrin.h>