diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc index cc3a2e5fc105757689cb2f5083f97b22c0d5d23a..afbec5b275222c110372317e73ebd1e3124a9991 100644 --- a/gcc/fortran/trans-intrinsic.cc +++ b/gcc/fortran/trans-intrinsic.cc @@ -4242,6 +4242,8 @@ gfc_get_symbol_for_expr (gfc_expr * expr, bool ignore_optional) sym = gfc_new_symbol (expr->value.function.name, NULL); sym->ts = expr->ts; + if (sym->ts.type == BT_CHARACTER) + sym->ts.u.cl = gfc_new_charlen (gfc_current_ns, NULL); sym->attr.external = 1; sym->attr.function = 1; sym->attr.always_explicit = 1; diff --git a/gcc/testsuite/gfortran.dg/gomp/intrinsic_pack_7.f90 b/gcc/testsuite/gfortran.dg/gomp/intrinsic_pack_7.f90 new file mode 100644 index 0000000000000000000000000000000000000000..576a89940922f959c15bcb5adfe59f2cf09a4173 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/intrinsic_pack_7.f90 @@ -0,0 +1,9 @@ +! PR fortran/118441 + +subroutine sub(s) + character(len=*), intent(inout) :: s(:) + integer :: n + s( : ) = s(:) ! OK + n = count(s(:) /= '') + s(1:n) = pack (s(:), mask=(s(:) /= '')) ! ICE +end subroutine sub