aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorLouis Krupp <louis.krupp@zoho.com>2015-10-06 23:47:18 +0000
committerLouis Krupp <lkrupp@gcc.gnu.org>2015-10-06 23:47:18 +0000
commit58864d1c7a4f6ae4642c6d8fd93b52b7586893ac (patch)
tree284a952dbaa2d667bb8889bd480e3f2c06d5415a /gcc
parentc12df35927747bd91c0a2d0ffce030f2cdb9f722 (diff)
downloadgcc-58864d1c7a4f6ae4642c6d8fd93b52b7586893ac.zip
gcc-58864d1c7a4f6ae4642c6d8fd93b52b7586893ac.tar.gz
gcc-58864d1c7a4f6ae4642c6d8fd93b52b7586893ac.tar.bz2
[multiple changes]
2015-10-06 Louis Krupp <louis.krupp@zoho.com> PR fortran/65766 * resolve.c (gfc_resolve_substring_charlen): For derived type, use typespec of string component when resolving substring length. 2015-10-06 Louis Krupp <louis.krupp@zoho.com> PR fortran/65766 * gfortran.dg/substr_alloc_string_comp_1.f90: New. From-SVN: r228551
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/resolve.c15
-rw-r--r--gcc/testsuite/ChangeLog5
3 files changed, 22 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index f44d662..4dba1de 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,8 @@
+2015-10-06 Louis Krupp <louis.krupp@zoho.com>
+ PR fortran/65766
+ * resolve.c (gfc_resolve_substring_charlen): For derived type,
+ use typespec of string component when resolving substring length.
+
2015-10-04 Mikael Morin <mikael@gcc.gnu.org>
* match.c (gfc_match_common): Remove dead variable old_blank_common.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index e75c293..50b5c1d 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -4543,10 +4543,15 @@ gfc_resolve_substring_charlen (gfc_expr *e)
{
gfc_ref *char_ref;
gfc_expr *start, *end;
+ gfc_typespec *ts = NULL;
for (char_ref = e->ref; char_ref; char_ref = char_ref->next)
- if (char_ref->type == REF_SUBSTRING)
- break;
+ {
+ if (char_ref->type == REF_SUBSTRING)
+ break;
+ if (char_ref->type == REF_COMPONENT)
+ ts = &char_ref->u.c.component->ts;
+ }
if (!char_ref)
return;
@@ -4576,7 +4581,11 @@ gfc_resolve_substring_charlen (gfc_expr *e)
if (char_ref->u.ss.end)
end = gfc_copy_expr (char_ref->u.ss.end);
else if (e->expr_type == EXPR_VARIABLE)
- end = gfc_copy_expr (e->symtree->n.sym->ts.u.cl->length);
+ {
+ if (!ts)
+ ts = &e->symtree->n.sym->ts;
+ end = gfc_copy_expr (ts->u.cl->length);
+ }
else
end = NULL;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fbae924..4ec4743 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -2,6 +2,11 @@
* gcc.target/aarch64/get_lane_f16_1.c: New test.
+2015-10-06 Louis Krupp <louis.krupp@zoho.com>
+
+ PR fortran/65766
+ * gfortran.dg/substr_alloc_string_comp_1.f90: New.
+
2015-10-06 Marek Polacek <polacek@redhat.com>
PR c++/67863