From 7acb953031bed92c7420aaf1200d6732239e562e Mon Sep 17 00:00:00 2001 From: Chandler Carruth Date: Mon, 22 Nov 2010 08:06:31 +0000 Subject: [PATCH] Undo part of my previous commit to mm_malloc.h, going back to the use of 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 | 18 +++++------------- lib/Headers/xmmintrin.h | 4 ++++ test/Headers/x86-intrinsics-headers.c | 10 +++------- 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/lib/Headers/mm_malloc.h b/lib/Headers/mm_malloc.h index a402b57fd2..e7da543458 100644 --- a/lib/Headers/mm_malloc.h +++ b/lib/Headers/mm_malloc.h @@ -24,28 +24,20 @@ #ifndef __MM_MALLOC_H #define __MM_MALLOC_H -#include +#include #ifdef _WIN32 #include #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__, diff --git a/lib/Headers/xmmintrin.h b/lib/Headers/xmmintrin.h index 6f270f8e08..42dd3e8d3b 100644 --- a/lib/Headers/xmmintrin.h +++ b/lib/Headers/xmmintrin.h @@ -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 +#endif static __inline__ __m128 __attribute__((__always_inline__, __nodebug__)) _mm_add_ss(__m128 a, __m128 b) diff --git a/test/Headers/x86-intrinsics-headers.c b/test/Headers/x86-intrinsics-headers.c index ba833ec038..bdffddedfc 100644 --- a/test/Headers/x86-intrinsics-headers.c +++ b/test/Headers/x86-intrinsics-headers.c @@ -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 -#endif - #ifdef __SSE4_2__ // nmmintrin forwards to smmintrin. #include -- 2.40.0