aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/trans-intrinsic.cc2
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/intrinsic_pack_7.f909
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/fortran/trans-intrinsic.cc b/gcc/fortran/trans-intrinsic.cc
index cc3a2e5..afbec5b 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 0000000..576a899
--- /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