2006-06-29 Tobias Schlüter fortran/ PR fortran/19259 * parse.c (next_free): Error out on line starting with semicolon. (next_fixed): Fix formatting. Error out on line starting with semicolon. testsuite/ PR fortran/19259 * gfortran.dg/semicolon_fixed.c: New. * gfortran.dg/semicolon_free.c: New. Index: fortran/parse.c =================================================================== --- fortran/parse.c (revision 115068) +++ fortran/parse.c (working copy) @@ -410,8 +410,9 @@ static gfc_statement next_free (void) { match m; - int c, d, cnt; + int c, d, cnt, at_bol; + at_bol = gfc_at_bol (); gfc_gobble_whitespace (); c = gfc_peek_char (); @@ -447,6 +448,14 @@ next_free (void) gfc_gobble_whitespace (); + if (at_bol && c == ';') + { + gfc_error_now + ("Semicolon at %C needs to be preceded by statement"); + gfc_next_char (); /* Eat up the semicolon. */ + return ST_NONE; + } + if (gfc_match_eos () == MATCH_YES) { gfc_warning_now @@ -474,6 +483,13 @@ next_free (void) } } + if (at_bol && c == ';') + { + gfc_error_now ("Semicolon at %C needs to be preceded by statement"); + gfc_next_char (); /* Eat up the semicolon. */ + return ST_NONE; + } + return decode_statement (); } @@ -571,7 +587,7 @@ next_fixed (void) if (c == '\n') goto blank_line; - if (c != ' ' && c!= '0') + if (c != ' ' && c != '0') { gfc_buffer_error (0); gfc_error ("Bad continuation line at %C"); @@ -593,6 +609,12 @@ next_fixed (void) goto blank_line; gfc_current_locus = loc; + if (c == ';') + { + gfc_error_now ("Semicolon at %C needs to be preceded by statement"); + return ST_NONE; + } + if (gfc_match_eos () == MATCH_YES) goto blank_line; Index: testsuite/gfortran.dg/semicolon_fixed.f =================================================================== --- testsuite/gfortran.dg/semicolon_fixed.f (revision 0) +++ testsuite/gfortran.dg/semicolon_fixed.f (revision 0) @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR 19259 Semicolon cannot start a line + x=1; y=1; + x=2;; + x=3; + ; ! { dg-error "Semicolon at" } + ;; ! { dg-error "Semicolon at" } + 900 ; ! { dg-error "Semicolon at" } + end Index: testsuite/gfortran.dg/semicolon_free.f90 =================================================================== --- testsuite/gfortran.dg/semicolon_free.f90 (revision 0) +++ testsuite/gfortran.dg/semicolon_free.f90 (revision 0) @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR 19259 Semicolon cannot start a line +x=1; y=1; +x=2;; +x=3; + ; ! { dg-error "Semicolon at" } +;; ! { dg-error "Semicolon at" } +111 ; ! { dg-error "Semicolon at" } +end