* [Patch, fortran] PR23232 - DATA implied DO variables
@ 2007-01-04 15:34 Paul Richard Thomas
2007-01-04 15:42 ` Paul Richard Thomas
0 siblings, 1 reply; 4+ messages in thread
From: Paul Richard Thomas @ 2007-01-04 15:34 UTC (permalink / raw)
To: fortran, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1598 bytes --]
:ADDPATCH fortran:
This patch came about as I was tidying up and putting to bed the
ongoing work on PRs, for others to follow up. I had written this some
months ago but could not get it to handle error conditions without
segfaulting. I noticed what this was due to this morning.....
blush.....
gfc_error ("Beginning of message at %L followed by ",
"end of message", &expr->where);
I was completely blind to the errant comma and put the patch to one
side.... more blushing.... Since it is error_on_valid, I thought it
best to submit it myself, since I am up to speed on it.
Beyond this, the fix is straight forward. Since the iterators are not
available, whilst gfc_match_init_expr and check_init_expr are doing
their respective things, the appearance of variable expressions for
the iterator start, end or steps causes errors. The way around this
is to signal that we are matching a data statement and use this to
avoid checking for variable references. In this way, all the other
good things happen, like checking for inquiry functions, etc. The
expressions then go on to resolve.c, where in looping through the
iterators, they are copied and simplified. Since the iterators are on
the iterator stack, simplification now works and EXPR_CONSTANTs are
produced. The previous check that iterator expressions were constant
has now been removed. The testcase is a rejigging of the reporter's;
the array is reduced in size so that the correct emplacement of the
values can be checked.
Regtested on PIV/Cygwin_NT - OK for trunk and, in a week, for 4.2?
Paul
[-- Attachment #2: Change.Logs --]
[-- Type: text/plain, Size: 610 bytes --]
2007-01-04 Paul Thomas <pault@gcc.gnu.org>
PR fortran/23232
* decl.c (gfc_in_match_data, gfc_set_in_match_data): New
functions to signal that a DATA statement is being matched.
(gfc_match_data): Call gfc_set_in_match_data on entry and on
exit.
* gfortran.h : Add prototypes for above.
* expr.c (check_init_expr): Avoid check on parameter or
variable if gfc_in_match_data is true.
(gfc_match_init_expr): Do not call error on non-reduction of
expression if gfc_in_match_data is true.
2007-01-04 Paul Thomas <pault@gcc.gnu.org>
PR fortran/23232
* gfortran.dg/data_implied_do_1.f90: New test.
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: pr23232.diff --]
[-- Type: text/plain; name=pr23232.diff; charset=ANSI_X3.4-1968, Size: 8475 bytes --]
Index: gcc/fortran/decl.c
===================================================================
*** gcc/fortran/decl.c (révision 120108)
--- gcc/fortran/decl.c (copie de travail)
*************** gfc_symbol *gfc_new_block;
*** 74,79 ****
--- 74,93 ----
/********************* DATA statement subroutines *********************/
+ static bool in_match_data = false;
+
+ bool
+ gfc_in_match_data (void)
+ {
+ return in_match_data;
+ }
+
+ void
+ gfc_set_in_match_data (bool set_value)
+ {
+ in_match_data = set_value;
+ }
+
/* Free a gfc_data_variable structure and everything beneath it. */
static void
*************** gfc_match_data (void)
*** 455,460 ****
--- 469,476 ----
gfc_data *new;
match m;
+ gfc_set_in_match_data (true);
+
for (;;)
{
new = gfc_get_data ();
*************** gfc_match_data (void)
*** 477,482 ****
--- 493,500 ----
gfc_match_char (','); /* Optional comma */
}
+ gfc_set_in_match_data (false);
+
if (gfc_pure (NULL))
{
gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
*************** gfc_match_data (void)
*** 486,491 ****
--- 504,510 ----
return MATCH_YES;
cleanup:
+ gfc_set_in_match_data (false);
gfc_free_data (new);
return MATCH_ERROR;
}
Index: gcc/fortran/gfortran.h
===================================================================
*** gcc/fortran/gfortran.h (révision 120108)
--- gcc/fortran/gfortran.h (copie de travail)
*************** void gfc_assign_data_value (gfc_expr *,
*** 1713,1718 ****
--- 1713,1722 ----
void gfc_assign_data_value_range (gfc_expr *, gfc_expr *, mpz_t, mpz_t);
void gfc_advance_section (mpz_t *, gfc_array_ref *, mpz_t *);
+ /* decl.c */
+ bool gfc_in_match_data (void);
+ void gfc_set_in_match_data (bool);
+
/* scanner.c */
void gfc_scanner_done_1 (void);
void gfc_scanner_init_1 (void);
Index: gcc/fortran/expr.c
===================================================================
*** gcc/fortran/expr.c (révision 120108)
--- gcc/fortran/expr.c (copie de travail)
*************** check_init_expr (gfc_expr * e)
*** 1829,1834 ****
--- 1829,1837 ----
break;
}
+ if (gfc_in_match_data ())
+ break;
+
gfc_error ("Parameter '%s' at %L has not been declared or is "
"a variable, which does not reduce to a constant "
"expression", e->symtree->n.sym->name, &e->where);
*************** gfc_match_init_expr (gfc_expr ** result)
*** 1912,1918 ****
/* Not all inquiry functions are simplified to constant expressions
so it is necessary to call check_inquiry again. */
if (!gfc_is_constant_expr (expr)
! && check_inquiry (expr, 1) == FAILURE)
{
gfc_error ("Initialization expression didn't reduce %C");
return MATCH_ERROR;
--- 1915,1922 ----
/* Not all inquiry functions are simplified to constant expressions
so it is necessary to call check_inquiry again. */
if (!gfc_is_constant_expr (expr)
! && check_inquiry (expr, 1) == FAILURE
! && !gfc_in_match_data ())
{
gfc_error ("Initialization expression didn't reduce %C");
return MATCH_ERROR;
Index: gcc/fortran/resolve.c
===================================================================
*** gcc/fortran/resolve.c (révision 120108)
--- gcc/fortran/resolve.c (copie de travail)
*************** traverse_data_list (gfc_data_variable *
*** 6302,6318 ****
{
mpz_t trip;
iterator_stack frame;
! gfc_expr *e;
mpz_init (frame.value);
! mpz_init_set (trip, var->iter.end->value.integer);
! mpz_sub (trip, trip, var->iter.start->value.integer);
! mpz_add (trip, trip, var->iter.step->value.integer);
! mpz_div (trip, trip, var->iter.step->value.integer);
! mpz_set (frame.value, var->iter.start->value.integer);
frame.prev = iter_stack;
frame.variable = var->iter.var->symtree;
--- 6302,6344 ----
{
mpz_t trip;
iterator_stack frame;
! gfc_expr *e, *start, *end, *step;
mpz_init (frame.value);
! start = gfc_copy_expr (var->iter.start);
! end = gfc_copy_expr (var->iter.end);
! step = gfc_copy_expr (var->iter.step);
! if (gfc_simplify_expr (start, 1) == FAILURE
! || start->expr_type != EXPR_CONSTANT)
! {
! gfc_error ("iterator start at %L does not simplify",
! &start->where);
! return FAILURE;
! }
! if (gfc_simplify_expr (end, 1) == FAILURE
! || end->expr_type != EXPR_CONSTANT)
! {
! gfc_error ("iterator end at %L does not simplify",
! &end->where);
! return FAILURE;
! }
! if (gfc_simplify_expr (step, 1) == FAILURE
! || step->expr_type != EXPR_CONSTANT)
! {
! gfc_error ("iterator step at %L does not simplify",
! &step->where);
! return FAILURE;
! }
!
! mpz_init_set (trip, end->value.integer);
! mpz_sub (trip, trip, start->value.integer);
! mpz_add (trip, trip, step->value.integer);
!
! mpz_div (trip, trip, step->value.integer);
! mpz_set (frame.value, start->value.integer);
frame.prev = iter_stack;
frame.variable = var->iter.var->symtree;
*************** traverse_data_list (gfc_data_variable *
*** 6333,6339 ****
return FAILURE;
}
! mpz_add (frame.value, frame.value, var->iter.step->value.integer);
mpz_sub_ui (trip, trip, 1);
}
--- 6359,6365 ----
return FAILURE;
}
! mpz_add (frame.value, frame.value, step->value.integer);
mpz_sub_ui (trip, trip, 1);
}
*************** traverse_data_list (gfc_data_variable *
*** 6341,6346 ****
--- 6367,6376 ----
mpz_clear (trip);
mpz_clear (frame.value);
+ gfc_free_expr (start);
+ gfc_free_expr (end);
+ gfc_free_expr (step);
+
iter_stack = frame.prev;
return SUCCESS;
}
*************** resolve_data_variables (gfc_data_variabl
*** 6386,6396 ****
{
if (gfc_resolve_iterator (&d->iter, false) == FAILURE)
return FAILURE;
-
- if (d->iter.start->expr_type != EXPR_CONSTANT
- || d->iter.end->expr_type != EXPR_CONSTANT
- || d->iter.step->expr_type != EXPR_CONSTANT)
- gfc_internal_error ("resolve_data_variables(): Bad iterator");
if (resolve_data_variables (d->list) == FAILURE)
return FAILURE;
--- 6416,6421 ----
Index: gcc/testsuite/gfortran.dg/interface_7.f90
===================================================================
*** gcc/testsuite/gfortran.dg/interface_7.f90 (révision 120108)
--- gcc/testsuite/gfortran.dg/interface_7.f90 (copie de travail)
***************
*** 6,12 ****
! standard explicitly does not require recursion into the formal
! arguments of procedures that themselves are interface arguments.
!
! module x
INTERFACE BAD9
SUBROUTINE S9A(X)
REAL :: X
--- 6,12 ----
! standard explicitly does not require recursion into the formal
! arguments of procedures that themselves are interface arguments.
!
! module ifc
INTERFACE BAD9
SUBROUTINE S9A(X)
REAL :: X
*************** module x
*** 27,32 ****
END INTERFACE
END SUBROUTINE S9C ! { dg-error "Ambiguous interfaces" }
END INTERFACE BAD9
! end module x
! ! { dg-final { cleanup-modules "x" } }
--- 27,32 ----
END INTERFACE
END SUBROUTINE S9C ! { dg-error "Ambiguous interfaces" }
END INTERFACE BAD9
! end module ifc
! ! { dg-final { cleanup-modules "ifc" } }
Index: gcc/testsuite/gfortran.dg/data_implied_do_1.f90
===================================================================
*** gcc/testsuite/gfortran.dg/data_implied_do_1.f90 (révision 0)
--- gcc/testsuite/gfortran.dg/data_implied_do_1.f90 (révision 0)
***************
*** 0 ****
--- 1,14 ----
+ ! { dg-do run }
+ ! Test of the patch for PR23232, in which implied do loop
+ ! variables were not permitted in DATA statements.
+ !
+ ! Contributed by Roger Ferrer Ibáñez <rofi@ya.com>
+ !
+ PROGRAM p
+ REAL :: TWO_ARRAY (3, 3)
+ INTEGER :: K, J
+ DATA ((TWO_ARRAY (K, J), K = 1, J-1), J = 1, 3) /3 * 1.0/
+ DATA ((TWO_ARRAY (K, J), K = J, 3), J = 1, 3) /6 * 2.0/
+ if (any (reshape (two_array, (/9/)) &
+ .ne. (/2.0,2.0,2.0,1.0,2.0,2.0,1.0,1.0,2.0/))) call abort ()
+ END PROGRAM
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Patch, fortran] PR23232 - DATA implied DO variables
2007-01-04 15:34 [Patch, fortran] PR23232 - DATA implied DO variables Paul Richard Thomas
@ 2007-01-04 15:42 ` Paul Richard Thomas
2007-01-05 6:15 ` Steve Kargl
0 siblings, 1 reply; 4+ messages in thread
From: Paul Richard Thomas @ 2007-01-04 15:42 UTC (permalink / raw)
To: fortran, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1820 bytes --]
Bother! Please find attached a patch without the modification to interface_7.f90
Paul
On 1/4/07, Paul Richard Thomas <paul.richard.thomas@gmail.com> wrote:
> :ADDPATCH fortran:
>
> This patch came about as I was tidying up and putting to bed the
> ongoing work on PRs, for others to follow up. I had written this some
> months ago but could not get it to handle error conditions without
> segfaulting. I noticed what this was due to this morning.....
> blush.....
>
> gfc_error ("Beginning of message at %L followed by ",
> "end of message", &expr->where);
>
> I was completely blind to the errant comma and put the patch to one
> side.... more blushing.... Since it is error_on_valid, I thought it
> best to submit it myself, since I am up to speed on it.
>
> Beyond this, the fix is straight forward. Since the iterators are not
> available, whilst gfc_match_init_expr and check_init_expr are doing
> their respective things, the appearance of variable expressions for
> the iterator start, end or steps causes errors. The way around this
> is to signal that we are matching a data statement and use this to
> avoid checking for variable references. In this way, all the other
> good things happen, like checking for inquiry functions, etc. The
> expressions then go on to resolve.c, where in looping through the
> iterators, they are copied and simplified. Since the iterators are on
> the iterator stack, simplification now works and EXPR_CONSTANTs are
> produced. The previous check that iterator expressions were constant
> has now been removed. The testcase is a rejigging of the reporter's;
> the array is reduced in size so that the correct emplacement of the
> values can be checked.
>
> Regtested on PIV/Cygwin_NT - OK for trunk and, in a week, for 4.2?
>
> Paul
>
>
>
[-- Attachment #2: pr23232.diff --]
[-- Type: text/plain, Size: 7328 bytes --]
Index: gcc/fortran/decl.c
===================================================================
*** gcc/fortran/decl.c (révision 120108)
--- gcc/fortran/decl.c (copie de travail)
*************** gfc_symbol *gfc_new_block;
*** 74,79 ****
--- 74,93 ----
/********************* DATA statement subroutines *********************/
+ static bool in_match_data = false;
+
+ bool
+ gfc_in_match_data (void)
+ {
+ return in_match_data;
+ }
+
+ void
+ gfc_set_in_match_data (bool set_value)
+ {
+ in_match_data = set_value;
+ }
+
/* Free a gfc_data_variable structure and everything beneath it. */
static void
*************** gfc_match_data (void)
*** 455,460 ****
--- 469,476 ----
gfc_data *new;
match m;
+ gfc_set_in_match_data (true);
+
for (;;)
{
new = gfc_get_data ();
*************** gfc_match_data (void)
*** 477,482 ****
--- 493,500 ----
gfc_match_char (','); /* Optional comma */
}
+ gfc_set_in_match_data (false);
+
if (gfc_pure (NULL))
{
gfc_error ("DATA statement at %C is not allowed in a PURE procedure");
*************** gfc_match_data (void)
*** 486,491 ****
--- 504,510 ----
return MATCH_YES;
cleanup:
+ gfc_set_in_match_data (false);
gfc_free_data (new);
return MATCH_ERROR;
}
Index: gcc/fortran/gfortran.h
===================================================================
*** gcc/fortran/gfortran.h (révision 120108)
--- gcc/fortran/gfortran.h (copie de travail)
*************** void gfc_assign_data_value (gfc_expr *,
*** 1713,1718 ****
--- 1713,1722 ----
void gfc_assign_data_value_range (gfc_expr *, gfc_expr *, mpz_t, mpz_t);
void gfc_advance_section (mpz_t *, gfc_array_ref *, mpz_t *);
+ /* decl.c */
+ bool gfc_in_match_data (void);
+ void gfc_set_in_match_data (bool);
+
/* scanner.c */
void gfc_scanner_done_1 (void);
void gfc_scanner_init_1 (void);
Index: gcc/fortran/expr.c
===================================================================
*** gcc/fortran/expr.c (révision 120108)
--- gcc/fortran/expr.c (copie de travail)
*************** check_init_expr (gfc_expr * e)
*** 1829,1834 ****
--- 1829,1837 ----
break;
}
+ if (gfc_in_match_data ())
+ break;
+
gfc_error ("Parameter '%s' at %L has not been declared or is "
"a variable, which does not reduce to a constant "
"expression", e->symtree->n.sym->name, &e->where);
*************** gfc_match_init_expr (gfc_expr ** result)
*** 1912,1918 ****
/* Not all inquiry functions are simplified to constant expressions
so it is necessary to call check_inquiry again. */
if (!gfc_is_constant_expr (expr)
! && check_inquiry (expr, 1) == FAILURE)
{
gfc_error ("Initialization expression didn't reduce %C");
return MATCH_ERROR;
--- 1915,1922 ----
/* Not all inquiry functions are simplified to constant expressions
so it is necessary to call check_inquiry again. */
if (!gfc_is_constant_expr (expr)
! && check_inquiry (expr, 1) == FAILURE
! && !gfc_in_match_data ())
{
gfc_error ("Initialization expression didn't reduce %C");
return MATCH_ERROR;
Index: gcc/fortran/resolve.c
===================================================================
*** gcc/fortran/resolve.c (révision 120108)
--- gcc/fortran/resolve.c (copie de travail)
*************** traverse_data_list (gfc_data_variable *
*** 6302,6318 ****
{
mpz_t trip;
iterator_stack frame;
! gfc_expr *e;
mpz_init (frame.value);
! mpz_init_set (trip, var->iter.end->value.integer);
! mpz_sub (trip, trip, var->iter.start->value.integer);
! mpz_add (trip, trip, var->iter.step->value.integer);
! mpz_div (trip, trip, var->iter.step->value.integer);
! mpz_set (frame.value, var->iter.start->value.integer);
frame.prev = iter_stack;
frame.variable = var->iter.var->symtree;
--- 6302,6344 ----
{
mpz_t trip;
iterator_stack frame;
! gfc_expr *e, *start, *end, *step;
mpz_init (frame.value);
! start = gfc_copy_expr (var->iter.start);
! end = gfc_copy_expr (var->iter.end);
! step = gfc_copy_expr (var->iter.step);
! if (gfc_simplify_expr (start, 1) == FAILURE
! || start->expr_type != EXPR_CONSTANT)
! {
! gfc_error ("iterator start at %L does not simplify",
! &start->where);
! return FAILURE;
! }
! if (gfc_simplify_expr (end, 1) == FAILURE
! || end->expr_type != EXPR_CONSTANT)
! {
! gfc_error ("iterator end at %L does not simplify",
! &end->where);
! return FAILURE;
! }
! if (gfc_simplify_expr (step, 1) == FAILURE
! || step->expr_type != EXPR_CONSTANT)
! {
! gfc_error ("iterator step at %L does not simplify",
! &step->where);
! return FAILURE;
! }
!
! mpz_init_set (trip, end->value.integer);
! mpz_sub (trip, trip, start->value.integer);
! mpz_add (trip, trip, step->value.integer);
!
! mpz_div (trip, trip, step->value.integer);
! mpz_set (frame.value, start->value.integer);
frame.prev = iter_stack;
frame.variable = var->iter.var->symtree;
*************** traverse_data_list (gfc_data_variable *
*** 6333,6339 ****
return FAILURE;
}
! mpz_add (frame.value, frame.value, var->iter.step->value.integer);
mpz_sub_ui (trip, trip, 1);
}
--- 6359,6365 ----
return FAILURE;
}
! mpz_add (frame.value, frame.value, step->value.integer);
mpz_sub_ui (trip, trip, 1);
}
*************** traverse_data_list (gfc_data_variable *
*** 6341,6346 ****
--- 6367,6376 ----
mpz_clear (trip);
mpz_clear (frame.value);
+ gfc_free_expr (start);
+ gfc_free_expr (end);
+ gfc_free_expr (step);
+
iter_stack = frame.prev;
return SUCCESS;
}
*************** resolve_data_variables (gfc_data_variabl
*** 6386,6396 ****
{
if (gfc_resolve_iterator (&d->iter, false) == FAILURE)
return FAILURE;
-
- if (d->iter.start->expr_type != EXPR_CONSTANT
- || d->iter.end->expr_type != EXPR_CONSTANT
- || d->iter.step->expr_type != EXPR_CONSTANT)
- gfc_internal_error ("resolve_data_variables(): Bad iterator");
if (resolve_data_variables (d->list) == FAILURE)
return FAILURE;
--- 6416,6421 ----
Index: gcc/testsuite/gfortran.dg/data_implied_do_1.f90
===================================================================
*** gcc/testsuite/gfortran.dg/data_implied_do_1.f90 (révision 0)
--- gcc/testsuite/gfortran.dg/data_implied_do_1.f90 (révision 0)
***************
*** 0 ****
--- 1,14 ----
+ ! { dg-do run }
+ ! Test of the patch for PR23232, in which implied do loop
+ ! variables were not permitted in DATA statements.
+ !
+ ! Contributed by Roger Ferrer Ibáñez <rofi@ya.com>
+ !
+ PROGRAM p
+ REAL :: TWO_ARRAY (3, 3)
+ INTEGER :: K, J
+ DATA ((TWO_ARRAY (K, J), K = 1, J-1), J = 1, 3) /3 * 1.0/
+ DATA ((TWO_ARRAY (K, J), K = J, 3), J = 1, 3) /6 * 2.0/
+ if (any (reshape (two_array, (/9/)) &
+ .ne. (/2.0,2.0,2.0,1.0,2.0,2.0,1.0,1.0,2.0/))) call abort ()
+ END PROGRAM
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Patch, fortran] PR23232 - DATA implied DO variables
2007-01-04 15:42 ` Paul Richard Thomas
@ 2007-01-05 6:15 ` Steve Kargl
2007-01-05 6:56 ` Paul Richard Thomas
0 siblings, 1 reply; 4+ messages in thread
From: Steve Kargl @ 2007-01-05 6:15 UTC (permalink / raw)
To: Paul Richard Thomas; +Cc: fortran, gcc-patches
On Thu, Jan 04, 2007 at 04:42:29PM +0100, Paul Richard Thomas wrote:
> Bother! Please find attached a patch without the modification to
> interface_7.f90
>
> Paul
>
> On 1/4/07, Paul Richard Thomas <paul.richard.thomas@gmail.com> wrote:
> >:ADDPATCH fortran:
> >
> >This patch came about as I was tidying up and putting to bed the
> >ongoing work on PRs, for others to follow up. I had written this some
> >months ago but could not get it to handle error conditions without
> >segfaulting. I noticed what this was due to this morning.....
> >blush.....
> >
> > gfc_error ("Beginning of message at %L followed by ",
> > "end of message", &expr->where);
> >
> >I was completely blind to the errant comma and put the patch to one
> >side.... more blushing.... Since it is error_on_valid, I thought it
> >best to submit it myself, since I am up to speed on it.
> >
> >Beyond this, the fix is straight forward. Since the iterators are not
> >available, whilst gfc_match_init_expr and check_init_expr are doing
> >their respective things, the appearance of variable expressions for
> >the iterator start, end or steps causes errors. The way around this
> >is to signal that we are matching a data statement and use this to
> >avoid checking for variable references. In this way, all the other
> >good things happen, like checking for inquiry functions, etc. The
> >expressions then go on to resolve.c, where in looping through the
> >iterators, they are copied and simplified. Since the iterators are on
> >the iterator stack, simplification now works and EXPR_CONSTANTs are
> >produced. The previous check that iterator expressions were constant
> >has now been removed. The testcase is a rejigging of the reporter's;
> >the array is reduced in size so that the correct emplacement of the
> >values can be checked.
> >
> >Regtested on PIV/Cygwin_NT - OK for trunk and, in a week, for 4.2?
> >
Paul, I believe the patch is ok with one comment below.
Do you want me to commit it for you?
> mpz_init (frame.value);
>
> ! start = gfc_copy_expr (var->iter.start);
> ! end = gfc_copy_expr (var->iter.end);
> ! step = gfc_copy_expr (var->iter.step);
>
> ! if (gfc_simplify_expr (start, 1) == FAILURE
> ! || start->expr_type != EXPR_CONSTANT)
> ! {
> ! gfc_error ("iterator start at %L does not simplify",
> ! &start->where);
If we return here, do we need to free start, end, and step? It
seems to me that this could be a memory leak.
> ! return FAILURE;
> ! }
--
Steve
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Patch, fortran] PR23232 - DATA implied DO variables
2007-01-05 6:15 ` Steve Kargl
@ 2007-01-05 6:56 ` Paul Richard Thomas
0 siblings, 0 replies; 4+ messages in thread
From: Paul Richard Thomas @ 2007-01-05 6:56 UTC (permalink / raw)
To: Steve Kargl; +Cc: fortran, gcc-patches
Steve,
> Paul, I believe the patch is ok with one comment below.
> Do you want me to commit it for you?
Thanks for the offer but I can do it - I have programmed a series of
slots to commit the stragglers.
>
> If we return here, do we need to free start, end, and step? It
> seems to me that this could be a memory leak.
Spot on! I'll correct it.
Thanks
Paul
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2007-01-05 6:56 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-01-04 15:34 [Patch, fortran] PR23232 - DATA implied DO variables Paul Richard Thomas
2007-01-04 15:42 ` Paul Richard Thomas
2007-01-05 6:15 ` Steve Kargl
2007-01-05 6:56 ` Paul Richard Thomas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).