mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 11:35:51 -04:00

error: 'error' diagnostics expected but not seen: File /vol/llvm/src/clang/local/test/Sema/wchar.c Line 22: initializing wide char array with non-wide string literal error: 'error' diagnostics seen but not expected: File /vol/llvm/src/clang/local/test/Sema/wchar.c Line 20: array initializer must be an initializer list File /vol/llvm/src/clang/local/test/Sema/wchar.c Line 22: array initializer must be an initializer list It turns out the definition is wrong, as can be seen in GCC's gcc/config/sol2.h: /* wchar_t is called differently in <wchar.h> for 32 and 64-bit compilations. This is called for by SCD 2.4.1, p. 6-83, Figure 6-65 (32-bit) and p. 6P-10, Figure 6.38 (64-bit). */ #undef WCHAR_TYPE #define WCHAR_TYPE (TARGET_64BIT ? "int" : "long int") The following patch implements this, and at the same time corrects the wint_t definition which is the same: /* Same for wint_t. See SCD 2.4.1, p. 6-83, Figure 6-66 (32-bit). There's no corresponding 64-bit definition, but this is what Solaris 8 <iso/wchar_iso.h> uses. */ #undef WINT_TYPE #define WINT_TYPE (TARGET_64BIT ? "int" : "long int") Clang :: Preprocessor/wchar_t.c and Clang :: Sema/format-strings.c need to be adjusted to account for that. Tested on i386-pc-solaris2.11, x86_64-pc-solaris2.11, and x86_64-pc-linux-gnu. Differential Revision: https://reviews.llvm.org/D62944 llvm-svn: 363612
29 lines
938 B
C
29 lines
938 B
C
// RUN: %clang_cc1 %s -fsyntax-only -verify
|
|
// RUN: %clang_cc1 %s -fsyntax-only -fwchar-type=short -fno-signed-wchar -verify -DSHORT_WCHAR
|
|
|
|
typedef __WCHAR_TYPE__ wchar_t;
|
|
|
|
#if defined(_WIN32) || defined(_M_IX86) || defined(__CYGWIN__) \
|
|
|| defined(_M_X64) || defined(__ORBIS__) || defined(SHORT_WCHAR)
|
|
#define WCHAR_T_TYPE unsigned short
|
|
#elif defined(__arm) || defined(__aarch64__)
|
|
#define WCHAR_T_TYPE unsigned int
|
|
#elif defined(__sun)
|
|
#if defined(__LP64__)
|
|
#define WCHAR_T_TYPE int
|
|
#else
|
|
#define WCHAR_T_TYPE long
|
|
#endif
|
|
#else /* Solaris. */
|
|
#define WCHAR_T_TYPE int
|
|
#endif
|
|
|
|
int check_wchar_size[sizeof(*L"") == sizeof(wchar_t) ? 1 : -1];
|
|
|
|
void foo() {
|
|
WCHAR_T_TYPE t1[] = L"x";
|
|
wchar_t tab[] = L"x";
|
|
WCHAR_T_TYPE t2[] = "x"; // expected-error {{initializing wide char array with non-wide string literal}}
|
|
char t3[] = L"x"; // expected-error {{initializing char array with wide string literal}}
|
|
}
|