From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 10765 invoked by alias); 27 Dec 2018 20:49:18 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 10753 invoked by uid 89); 27 Dec 2018 20:49:17 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=Updated, Lab, nested X-HELO: smtp113.ord1d.emailsrvr.com Received: from smtp113.ord1d.emailsrvr.com (HELO smtp113.ord1d.emailsrvr.com) (184.106.54.113) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 27 Dec 2018 20:49:06 +0000 Received: from smtp15.relay.ord1d.emailsrvr.com (localhost [127.0.0.1]) by smtp15.relay.ord1d.emailsrvr.com (SMTP Server) with ESMTP id 09E8D603C2; Thu, 27 Dec 2018 15:49:05 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=honermann.net; s=20180930-2j89z3ji; t=1545943744; bh=Vo0N71eQoGDb1nCiIy2aJj2DVu4eJW6b04aXo7CHAQs=; h=To:From:Subject:Date:From; b=KydIkS/DjnQPPp5hzLKk09AnzfNkdrQNn+ulSZ5LCLNrTaEeEgAJ4piTUlba92+TG vZyK0NyWqgyIZY0WHFddbPaUpVlbEbyzaIPVa/mgB9b/1Jg/VgzOKknI8Zj5Mje89S kcIsHnQFew+XenBVWrJYotGE6YIqMgN+29Qfmr5U= X-Auth-ID: tom@honermann.net Received: by smtp15.relay.ord1d.emailsrvr.com (Authenticated sender: tom-AT-honermann.net) with ESMTPSA id 978E3602FE; Thu, 27 Dec 2018 15:49:04 -0500 (EST) X-Sender-Id: tom@honermann.net Received: from [192.168.1.22] (pool-71-176-235-158.rcmdva.fios.verizon.net [71.176.235.158]) (using TLSv1.2 with cipher AES128-SHA) by 0.0.0.0:25 (trex/5.7.12); Thu, 27 Dec 2018 15:49:04 -0500 To: gcc-patches From: Tom Honermann Subject: PATCH: Updated error messages for ill-formed cases of array initialization by string literal Cc: Jason Merrill Message-ID: Date: Thu, 27 Dec 2018 21:29:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------FE35788081CB782350B1BF4C" X-IsSubscribed: yes X-SW-Source: 2018-12/txt/msg01719.txt.bz2 This is a multi-part message in MIME format. --------------FE35788081CB782350B1BF4C Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 2141 As requested by Jason in the review of the P0482 (char8_t) core language changes, this patch includes updates to the error messages emitted for ill-formed cases of array initialization with a string literal. With these changes, error messages that previously looked something like these: - "char-array initialized from wide string" - "wide character array initialized from non-wide string" - "wide character array initialized from incompatible wide string" now look like: - "cannot initialize array of type 'char' from a string literal with type array of 'short unsigned int'" - "cannot initialize array of type 'short unsigned int' from a string literal with type array of 'char'" - "cannot initialize array of type 'short unsigned int' from a string literal with type array of 'unsigned int'" These changes affect both the C and C++ front ends. These changes have dependencies on the (revised) set of patches submitted for P0482 (char8_t) and will not apply cleanly without them. Tested on x86_64-linux. gcc/c/ChangeLog: 2018-12-26 Tom Honermann * c-typeck.c (digest_init): Revised the error message produced for ill-formed cases of array initialization with a string literal. gcc/cp/ChangeLog: 2018-12-26 Tom Honermann * typeck2.c (digest_init_r): Revised the error message produced for ill-formed cases of array initialization with a string literal. gcc/testsuite/ChangeLog: 2018-12-26 Tom Honermann * gcc/testsuite/g++.dg/ext/char8_t-init-2.C: Updated the expected error messages for ill-formed cases of array initialization with a string literal. * gcc/testsuite/g++.dg/ext/utf-array-short-wchar.C: Likewise. * gcc/testsuite/g++.dg/ext/utf-array.C: Likewise. * gcc/testsuite/g++.dg/ext/utf8-2.C: Likewise. * gcc/testsuite/gcc.dg/init-string-2.c: Likewise. * gcc/testsuite/gcc.dg/pr61096-1.c: Likewise. * gcc/testsuite/gcc.dg/utf-array-short-wchar.c: Likewise. * gcc/testsuite/gcc.dg/utf-array.c: Likewise. * gcc/testsuite/gcc.dg/utf8-2.c: Likewise. Tom. --------------FE35788081CB782350B1BF4C Content-Type: text/x-patch; name="array-init-error-msg.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="array-init-error-msg.patch" Content-length: 25529 diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c index 9d09b8d65fd..4d2129dff2f 100644 --- a/gcc/c/c-typeck.c +++ b/gcc/c/c-typeck.c @@ -7447,6 +7447,7 @@ digest_init (location_t init_loc, tree type, tree init, tree origtype, { struct c_expr expr; tree typ2 = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (inside_init))); + bool incompat_string_cst = false; expr.value = inside_init; expr.original_code = (strict_string ? STRING_CST : ERROR_MARK); expr.original_type = NULL; @@ -7464,27 +7465,22 @@ digest_init (location_t init_loc, tree type, tree init, tree origtype, { if (typ2 != char_type_node) { - error_init (init_loc, "char-array initialized from wide " - "string"); - return error_mark_node; + incompat_string_cst = true; } } - else + else if (!comptypes(typ1, typ2)) { - if (typ2 == char_type_node) - { - error_init (init_loc, "wide character array initialized " - "from non-wide string"); - return error_mark_node; - } - else if (!comptypes(typ1, typ2)) - { - error_init (init_loc, "wide character array initialized " - "from incompatible wide string"); - return error_mark_node; - } + incompat_string_cst = true; } + if (incompat_string_cst) + { + error_at (init_loc, "cannot initialize array of type %qT from " + "a string literal with type array of %qT", + typ1, typ2); + return error_mark_node; + } + if (TYPE_DOMAIN (type) != NULL_TREE && TYPE_SIZE (type) != NULL_TREE && TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST) diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c index 782fd7f9cd5..ae3b53dc001 100644 --- a/gcc/cp/typeck2.c +++ b/gcc/cp/typeck2.c @@ -1060,46 +1060,43 @@ digest_init_r (tree type, tree init, int nested, int flags, && TREE_CODE (init) == STRING_CST) { tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init))); + bool incompat_string_cst = false; - if (TYPE_PRECISION (typ1) == BITS_PER_UNIT) + if (typ1 != char_type) { - if (typ1 != char8_type_node && char_type == char8_type_node) + /* The array element type does not match the initializing string + literal element type. This is only allowed when initializing + an array of signed char or unsigned char. */ + if (TYPE_PRECISION (typ1) == BITS_PER_UNIT) { - if (complain & tf_error) - error_at (loc, "char-array initialized from UTF-8 string"); - return error_mark_node; - } - else if (typ1 == char8_type_node && char_type == char_type_node) - { - if (complain & tf_error) - error_at (loc, "char8_t-array initialized from ordinary " - "string"); - return error_mark_node; + if (typ1 == char8_type_node) + { + /* char8_t array initialized with a non-char8_t + string literal. */ + incompat_string_cst = true; + } + else if (char_type != char_type_node) + { + /* singed or unsigned char array initialized with a + char8_t or wide string literal. */ + incompat_string_cst = true; + } } - else if (char_type != char_type_node - && char_type != char8_type_node) + else { - if (complain & tf_error) - error_at (loc, "char-array initialized from wide string"); - return error_mark_node; + /* Wide char array initialized with a string literal with a + mismatched element type. */ + incompat_string_cst = true; } } - else + + if (incompat_string_cst) { - if (char_type == char_type_node) - { - if (complain & tf_error) - error_at (loc, - "int-array initialized from non-wide string"); - return error_mark_node; - } - else if (char_type != typ1) - { - if (complain & tf_error) - error_at (loc, "int-array initialized from incompatible " - "wide string"); - return error_mark_node; - } + if (complain & tf_error) + error_at (loc, "cannot initialize array of type %qT from " + "a string literal with type array of %qT", + typ1, char_type); + return error_mark_node; } if (nested == 2 && !TYPE_DOMAIN (type)) diff --git a/gcc/testsuite/g++.dg/ext/char8_t-init-2.C b/gcc/testsuite/g++.dg/ext/char8_t-init-2.C index 7a7a3a6b208..c713bc12266 100644 --- a/gcc/testsuite/g++.dg/ext/char8_t-init-2.C +++ b/gcc/testsuite/g++.dg/ext/char8_t-init-2.C @@ -21,13 +21,13 @@ const char8_t (&rca4)[2] = u8"x"; const char8_t (&rca5)[2] = u"x"; // { dg-error "invalid initialization of reference of type .const char8_t ....... from expression of type .const char16_t ...." "char8_t" } char ca1[] = "x"; -char ca2[] = u8"x"; // { dg-error "char-array initialized from UTF-8 string" "char8_t" } -char8_t ca3[] = "x"; // { dg-error "char8_t-array initialized from ordinary string" "char8_t" } +char ca2[] = u8"x"; // { dg-error "from a string literal with type array of .char8_t." "char8_t" } +char8_t ca3[] = "x"; // { dg-error "from a string literal with type array of .char." "char8_t" } char8_t ca4[] = u8"x"; -char8_t ca5[] = u"x"; // { dg-error "char-array initialized from wide string" "char8_t" } +char8_t ca5[] = u"x"; // { dg-error "from a string literal with type array of .char16_t." "char8_t" } signed char sca1[] = "x"; -signed char sca2[] = u8"x"; // { dg-error "char-array initialized from UTF-8 string" "char8_t" } +signed char sca2[] = u8"x"; // { dg-error "from a string literal with type array of .char8_t." "char8_t" } unsigned char uca1[] = "x"; -unsigned char uca2[] = u8"x"; // { dg-error "char-array initialized from UTF-8 string" "char8_t" } +unsigned char uca2[] = u8"x"; // { dg-error "from a string literal with type array of .char8_t." "char8_t" } diff --git a/gcc/testsuite/g++.dg/ext/utf-array-short-wchar.C b/gcc/testsuite/g++.dg/ext/utf-array-short-wchar.C index 6e0e4a0c7e9..617e9f0d4bf 100644 --- a/gcc/testsuite/g++.dg/ext/utf-array-short-wchar.C +++ b/gcc/testsuite/g++.dg/ext/utf-array-short-wchar.C @@ -4,16 +4,16 @@ /* { dg-options "-fshort-wchar" } */ const char s_0[] = "ab"; -const char s_1[] = u"ab"; /* { dg-error "from wide string" } */ -const char s_2[] = U"ab"; /* { dg-error "from wide string" } */ -const char s_3[] = L"ab"; /* { dg-error "from wide string" } */ +const char s_1[] = u"ab"; /* { dg-error "from a string literal with type array of .char16_t." } */ +const char s_2[] = U"ab"; /* { dg-error "from a string literal with type array of .char32_t." } */ +const char s_3[] = L"ab"; /* { dg-error "from a string literal with type array of .wchar_t." } */ const char s_4[] = u8"ab"; -const char16_t s16_0[] = "ab"; /* { dg-error "from non-wide" } */ +const char16_t s16_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ 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_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char16_t s16_2[] = U"ab"; /* { dg-error "from a string literal with type array of .char32_t." } */ +const char16_t s16_3[] = L"ab"; /* { dg-error "from a string literal with type array of .wchar_t." } */ +const char16_t s16_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char16_t s16_5[0] = u"ab"; /* { dg-error "chars is too long" } */ const char16_t s16_6[1] = u"ab"; /* { dg-error "chars is too long" } */ @@ -21,11 +21,11 @@ const char16_t s16_7[2] = u"ab"; /* { dg-error "chars is too long" } */ const char16_t s16_8[3] = u"ab"; const char16_t s16_9[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_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ +const char32_t s32_1[] = u"ab"; /* { dg-error "from a string literal with type array of .char16_t." } */ const char32_t s32_2[] = U"ab"; -const char32_t s32_3[] = L"ab"; /* { dg-error "from incompatible" } */ -const char32_t s32_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char32_t s32_3[] = L"ab"; /* { dg-error "from a string literal with type array of .wchar_t." } */ +const char32_t s32_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char32_t s32_5[0] = U"ab"; /* { dg-error "chars is too long" } */ const char32_t s32_6[1] = U"ab"; /* { dg-error "chars is too long" } */ @@ -33,8 +33,8 @@ const char32_t s32_7[2] = U"ab"; /* { dg-error "chars is too long" } */ const char32_t s32_8[3] = U"ab"; const char32_t s32_9[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_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ +const wchar_t sw_1[] = u"ab"; /* { dg-error "from a string literal with type array of .char16_t." } */ +const wchar_t sw_2[] = U"ab"; /* { dg-error "from a string literal with type array of .char32_t." } */ const wchar_t sw_3[] = L"ab"; -const wchar_t sw_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const wchar_t sw_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ diff --git a/gcc/testsuite/g++.dg/ext/utf-array.C b/gcc/testsuite/g++.dg/ext/utf-array.C index fcdf75d7650..3e77c880963 100644 --- a/gcc/testsuite/g++.dg/ext/utf-array.C +++ b/gcc/testsuite/g++.dg/ext/utf-array.C @@ -4,16 +4,16 @@ // { dg-options "" } const char s_0[] = "ab"; -const char s_1[] = u"ab"; /* { dg-error "from wide string" } */ -const char s_2[] = U"ab"; /* { dg-error "from wide string" } */ -const char s_3[] = L"ab"; /* { dg-error "from wide string" } */ +const char s_1[] = u"ab"; /* { dg-error "from a string literal with type array of .char16_t." } */ +const char s_2[] = U"ab"; /* { dg-error "from a string literal with type array of .char32_t." } */ +const char s_3[] = L"ab"; /* { dg-error "from a string literal with type array of .wchar_t." } */ const char s_4[] = u8"ab"; -const char16_t s16_0[] = "ab"; /* { dg-error "from non-wide" } */ +const char16_t s16_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ 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_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char16_t s16_2[] = U"ab"; /* { dg-error "from a string literal with type array of .char32_t." } */ +const char16_t s16_3[] = L"ab"; /* { dg-error "from a string literal with type array of .wchar_t." } */ +const char16_t s16_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char16_t s16_5[0] = u"ab"; /* { dg-error "chars is too long" } */ const char16_t s16_6[1] = u"ab"; /* { dg-error "chars is too long" } */ @@ -21,11 +21,11 @@ const char16_t s16_7[2] = u"ab"; /* { dg-error "chars is too long" } */ const char16_t s16_8[3] = u"ab"; const char16_t s16_9[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_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ +const char32_t s32_1[] = u"ab"; /* { dg-error "from a string literal with type array of .char16_t." } */ const char32_t s32_2[] = U"ab"; -const char32_t s32_3[] = L"ab"; /* { dg-error "from incompatible" } */ -const char32_t s32_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char32_t s32_3[] = L"ab"; /* { dg-error "from a string literal with type array of .wchar_t." } */ +const char32_t s32_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char32_t s32_5[0] = U"ab"; /* { dg-error "chars is too long" } */ const char32_t s32_6[1] = U"ab"; /* { dg-error "chars is too long" } */ @@ -33,8 +33,8 @@ const char32_t s32_7[2] = U"ab"; /* { dg-error "chars is too long" } */ const char32_t s32_8[3] = U"ab"; const char32_t s32_9[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_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ +const wchar_t sw_1[] = u"ab"; /* { dg-error "from a string literal with type array of .char16_t." } */ +const wchar_t sw_2[] = U"ab"; /* { dg-error "from a string literal with type array of .char32_t." } */ const wchar_t sw_3[] = L"ab"; -const wchar_t sw_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const wchar_t sw_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ diff --git a/gcc/testsuite/g++.dg/ext/utf8-2.C b/gcc/testsuite/g++.dg/ext/utf8-2.C index bafe6e8351c..abf60430176 100644 --- a/gcc/testsuite/g++.dg/ext/utf8-2.C +++ b/gcc/testsuite/g++.dg/ext/utf8-2.C @@ -2,9 +2,9 @@ // { dg-options "" } const char s0[] = u8"ab"; -const char16_t s1[] = u8"ab"; // { dg-error "from non-wide" } -const char32_t s2[] = u8"ab"; // { dg-error "from non-wide" } -const wchar_t s3[] = u8"ab"; // { dg-error "from non-wide" } +const char16_t s1[] = u8"ab"; // { dg-error "from a string literal with type array of .char." } +const char32_t s2[] = u8"ab"; // { dg-error "from a string literal with type array of .char." } +const wchar_t s3[] = u8"ab"; // { dg-error "from a string literal with type array of .char." } const char t0[0] = u8"ab"; // { dg-error "chars is too long" } const char t1[1] = u8"ab"; // { dg-error "chars is too long" } diff --git a/gcc/testsuite/gcc.dg/init-string-2.c b/gcc/testsuite/gcc.dg/init-string-2.c index 9efd44b3d2f..9b11073c913 100644 --- a/gcc/testsuite/gcc.dg/init-string-2.c +++ b/gcc/testsuite/gcc.dg/init-string-2.c @@ -28,8 +28,8 @@ uchar a8[] = "foo"; /* { dg-error "string constant" "a8" } */ const schar a9[] = "foo"; /* { dg-error "string constant" "a9" } */ short a10[] = L"foo"; /* { dg-error "string constant" "a10" } */ const sshrt a11[] = L"foo"; /* { dg-error "string constant" "a11" } */ -char a12[] = L"foo"; /* { dg-error "from wide string" "a12" } */ -wchar_t a13[] = "foo"; /* { dg-error "non-wide string" "a13" } */ +char a12[] = L"foo"; /* { dg-error "from a string literal with type array of .short unsigned int." "a12" } */ +wchar_t a13[] = "foo"; /* { dg-error "from a string literal with type array of .char." "a13" } */ char b0[] = { "foo" }; const signed char b2[4] = { "foo" }; @@ -43,8 +43,8 @@ uchar b8[] = { "foo" }; /* { dg-error "string constant" "b8" } */ const schar b9[] = { "foo" }; /* { dg-error "string constant" "b9" } */ short b10[] = { L"foo" }; /* { dg-error "string constant" "b10" } */ const sshrt b11[] = { L"foo" }; /* { dg-error "string constant" "b11" } */ -char b12[] = { L"foo" }; /* { dg-error "from wide string" "b12" } */ -wchar_t b13[] = { "foo" }; /* { dg-error "non-wide string" "b13" } */ +char b12[] = { L"foo" }; /* { dg-error "from a string literal with type array of .short unsigned int." "b12" } */ +wchar_t b13[] = { "foo" }; /* { dg-error "from a string literal with type array of .char." "b13" } */ struct s { signed char a[10]; int b; ushrt c[10]; }; diff --git a/gcc/testsuite/gcc.dg/pr61096-1.c b/gcc/testsuite/gcc.dg/pr61096-1.c index 6678d812eb5..c414d0a472c 100644 --- a/gcc/testsuite/gcc.dg/pr61096-1.c +++ b/gcc/testsuite/gcc.dg/pr61096-1.c @@ -19,9 +19,9 @@ struct g struct f f; /* { dg-warning "invalid use of structure with flexible array member" } */ }; -char w1[] = L"foo"; /* { dg-error "13:char-array initialized from wide string" } */ -__WCHAR_TYPE__ w2[] = "foo"; /* { dg-error "23:wide character array initialized from non-wide string" } */ -__WCHAR_TYPE__ w3[] = U"foo"; /* { dg-error "23:wide character array initialized from incompatible wide string" } */ +char w1[] = L"foo"; /* { dg-error "13:array of type .char. from a string literal with type array of .short unsigned int." } */ +__WCHAR_TYPE__ w2[] = "foo"; /* { dg-error "23:array of type .short unsigned int. from a string literal with type array of .char." } */ +__WCHAR_TYPE__ w3[] = U"foo"; /* { dg-error "23:array of type .short unsigned int. from a string literal with type array of .unsigned int." } */ schar a1[] = "foo"; /* { dg-error "14:array of inappropriate type initialized from string constant" } */ int a2[] = (int[]) { 1 }; /* { dg-warning "12:initializer element is not constant" } */ diff --git a/gcc/testsuite/gcc.dg/utf-array-short-wchar.c b/gcc/testsuite/gcc.dg/utf-array-short-wchar.c index c5da939f34e..1691bbc0475 100644 --- a/gcc/testsuite/gcc.dg/utf-array-short-wchar.c +++ b/gcc/testsuite/gcc.dg/utf-array-short-wchar.c @@ -10,16 +10,16 @@ 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" } */ -const char s_2[] = U"ab"; /* { dg-error "from wide string" } */ -const char s_3[] = L"ab"; /* { dg-error "from wide string" } */ +const char s_1[] = u"ab"; /* { dg-error "from a string literal with type array of .short unsigned int." } */ +const char s_2[] = U"ab"; /* { dg-error "from a string literal with type array of .unsigned int." } */ +const char s_3[] = L"ab"; /* { dg-error "from a string literal with type array of .short unsigned int." } */ const char s_4[] = u8"ab"; -const char16_t s16_0[] = "ab"; /* { dg-error "from non-wide" } */ +const char16_t s16_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ const char16_t s16_1[] = u"ab"; -const char16_t s16_2[] = U"ab"; /* { dg-error "from incompatible" } */ +const char16_t s16_2[] = U"ab"; /* { dg-error "from a string literal with type array of .unsigned int." } */ const char16_t s16_3[] = L"ab"; -const char16_t s16_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char16_t s16_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char16_t s16_5[0] = u"ab"; /* { dg-warning "chars is too long" } */ const char16_t s16_6[1] = u"ab"; /* { dg-warning "chars is too long" } */ @@ -27,11 +27,11 @@ const char16_t s16_7[2] = u"ab"; const char16_t s16_8[3] = u"ab"; const char16_t s16_9[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_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ +const char32_t s32_1[] = u"ab"; /* { dg-error "from a string literal with type array of .short unsigned int." } */ const char32_t s32_2[] = U"ab"; -const char32_t s32_3[] = L"ab"; /* { dg-error "from incompatible" } */ -const char32_t s32_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char32_t s32_3[] = L"ab"; /* { dg-error "from a string literal with type array of .short unsigned int." } */ +const char32_t s32_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char32_t s32_5[0] = U"ab"; /* { dg-warning "chars is too long" } */ const char32_t s32_6[1] = U"ab"; /* { dg-warning "chars is too long" } */ @@ -39,8 +39,8 @@ const char32_t s32_7[2] = U"ab"; /* { dg-warning "chars is too long" "" { target const char32_t s32_8[3] = U"ab"; /* { dg-warning "chars is too long" "" { target "m32c-*-*" } } */ const char32_t s32_9[4] = U"ab"; /* { dg-warning "chars is too long" "" { target "m32c-*-*" } } */ -const wchar_t sw_0[] = "ab"; /* { dg-error "from non-wide" } */ +const wchar_t sw_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ const wchar_t sw_1[] = u"ab"; -const wchar_t sw_2[] = U"ab"; /* { dg-error "from incompatible" } */ +const wchar_t sw_2[] = U"ab"; /* { dg-error "from a string literal with type array of .unsigned int." } */ const wchar_t sw_3[] = L"ab"; -const wchar_t sw_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const wchar_t sw_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ diff --git a/gcc/testsuite/gcc.dg/utf-array.c b/gcc/testsuite/gcc.dg/utf-array.c index 1d864220c98..da6a0c9233a 100644 --- a/gcc/testsuite/gcc.dg/utf-array.c +++ b/gcc/testsuite/gcc.dg/utf-array.c @@ -10,16 +10,16 @@ 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" } */ -const char s_2[] = U"ab"; /* { dg-error "from wide string" } */ -const char s_3[] = L"ab"; /* { dg-error "from wide string" } */ +const char s_1[] = u"ab"; /* { dg-error "from a string literal with type array of .short unsigned int." } */ +const char s_2[] = U"ab"; /* { dg-error "from a string literal with type array of .unsigned int." } */ +const char s_3[] = L"ab"; /* { dg-error "from a string literal with type array of .int." } */ const char s_4[] = u8"ab"; -const char16_t s16_0[] = "ab"; /* { dg-error "from non-wide" } */ +const char16_t s16_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ 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" "" { target { ! wchar_t_char16_t_compatible } } } */ -const char16_t s16_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char16_t s16_2[] = U"ab"; /* { dg-error "from a string literal with type array of .unsigned int." } */ +const char16_t s16_3[] = L"ab"; /* { dg-error "from a string literal with type array of .int." "" { target { ! wchar_t_char16_t_compatible } } } */ +const char16_t s16_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char16_t s16_5[0] = u"ab"; /* { dg-warning "chars is too long" } */ const char16_t s16_6[1] = u"ab"; /* { dg-warning "chars is too long" } */ @@ -27,11 +27,11 @@ const char16_t s16_7[2] = u"ab"; const char16_t s16_8[3] = u"ab"; const char16_t s16_9[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_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ +const char32_t s32_1[] = u"ab"; /* { dg-error "from a string literal with type array of .short unsigned int." } */ const char32_t s32_2[] = U"ab"; -const char32_t s32_3[] = L"ab"; /* { dg-error "from incompatible" "" { target { ! wchar_t_char32_t_compatible } } } */ -const char32_t s32_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char32_t s32_3[] = L"ab"; /* { dg-error "from a string literal with type array of .int." "" { target { ! wchar_t_char32_t_compatible } } } */ +const char32_t s32_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char32_t s32_5[0] = U"ab"; /* { dg-warning "chars is too long" } */ const char32_t s32_6[1] = U"ab"; /* { dg-warning "chars is too long" } */ @@ -39,8 +39,8 @@ const char32_t s32_7[2] = U"ab"; /* { dg-warning "chars is too long" "" { target const char32_t s32_8[3] = U"ab"; /* { dg-warning "chars is too long" "" { target "m32c-*-*" } } */ const char32_t s32_9[4] = U"ab"; /* { dg-warning "chars is too long" "" { target "m32c-*-*" } } */ -const wchar_t sw_0[] = "ab"; /* { dg-error "from non-wide" } */ -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_0[] = "ab"; /* { dg-error "from a string literal with type array of .char." } */ +const wchar_t sw_1[] = u"ab"; /* { dg-error "from a string literal with type array of .short unsigned int." "" { target { ! wchar_t_char16_t_compatible } } } */ +const wchar_t sw_2[] = U"ab"; /* { dg-error "from a string literal with type array of .unsigned int." "" { target { ! wchar_t_char32_t_compatible } } } */ const wchar_t sw_3[] = L"ab"; -const wchar_t sw_4[] = u8"ab"; /* { dg-error "from non-wide" } */ +const wchar_t sw_4[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ diff --git a/gcc/testsuite/gcc.dg/utf8-2.c b/gcc/testsuite/gcc.dg/utf8-2.c index f3b83fe3341..d96b15dccb7 100644 --- a/gcc/testsuite/gcc.dg/utf8-2.c +++ b/gcc/testsuite/gcc.dg/utf8-2.c @@ -8,9 +8,9 @@ typedef __CHAR16_TYPE__ char16_t; typedef __CHAR32_TYPE__ char32_t; const char s0[] = u8"ab"; -const char16_t s1[] = u8"ab"; /* { dg-error "from non-wide" } */ -const char32_t s2[] = u8"ab"; /* { dg-error "from non-wide" } */ -const wchar_t s3[] = u8"ab"; /* { dg-error "from non-wide" } */ +const char16_t s1[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ +const char32_t s2[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ +const wchar_t s3[] = u8"ab"; /* { dg-error "from a string literal with type array of .char." } */ const char t0[0] = u8"ab"; /* { dg-warning "chars is too long" } */ const char t1[1] = u8"ab"; /* { dg-warning "chars is too long" } */ --------------FE35788081CB782350B1BF4C--