re PR preprocessor/37324 (FAIL: gcc.dg/utf-array.c (test for errors))

PR preprocessor/37324
	* lib/target-supports.exp
	(check_effective_target_wchar_t_char16_t_compatible,
	check_effective_target_wchar_t_char32_t_compatible): New.
	* gcc.dg/utf-array.c: Use __CHAR{16,32}_TYPE__ macros in typedefs.
	Only require from incompatible errors for char{16,32}_t vs. wchar_t
	initializations if those types are indeed incompatible.

From-SVN: r140421
This commit is contained in:
Jakub Jelinek 2008-09-17 18:05:11 +02:00 committed by Jakub Jelinek
parent 71b1071304
commit 1b829d45a8
3 changed files with 36 additions and 6 deletions

View File

@ -1,3 +1,13 @@
2008-09-17 Jakub Jelinek <jakub@redhat.com>
PR preprocessor/37324
* lib/target-supports.exp
(check_effective_target_wchar_t_char16_t_compatible,
check_effective_target_wchar_t_char32_t_compatible): New.
* gcc.dg/utf-array.c: Use __CHAR{16,32}_TYPE__ macros in typedefs.
Only require from incompatible errors for char{16,32}_t vs. wchar_t
initializations if those types are indeed incompatible.
2008-09-16 Janis Johnson <janis187@us.ibm.com>
PR testsuite/25241

View File

@ -5,8 +5,8 @@
#include <wchar.h>
typedef short unsigned int char16_t;
typedef unsigned int char32_t;
typedef __CHAR16_TYPE__ char16_t;
typedef __CHAR32_TYPE__ char32_t;
const char s_0[] = "ab";
const char s_1[] = u"ab"; /* { dg-error "from wide string" } */
@ -16,7 +16,7 @@ const char s_3[] = L"ab"; /* { dg-error "from wide string" } */
const char16_t s16_0[] = "ab"; /* { dg-error "from non-wide" } */
const char16_t s16_1[] = u"ab";
const char16_t s16_2[] = U"ab"; /* { dg-error "from incompatible" } */
const char16_t s16_3[] = L"ab"; /* { dg-error "from incompatible" } */
const char16_t s16_3[] = L"ab"; /* { dg-error "from incompatible" { target !wchar_t_char16_t_compatible } } */
const char16_t s16_4[0] = u"ab"; /* { dg-warning "chars is too long" } */
const char16_t s16_5[1] = u"ab"; /* { dg-warning "chars is too long" } */
@ -27,7 +27,7 @@ const char16_t s16_8[4] = u"ab";
const char32_t s32_0[] = "ab"; /* { dg-error "from non-wide" } */
const char32_t s32_1[] = u"ab"; /* { dg-error "from incompatible" } */
const char32_t s32_2[] = U"ab";
const char32_t s32_3[] = L"ab"; /* { dg-error "from incompatible" } */
const char32_t s32_3[] = L"ab"; /* { dg-error "from incompatible" { target !wchar_t_char32_t_compatible } } */
const char32_t s32_4[0] = U"ab"; /* { dg-warning "chars is too long" } */
const char32_t s32_5[1] = U"ab"; /* { dg-warning "chars is too long" } */
@ -36,6 +36,6 @@ const char32_t s32_7[3] = U"ab";
const char32_t s32_8[4] = U"ab";
const wchar_t sw_0[] = "ab"; /* { dg-error "from non-wide" } */
const wchar_t sw_1[] = u"ab"; /* { dg-error "from incompatible" } */
const wchar_t sw_2[] = U"ab"; /* { dg-error "from incompatible" } */
const wchar_t sw_1[] = u"ab"; /* { dg-error "from incompatible" { target !wchar_t_char16_t_compatible } } */
const wchar_t sw_2[] = U"ab"; /* { dg-error "from incompatible" { target !wchar_t_char32_t_compatible } } */
const wchar_t sw_3[] = L"ab";

View File

@ -2592,3 +2592,23 @@ proc check_effective_target_avx { } {
}
} "-O2 -mavx" ]
}
# Return 1 if C wchar_t type is compatible with char16_t.
proc check_effective_target_wchar_t_char16_t_compatible { } {
return [check_no_compiler_messages wchar_t_char16_t object {
__WCHAR_TYPE__ wc;
__CHAR16_TYPE__ *p16 = &wc;
char t[(((__CHAR16_TYPE__) -1) < 0 == ((__WCHAR_TYPE__) -1) < 0) ? 1 : -1];
}]
}
# Return 1 if C wchar_t type is compatible with char32_t.
proc check_effective_target_wchar_t_char32_t_compatible { } {
return [check_no_compiler_messages wchar_t_char32_t object {
__WCHAR_TYPE__ wc;
__CHAR32_TYPE__ *p32 = &wc;
char t[(((__CHAR32_TYPE__) -1) < 0 == ((__WCHAR_TYPE__) -1) < 0) ? 1 : -1];
}]
}