Le 14/05/2015 03:58, Jerry DeLisle a écrit : > The attached patch reverts a change I made for pr65456 which caused this > regression and adds a check for quotes farther down in the function. This > avoids treating a '!' in a string as a comment and wiping the rest of the > line. > > I found the added code is needed because an interposing quote was falling > through and being changed into an empty space at around line 1393. (I do not > recall the history of why that space is being done) > > The patch also updates test case continuation_13.f90. I found another > compiler I > use for comparison interprets the continuation differently and is inserting a > space that is not there. So the format at line 800 is handled differently now > with gfortran and the line 900 format example is added to test both cases with > and without a space just before the continuation. > > I think now gfortran has this right, but I do not rule out that I am missing > some obscure rule. This begs a question about the space character substituted > near line 1393 in scanner.c, but at the moment I do not think it is related. > > I have also added a test for the the original problem reported in this PR to > avoid future repeating of the problem. I will provide a Changelog entry for > the > testsuite changes. > > Regression tested on x86-64-linux. OK to trunk? followed to 5.1? > > Regards, > > Jerry > > > 2015-05-14 Jerry DeLisle <jvdeli...@gcc.gnu.org> > > PR fortran/65903 > * io.c (format_lex): Change to NONSTRING when checking for > possible doubled quote. > * scanner.c (gfc_next_char_literal): Revert change from 64506, > add a check for quotes, and return. > > Index: gcc/testsuite/gfortran.dg/continuation_13.f90 > =================================================================== > --- gcc/testsuite/gfortran.dg/continuation_13.f90 (revision 223105) > +++ gcc/testsuite/gfortran.dg/continuation_13.f90 (working copy) > @@ -19,6 +19,8 @@ character(25) :: astring > ) > 800 format('This is actually ok.'& !comment > ' end' ) > +900 format('This is actually ok.' & !comment > + ' end' ) > write(astring,100) > if (astring.ne."This format is OK.") call abort > write(astring,200)
Hello, is the new format labelled 900 correct? It seems to me it is equivalent to 900 format('This is actually ok.' ' end') which is missing a comma, no? This is a real question, I'm no format guru. By the way, the existing 800 format is also not right, it shouldn't have a comment, and it should have a '&' at the beginning of the next line. Section 3.3.2.4 "Free form statement continuation", last paragraph has: > If a character context is to be continued, an “&” shall be the last > nonblank character on the line and shall not be followed by commentary. > There shall be a later line that is not a comment; an “&” shall be the > first nonblank character on the next such line and the statement > continues with the next character following that “&”. To be honest, I see little value in supporting continuation between the two consecutive quotes coding one quote inside a string constant, it's confusing. But if it's supported, the above applies, doesn't it? Regarding the patch itself, I haven't looked at it in great details yet, but as it's a revert basically, it shouldn't do a lot of harm. I see that the fixed form part isn't reverted, is it on purpose? Mikael