Commit 62574f12 by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/87476 (char-array initialized from wide-string)

	PR c++/87476
	* typeck2.c (digest_init_r): Re-add handing of signed/unsigned char
	strings and add it to the initialization of wide array from non-wide
	string diagnostics too.

	* g++.dg/cpp0x/pr87476-1.C: New test.
	* g++.dg/cpp0x/pr87476-2.C: New test.

From-SVN: r266547
parent ace83db0
2018-11-28 Jakub Jelinek <jakub@redhat.com>
PR c++/87476
* typeck2.c (digest_init_r): Re-add handing of signed/unsigned char
strings and add it to the initialization of wide array from non-wide
string diagnostics too.
2018-11-27 Jakub Jelinek <jakub@redhat.com>
PR c++/88187
......
......@@ -1063,7 +1063,9 @@ digest_init_r (tree type, tree init, int nested, int flags,
if (TYPE_PRECISION (typ1) == BITS_PER_UNIT)
{
if (char_type != char_type_node)
if (char_type != char_type_node
&& char_type != signed_char_type_node
&& char_type != unsigned_char_type_node)
{
if (complain & tf_error)
error_at (loc, "char-array initialized from wide string");
......@@ -1072,7 +1074,9 @@ digest_init_r (tree type, tree init, int nested, int flags,
}
else
{
if (char_type == char_type_node)
if (char_type == char_type_node
|| char_type == signed_char_type_node
|| char_type == unsigned_char_type_node)
{
if (complain & tf_error)
error_at (loc,
......
2018-11-28 Jakub Jelinek <jakub@redhat.com>
PR c++/87476
* g++.dg/cpp0x/pr87476-1.C: New test.
* g++.dg/cpp0x/pr87476-2.C: New test.
PR c++/88215
* c-c++-common/ubsan/pr88215.c: New test.
......
// PR c++/87476
// { dg-do compile { target c++11 } }
template <int>
struct S {
void operator () () { constexpr unsigned char p[1] {}; }
};
void
foo ()
{
S<0>{} ();
}
// PR c++/87476
// { dg-do compile { target c++11 } }
void f0 () { constexpr char p[] = "11111"; }
void f1 () { constexpr unsigned char p[] = "11111"; }
void f2 () { constexpr signed char p[] = "11111"; }
template <int N>
void f3 () { constexpr char p[] = "11111"; }
template <int N>
void f4 () { constexpr unsigned char p[] = "11111"; }
template <int N>
void f5 () { constexpr signed char p[] = "11111"; }
void
baz ()
{
f0 ();
f1 ();
f2 ();
f3<0> ();
f4<0> ();
f5<0> ();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment