https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120702

--- Comment #11 from rguenther at suse dot de <rguenther at suse dot de> ---
On Tue, 5 May 2026, Visda.vokhshoori at microchip dot com wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120702
> 
> --- Comment #10 from Visda <Visda.vokhshoori at microchip dot com> ---
> adding this amount of code in fold_ctor_reference () circumvents forward
> propagating large, (>128 characters), string literals.
> 
> --- a/gcc/gimple-fold.cc
> +++ b/gcc/gimple-fold.cc
> @@ -8122,7 +8122,9 @@ fold_ctor_reference (tree type, tree ctor, const
> poly_uint64 &poly_offset,
>    /* We found the field with exact match.  */
>    if (type
>        && useless_type_conversion_p (type, TREE_TYPE (ctor))
> -      && known_eq (poly_offset, 0U))
> +      && known_eq (poly_offset, 0U)
> +      && (TREE_CODE (ctor) != STRING_CST
> +         || TREE_STRING_LENGTH (ctor) <= MAX_BITSIZE_MODE_ANY_MODE /
> BITS_PER_UNIT))
>      return canonicalize_constructor_val (unshare_expr (ctor), from_decl);
> 
> 
> looking for feedback. thanks.

I have posted a patch for review that does the following instead
(it's a better place to gate the transform)

diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc
index 4ec6cc65e3a..8f9119f2469 100644
--- a/gcc/gimple-fold.cc
+++ b/gcc/gimple-fold.cc
@@ -306,6 +306,11 @@ maybe_fold_reference (tree expr)
 {
   tree result = NULL_TREE;

+  /* Avoid expensive fold_const_aggregate_ref early on aggregate loads
+     and esp. replacing STRING_CSTs inline.  */
+  if (!is_gimple_reg_type (TREE_TYPE (expr)))
+    return NULL_TREE;
+
   if ((TREE_CODE (expr) == VIEW_CONVERT_EXPR
        || TREE_CODE (expr) == REALPART_EXPR
        || TREE_CODE (expr) == IMAGPART_EXPR)

Reply via email to