libcpp: Fix up -fdirectives-only handling of // comments on last line not terminated with newline [PR100646]

As can be seen on the testcases, before the -fdirectives-only preprocessing
rewrite the preprocessor would assume // comments are terminated by the
end of file even when newline wasn't there, but now we error out.
The following patch restores the previous behavior.

2021-05-20  Jakub Jelinek  <jakub@redhat.com>

	PR preprocessor/100646
	* lex.c (cpp_directive_only_process): Treat end of file as termination
	for !is_block comments.

	* gcc.dg/cpp/pr100646-1.c: New test.
	* gcc.dg/cpp/pr100646-2.c: New test.
This commit is contained in:
Jakub Jelinek 2021-05-20 09:09:07 +02:00
parent 75ab8b4829
commit d15a2d261b
3 changed files with 14 additions and 2 deletions

View file

@ -0,0 +1,5 @@
/* PR preprocessor/100646 */
/* { dg-do compile } */
/* { dg-options "-fdirectives-only -save-temps -std=c17" } */
int main () { return 0; }
// Not newline terminated

View file

@ -0,0 +1,6 @@
/* PR preprocessor/100646 */
/* { dg-do compile } */
/* { dg-options "-fdirectives-only -save-temps -std=c17" } */
int main () { return 0; }
/* { dg-warning "backslash-newline at end of file" "" { target *-*-* } .+1 } */
// Not newline terminated\

View file

@ -4480,8 +4480,9 @@ cpp_directive_only_process (cpp_reader *pfile,
break;
}
}
cpp_error_with_line (pfile, CPP_DL_ERROR, sloc, 0,
"unterminated comment");
if (pos < limit || is_block)
cpp_error_with_line (pfile, CPP_DL_ERROR, sloc, 0,
"unterminated comment");
done_comment:
lwm = pos;
break;