aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Headers/mm_malloc.h18
-rw-r--r--lib/Headers/xmmintrin.h4
-rw-r--r--test/Headers/x86-intrinsics-headers.c10
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 <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__,
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 <mm_malloc.h>
+#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 <mm_malloc.h>
-#endif
-
#ifdef __SSE4_2__
// nmmintrin forwards to smmintrin.
#include <nmmintrin.h>