summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2013-05-02 13:12:32 +0000
committerHans Wennborg <hans@hanshq.net>2013-05-02 13:12:32 +0000
commit4c02be3b836c2c2aece0490bdac6c45d5732987c (patch)
treea42cbf432d55ad00cff10c692949994601b1b1da
parentb2175b25a7525fbf6c347fcee62505ed45618026 (diff)
downloadbcm5719-llvm-4c02be3b836c2c2aece0490bdac6c45d5732987c.tar.gz
bcm5719-llvm-4c02be3b836c2c2aece0490bdac6c45d5732987c.zip
Make sure we define wchar_t related macros correctly in -fms-extensions mode.
This adds a test to make sure we define _WCHAR_T_DEFINED and _NATIVE_WCHAR_T_DEFINED correctly in the preprocessor, and updates stddef.h to set it when typedeffing wchar_t. llvm-svn: 180918
-rw-r--r--clang/lib/Headers/stddef.h3
-rw-r--r--clang/test/Headers/ms-wchar.c15
-rw-r--r--clang/test/Preprocessor/init.c16
3 files changed, 33 insertions, 1 deletions
diff --git a/clang/lib/Headers/stddef.h b/clang/lib/Headers/stddef.h
index 0c5c961d5e2..6a64d6d32a8 100644
--- a/clang/lib/Headers/stddef.h
+++ b/clang/lib/Headers/stddef.h
@@ -58,6 +58,9 @@ typedef __SIZE_TYPE__ rsize_t;
#if !defined(_WCHAR_T) || __has_feature(modules)
#if !__has_feature(modules)
#define _WCHAR_T
+#if defined(_MSC_EXTENSIONS)
+#define _WCHAR_T_DEFINED
+#endif
#endif
typedef __WCHAR_TYPE__ wchar_t;
#endif
diff --git a/clang/test/Headers/ms-wchar.c b/clang/test/Headers/ms-wchar.c
new file mode 100644
index 00000000000..f015fc77ee5
--- /dev/null
+++ b/clang/test/Headers/ms-wchar.c
@@ -0,0 +1,15 @@
+// RUN: %clang -fsyntax-only -target i386-pc-win32 %s
+
+#if defined(_WCHAR_T_DEFINED)
+#error "_WCHAR_T_DEFINED should not be defined in C99"
+#endif
+
+#include <stddef.h>
+
+#if !defined(_WCHAR_T_DEFINED)
+#error "_WCHAR_T_DEFINED should have been set by stddef.h"
+#endif
+
+#if defined(_NATIVE_WCHAR_T_DEFINED)
+#error "_NATIVE_WCHAR_T_DEFINED should not be defined"
+#endif
diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c
index c1519a8a7f1..b69c76ce1bf 100644
--- a/clang/test/Preprocessor/init.c
+++ b/clang/test/Preprocessor/init.c
@@ -88,10 +88,24 @@
// C94:#define __STDC_VERSION__ 199409L
//
//
-// RUN: %clang_cc1 -fms-extensions -triple i686-pc-win32 -fobjc-runtime=gcc -E -dM < /dev/null | FileCheck -check-prefix MSEXT %s
+// RUN: %clang_cc1 -fms-extensions -triple i686-pc-win32 -E -dM < /dev/null | FileCheck -check-prefix MSEXT %s
//
// MSEXT-NOT:#define __STDC__
// MSEXT:#define _INTEGRAL_MAX_BITS 64
+// MSEXT-NOT:#define _NATIVE_WCHAR_T_DEFINED 1
+// MSEXT-NOT:#define _WCHAR_T_DEFINED 1
+//
+//
+// RUN: %clang_cc1 -x c++ -fms-extensions -triple i686-pc-win32 -E -dM < /dev/null | FileCheck -check-prefix MSEXT-CXX %s
+//
+// MSEXT-CXX:#define _NATIVE_WCHAR_T_DEFINED 1
+// MSEXT-CXX:#define _WCHAR_T_DEFINED 1
+//
+//
+// RUN: %clang_cc1 -x c++ -fno-wchar -fms-extensions -triple i686-pc-win32 -E -dM < /dev/null | FileCheck -check-prefix MSEXT-CXX-NOWCHAR %s
+//
+// MSEXT-CXX-NOWCHAR-NOT:#define _NATIVE_WCHAR_T_DEFINED 1
+// MSEXT-CXX-NOWCHAR-NOT:#define _WCHAR_T_DEFINED 1
//
//
// RUN: %clang_cc1 -x objective-c -E -dM < /dev/null | FileCheck -check-prefix OBJC %s
OpenPOWER on IntegriCloud