summaryrefslogtreecommitdiff
path: root/gcc/fortran/match.c
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-08-23 14:53:14 -0700
committerRichard Henderson <rth@gcc.gnu.org>2004-08-23 14:53:14 -0700
commitb85024359a4c487de04d6de688036eff93addfa2 (patch)
tree2b929849a4b3cd5fcb35dec69633cf9d3c308c77 /gcc/fortran/match.c
parent9a870e6c4c561ad318a320c2bcc9618c7f600865 (diff)
downloadgcc-b85024359a4c487de04d6de688036eff93addfa2.tar.gz
re PR fortran/13465 (Data statement for large arrays compiles verrrry slllowwwly and shows quadratic behaviour.)
PR 13465 * data.c (find_con_by_offset): Search ordered list; handle elements with repeat counts. (gfc_assign_data_value_range): New. * gfortran.h (struct gfc_data_value): Make repeat unsigned. (gfc_assign_data_value_range): Declare. * match.c (top_val_list): Extract repeat count into a temporary. * resolve.c (values): Make left unsigned. (next_data_value): Don't decrement left. (check_data_variable): Use gfc_assign_data_value_range. From-SVN: r86443
Diffstat (limited to 'gcc/fortran/match.c')
-rw-r--r--gcc/fortran/match.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c
index 65af46ad779..a42fd7f66ab 100644
--- a/gcc/fortran/match.c
+++ b/gcc/fortran/match.c
@@ -2894,13 +2894,15 @@ top_val_list (gfc_data * data)
}
else
{
- msg = gfc_extract_int (expr, &tail->repeat);
+ signed int tmp;
+ msg = gfc_extract_int (expr, &tmp);
gfc_free_expr (expr);
if (msg != NULL)
{
gfc_error (msg);
return MATCH_ERROR;
}
+ tail->repeat = tmp;
m = match_data_constant (&tail->expr);
if (m == MATCH_NO)