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

--- Comment #2 from anlauf at gcc dot gnu.org ---
The following - seemingly hackish - change fixes the ICE:

diff --git a/gcc/fortran/trans-stmt.cc b/gcc/fortran/trans-stmt.cc
index 93b633e212e..60275e18867 100644
--- a/gcc/fortran/trans-stmt.cc
+++ b/gcc/fortran/trans-stmt.cc
@@ -6464,7 +6464,10 @@ gfc_trans_allocate (gfc_code * code, gfc_omp_namelist
*omp_allocate)
       else if (se.expr != NULL_TREE && temp_var_needed)
        {
          tree var, desc;
-         tmp = GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (se.expr)) || is_coarray ?
+         tmp = (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (se.expr))
+                || is_coarray
+                || (code->expr3->ts.type == BT_CHARACTER
+                    && code->expr3->rank == 0)) ?
                se.expr
              : build_fold_indirect_ref_loc (input_location, se.expr);

For reasons I do not see the case of source being a scalar character
expression, where we already have created se as a reference a few lines
further up in the code, is not handled by the original code.

This regtests cleanly.

Is there a better solution?

Reply via email to