expr: build string_constant only for a char type

gcc/ChangeLog:

	PR tree-optimization/96058
	* expr.c (string_constant): Build string_constant only
	for a type that has same precision as char_type_node
	and is an integral type.
This commit is contained in:
Martin Liska 2020-07-27 12:30:24 +02:00
parent 8e5584f7a1
commit 7355a9408b
No known key found for this signature in database
GPG Key ID: 4DC182DC0FA73785

View File

@ -11828,17 +11828,22 @@ string_constant (tree arg, tree *ptr_offset, tree *mem_size, tree *decl)
chartype = TREE_TYPE (chartype);
while (TREE_CODE (chartype) == ARRAY_TYPE)
chartype = TREE_TYPE (chartype);
/* Convert a char array to an empty STRING_CST having an array
of the expected type and size. */
if (!initsize)
initsize = integer_zero_node;
unsigned HOST_WIDE_INT size = tree_to_uhwi (initsize);
init = build_string_literal (size, NULL, chartype, size);
init = TREE_OPERAND (init, 0);
init = TREE_OPERAND (init, 0);
if (INTEGRAL_TYPE_P (chartype)
&& TYPE_PRECISION (chartype) == TYPE_PRECISION (char_type_node))
{
/* Convert a char array to an empty STRING_CST having an array
of the expected type and size. */
if (!initsize)
initsize = integer_zero_node;
*ptr_offset = integer_zero_node;
unsigned HOST_WIDE_INT size = tree_to_uhwi (initsize);
init = build_string_literal (size, NULL, chartype, size);
init = TREE_OPERAND (init, 0);
init = TREE_OPERAND (init, 0);
*ptr_offset = integer_zero_node;
}
}
if (decl)