Hi Martin, sorry, I hope you forgive me, when I add a few comments to your patch.
> + unsigned HOST_WIDE_INT nelts = CONSTRUCTOR_NELTS (ctor); > + tree eltype = TREE_TYPE (type); ... > + /* Bail if the CTOR has a block of more than 256 embedded nuls > + due to implicitly initialized elements. */ > + unsigned nelts = (idx - str.length ()) + 1; > + if (nelts > 256) > + return NULL_TREE; nelts shadows previous nelts. > + if (!nelts || str.length () < i) I don't understand when is str.length () < i ? > + /* Append a nul for the empty initializer { } and for the last > + explicit initializer in the loop above that is a nul. */ > + str.safe_push (0); > + > + /* Build a string literal but return the embedded STRING_CST. */ > + tree res = build_string_literal (str.length (), str.begin ()); > + res = TREE_OPERAND (TREE_OPERAND (res, 0), 0); > + return res; > +} res has a different type than the object you initialize. I think you should use: tree res = build_string (str.length (), str.begin ()); TREE_TYPE (res) = type; return res; Bernd.