https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96058
--- Comment #5 from Martin Liška <marxin at gcc dot gnu.org> ---
So the corrupted STRING_CST is created in LTRANS here:
gcc/expr.c:
│11714 if (TREE_CODE (init) == CONSTRUCTOR && initializer_zerop
(init))
│11715 {
│11716 /* Fold an empty/zero constructor for an implicitly
initialized
│11717 object or subobject into the empty string. */
│11718
│11719 /* Determine the character type from that of the original
│11720 expression. */
B+ │11721 tree chartype = argtype;
│11722 if (POINTER_TYPE_P (chartype))
│11723 chartype = TREE_TYPE (chartype);
│11724 while (TREE_CODE (chartype) == ARRAY_TYPE)
│11725 chartype = TREE_TYPE (chartype);
│11726 /* Convert a char array to an empty STRING_CST having an
array
(gdb) p debug_tree(init)
<constructor 0x7ffff0185120
type <record_type 0x7ffff4514000 VectorIcon addressable cxx-odr-p BLK
size <integer_cst 0x7ffff7824078 constant 192>
unit-size <integer_cst 0x7ffff7824048 constant 24>
align:64 warn_if_not_align:0 symtab:0 alias-set 407 canonical-type
0x7ffff4514000
fields <field_decl 0x7ffff450ebe0 reps type <pointer_type
0x7ffff450df18>
readonly unsigned nonlocal DI
../../ui/gfx/vector_icon_types.h:102:0
size <integer_cst 0x7ffff7806bb8 constant 64>
unit-size <integer_cst 0x7ffff7806bd0 constant 8>
align:64 warn_if_not_align:0 offset_align 128
offset <integer_cst 0x7ffff7806be8 constant 0>
bit-offset <integer_cst 0x7ffff7806c30 constant 0> context
<record_type 0x7ffff4514000 VectorIcon> chain <field_decl 0x7ffff450eb48
reps_size>> context <namespace_decl 0x7ffff7635390 gfx>
pointer_to_this <pointer_type 0x7ffff0114150>>
constant length:3
idx <field_decl 0x7ffff450ebe0 reps
type <pointer_type 0x7ffff450df18 type <record_type 0x7ffff450ddc8
VectorIconRep>
readonly unsigned DI size <integer_cst 0x7ffff7806bb8 64> unit-size
<integer_cst 0x7ffff7806bd0 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1
structural-equality>
readonly unsigned nonlocal DI ../../ui/gfx/vector_icon_types.h:102:0
size <integer_cst 0x7ffff7806bb8 64> unit-size <integer_cst 0x7ffff7806bd0 8>
align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst
0x7ffff7806be8 0> bit-offset <integer_cst 0x7ffff7806c30 0> context
<record_type 0x7ffff4514000 VectorIcon>
chain <field_decl 0x7ffff450eb48 reps_size type <integer_type
0x7ffff760c150 size_t>
unsigned nonlocal DI ../../ui/gfx/vector_icon_types.h:103:0 size
<integer_cst 0x7ffff7806bb8 64> unit-size <integer_cst 0x7ffff7806bd0 8>
align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst
0x7ffff7806be8 0> bit-offset <integer_cst 0x7ffff7806bb8 64> context
<record_type 0x7ffff4514000 VectorIcon> chain <field_decl 0x7ffff450eab0
name>>>
val <integer_cst 0x7ffff1f36fc0 type <pointer_type 0x7ffff437ec78> constant
0>
idx <field_decl 0x7ffff450eb48 reps_size
type <integer_type 0x7ffff760c150 size_t public unsigned DI size
<integer_cst 0x7ffff7806bb8 64> unit-size <integer_cst 0x7ffff7806bd0 8>
align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff781b738 precision:64 min <integer_cst 0x7ffff7806e88 0> max <integer_cst
0x7ffff7807500 18446744073709551615>
pointer_to_this <pointer_type 0x7ffff61c8498> reference_to_this
<reference_type 0x7ffff31cc3f0>>
unsigned nonlocal DI ../../ui/gfx/vector_icon_types.h:103:0 size
<integer_cst 0x7ffff7806bb8 64> unit-size <integer_cst 0x7ffff7806bd0 8>
align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst
0x7ffff7806be8 0> bit-offset <integer_cst 0x7ffff7806bb8 64> context
<record_type 0x7ffff4514000 VectorIcon>
chain <field_decl 0x7ffff450eab0 name type <pointer_type
0x7ffff76b2dc8>
unsigned nonlocal DI ../../ui/gfx/vector_icon_types.h:108:0 size
<integer_cst 0x7ffff7806bb8 64> unit-size <integer_cst 0x7ffff7806bd0 8>
align:64 warn_if_not_align:0 offset_align 128
offset <integer_cst 0x7ffff7806c18 constant 16> bit-offset
<integer_cst 0x7ffff7806c30 0> context <record_type 0x7ffff4514000
VectorIcon>>>
val <integer_cst 0x7ffff29b9f30 type <integer_type 0x7ffff760c150 size_t>
constant 0>
idx <field_decl 0x7ffff450eab0 name
type <pointer_type 0x7ffff76b2dc8 type <integer_type 0x7ffff76402a0
char>
public unsigned DI size <integer_cst 0x7ffff7806bb8 64> unit-size
<integer_cst 0x7ffff7806bd0 8>
align:64 warn_if_not_align:0 symtab:0 alias-set 409
structural-equality
pointer_to_this <pointer_type 0x7ffff522adc8> reference_to_this
<reference_type 0x7ffff3176f18>>
unsigned nonlocal DI ../../ui/gfx/vector_icon_types.h:108:0 size
<integer_cst 0x7ffff7806bb8 64> unit-size <integer_cst 0x7ffff7806bd0 8>
align:64 warn_if_not_align:0 offset_align 128 offset <integer_cst
0x7ffff7806c18 16> bit-offset <integer_cst 0x7ffff7806c30 0> context
<record_type 0x7ffff4514000 VectorIcon>>
val <integer_cst 0x7ffff29b9e40 type <pointer_type 0x7ffff76b2dc8> constant
0>>
$18 = void
(gdb) p debug_tree(argtype)
<pointer_type 0x7ffff77b5f18
type <record_type 0x7ffff77b5e70 VectorIcon readonly cxx-odr-p VOID
align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff4514000 context <namespace_decl 0x7ffff7635390 gfx>
pointer_to_this <pointer_type 0x7ffff77b5f18> reference_to_this
<reference_type 0x7ffff5e93b28>>
public unsigned DI
size <integer_cst 0x7ffff7806bb8 type <integer_type 0x7ffff781b0a8
bitsizetype> constant 64>
unit-size <integer_cst 0x7ffff7806bd0 type <integer_type 0x7ffff781b000
sizetype> constant 8>
align:64 warn_if_not_align:0 symtab:0 alias-set 1025 structural-equality>
(gdb) p debug_tree(chartype)
<record_type 0x7ffff77b5e70 VectorIcon readonly cxx-odr-p VOID
align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7ffff4514000 context <namespace_decl 0x7ffff7635390 gfx>
pointer_to_this <pointer_type 0x7ffff77b5f18> reference_to_this
<reference_type 0x7ffff5e93b28>>
$21 = void
@Martin: Can you please take a look?