diff options
author | Richard Henderson <rth@redhat.com> | 2004-08-23 14:53:14 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-08-23 14:53:14 -0700 |
commit | b85024359a4c487de04d6de688036eff93addfa2 (patch) | |
tree | 2b929849a4b3cd5fcb35dec69633cf9d3c308c77 /gcc/fortran/match.c | |
parent | 9a870e6c4c561ad318a320c2bcc9618c7f600865 (diff) | |
download | gcc-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.c | 4 |
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) |