| Submitter | jerry DeLisle |
|---|---|
| Date | Dec. 26, 2012, 7:46 a.m. |
| Message ID | <50DAAB38.4080006@charter.net> |
| Download | mbox | patch |
| Permalink | /patch/208150/ |
| State | New |
| Headers | show |
Comments
On Wed, Dec 26, 2012 at 9:46 AM, Jerry DeLisle <jvdelisle@charter.net> wrote: > The attached patch fixes this bug by not assigning the new unit value to the > user variable until after the OPEN is successful. > > Regression tested on Linux X86-64. > > OK for trunk with the test case from the PR? Ok. Thanks for the patch. > > Regards, > > Jerry > > 2012-12-26 Jerry DeLisle <jvdelisle@gcc.gnu.org> > > PR libfortran/48960 > * io/open.c (st_parameter_open): Assign newunit number to user > variable only if the the associated open statement is successful.
Patch
Index: open.c =================================================================== --- open.c (revision 194678) +++ open.c (working copy) @@ -844,10 +844,7 @@ st_open (st_parameter_open *opp) if ((opp->common.flags & IOPARM_LIBRETURN_MASK) == IOPARM_LIBRETURN_OK) { if ((opp->common.flags & IOPARM_OPEN_HAS_NEWUNIT)) - { - *opp->newunit = get_unique_unit_number(opp); - opp->common.unit = *opp->newunit; - } + opp->common.unit = get_unique_unit_number(opp); u = find_or_create_unit (opp->common.unit); if (u->s == NULL) @@ -859,6 +856,10 @@ st_open (st_parameter_open *opp) else already_open (opp, u, &flags); } - + + if ((opp->common.flags & IOPARM_OPEN_HAS_NEWUNIT) + && (opp->common.flags & IOPARM_LIBRETURN_MASK) == IOPARM_LIBRETURN_OK) + *opp->newunit = opp->common.unit; + library_end (); }