aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Schlüter <tobi@gcc.gnu.org>2007-04-12 20:10:10 +0200
committerTobias Schlüter <tobi@gcc.gnu.org>2007-04-12 20:10:10 +0200
commite8a25349277ba07e340785c2e03d1ad42ae91763 (patch)
tree550df545c484ecad51d5eaf3a1dc655c91c223a0 /gcc
parent690af37922ff3399d545d03196867ad1424c14aa (diff)
downloadgcc-e8a25349277ba07e340785c2e03d1ad42ae91763.zip
gcc-e8a25349277ba07e340785c2e03d1ad42ae91763.tar.gz
gcc-e8a25349277ba07e340785c2e03d1ad42ae91763.tar.bz2
re PR fortran/31266 (Spurious(?) warning about character truncation)
PR fortran/31266 fortran/ * primary.c (gfc_variable_attr): Don't copy string length if it doesn't make sense. * resolve.c (resolve_code): Clarify error message. testsuite/ * gfortran.dg/char_assign_1.f90: New. From-SVN: r123759
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/primary.c9
-rw-r--r--gcc/fortran/resolve.c5
-rw-r--r--gcc/testsuite/ChangeLog3
4 files changed, 19 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index e99ccd1..ca2721c 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,10 @@
2007-04-12 Tobias Schlüter <tobi@gcc.gnu.org>
+ PR fortran/31266
+ * primary.c (gfc_variable_attr): Don't copy string length if it
+ doesn't make sense.
+ * resolve.c (resolve_code): Clarify error message.
+
PR fortran/31471
* decl.c (gfc_match_end): Also check for construct name in END
FORALL and END WERE statements.
diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index 3044703..1ef37a6 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -1844,7 +1844,14 @@ gfc_variable_attr (gfc_expr *expr, gfc_typespec *ts)
case REF_COMPONENT:
gfc_get_component_attr (&attr, ref->u.c.component);
if (ts != NULL)
- *ts = ref->u.c.component->ts;
+ {
+ *ts = ref->u.c.component->ts;
+ /* Don't set the string length if a substring reference
+ follows. */
+ if (ts->type == BT_CHARACTER
+ && ref->next && ref->next->type == REF_SUBSTRING)
+ ts->cl = NULL;
+ }
pointer = ref->u.c.component->pointer;
allocatable = ref->u.c.component->allocatable;
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index f514e77..467ccf4 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -5135,8 +5135,9 @@ resolve_code (gfc_code *code, gfc_namespace *ns)
rlen = mpz_get_si (code->expr2->ts.cl->length->value.integer);
if (rlen && llen && rlen > llen)
- gfc_warning_now ("rhs of CHARACTER assignment at %L will be "
- "truncated (%d/%d)", &code->loc, rlen, llen);
+ gfc_warning_now ("CHARACTER expression will be truncated "
+ "in assignment (%d/%d) at %L",
+ llen, rlen, &code->loc);
}
if (gfc_pure (NULL))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8a40938..2beab78 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2007-04-12 Tobias Schlüter <tobi@gcc.gnu.org>
+ PR fortran/31266
+ * gfortran.dg/char_assign_1.f90: New.
+
PR fortran/31471
* gfortran.dg/block_name_1.f90: New.
* gfortran.dg/block_name_2.f90: New.