diff options
Diffstat (limited to 'gcc-4.6/gcc/fortran/dependency.c')
-rw-r--r-- | gcc-4.6/gcc/fortran/dependency.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/gcc-4.6/gcc/fortran/dependency.c b/gcc-4.6/gcc/fortran/dependency.c index 58cfb65..49e47fb 100644 --- a/gcc-4.6/gcc/fortran/dependency.c +++ b/gcc-4.6/gcc/fortran/dependency.c @@ -163,9 +163,19 @@ gfc_are_identical_variables (gfc_expr *e1, gfc_expr *e2) break; case REF_SUBSTRING: - if (gfc_dep_compare_expr (r1->u.ss.start, r2->u.ss.start) != 0 - || gfc_dep_compare_expr (r1->u.ss.end, r2->u.ss.end) != 0) + if (gfc_dep_compare_expr (r1->u.ss.start, r2->u.ss.start) != 0) return false; + + /* If both are NULL, the end length compares equal, because we + are looking at the same variable. This can only happen for + assumed- or deferred-length character arguments. */ + + if (r1->u.ss.end == NULL && r2->u.ss.end == NULL) + break; + + if (gfc_dep_compare_expr (r1->u.ss.end, r2->u.ss.end) != 0) + return false; + break; default: |