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:
parent
8e5584f7a1
commit
7355a9408b
23
gcc/expr.c
23
gcc/expr.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user