diff options
author | Hans Wennborg <hans@hanshq.net> | 2013-05-02 13:12:32 +0000 |
---|---|---|
committer | Hans Wennborg <hans@hanshq.net> | 2013-05-02 13:12:32 +0000 |
commit | 4c02be3b836c2c2aece0490bdac6c45d5732987c (patch) | |
tree | a42cbf432d55ad00cff10c692949994601b1b1da | |
parent | b2175b25a7525fbf6c347fcee62505ed45618026 (diff) | |
download | bcm5719-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.h | 3 | ||||
-rw-r--r-- | clang/test/Headers/ms-wchar.c | 15 | ||||
-rw-r--r-- | clang/test/Preprocessor/init.c | 16 |
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 |