summaryrefslogtreecommitdiffstats
path: root/clang/lib/Headers/stddef.h
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2013-03-22 00:10:49 +0000
committerDouglas Gregor <dgregor@apple.com>2013-03-22 00:10:49 +0000
commit96efb4a4425ebe24c783da1af6c6ae05d80ae887 (patch)
tree1206fa5b3720f89d7a9522360badc67d1194e6a2 /clang/lib/Headers/stddef.h
parent9e65aa35a03a94882a0f1d5dd161cb2163f4796d (diff)
downloadbcm5719-llvm-96efb4a4425ebe24c783da1af6c6ae05d80ae887.tar.gz
bcm5719-llvm-96efb4a4425ebe24c783da1af6c6ae05d80ae887.zip
<rdar://problem/13479214> Make Clang's <stddef.h> robust against system headers defining size_t/ptrdiff_t/wchar_t.
Clang's <stddef.h> provides definitions for the C standard library types size_t, ptrdiff_t, and wchar_t. However, the system's C standard library headers tend to provide the same typedefs, and the two generally avoid each other using the macros _SIZE_T/_PTRDIFF_T/_WCHAR_T. With modules, however, we need to see *all* of the places where these types are defined, so provide the typedefs (ignoring the macros) when modules are enabled. llvm-svn: 177686
Diffstat (limited to 'clang/lib/Headers/stddef.h')
-rw-r--r--clang/lib/Headers/stddef.h24
1 files changed, 19 insertions, 5 deletions
diff --git a/clang/lib/Headers/stddef.h b/clang/lib/Headers/stddef.h
index ad5dc21fb04..52962248f67 100644
--- a/clang/lib/Headers/stddef.h
+++ b/clang/lib/Headers/stddef.h
@@ -26,17 +26,28 @@
#ifndef __STDDEF_H
#define __STDDEF_H
-#ifndef _PTRDIFF_T
+#if !defined(_PTRDIFF_T) || __has_feature(modules)
+/* Always define ptrdiff_t when modules are available. */
+#if !__has_feature(modules)
#define _PTRDIFF_T
+#endif
typedef __PTRDIFF_TYPE__ ptrdiff_t;
#endif
-#ifndef _SIZE_T
+
+#if !defined(_SIZE_T) || __has_feature(modules)
+/* Always define size_t when modules are available. */
+#if !__has_feature(modules)
#define _SIZE_T
+#endif
typedef __SIZE_TYPE__ size_t;
#endif
+
#ifndef __cplusplus
-#ifndef _WCHAR_T
+/* Always define wchar_t when modules are available. */
+#if !defined(_WCHAR_T) || __has_feature(modules)
+#if !__has_feature(modules)
#define _WCHAR_T
+#endif
typedef __WCHAR_TYPE__ wchar_t;
#endif
#endif
@@ -66,9 +77,12 @@ using ::std::nullptr_t;
/* Some C libraries expect to see a wint_t here. Others (notably MinGW) will use
__WINT_TYPE__ directly; accommodate both by requiring __need_wint_t */
#if defined(__need_wint_t)
-#if !defined(_WINT_T)
+/* Always define wint_t when modules are available. */
+#if !defined(_WINT_T) || __has_feature(modules)
+#if !__has_feature(modules)
#define _WINT_T
+#endif
typedef __WINT_TYPE__ wint_t;
-#endif /* _WINT_T */
+#endif
#undef __need_wint_t
#endif /* __need_wint_t */
OpenPOWER on IntegriCloud