From d72d2fc9a54da7ef24bd07b0748b7d87035b99a4 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 19 May 2020 06:11:22 -0700 Subject: preprocessor: Fix ICE with EOF in macro args [pr95182] This was another latent case of us losing an EOF token, but succeeding anyway. Since my patch to make us pay more attention to EOFs it came to light. We also need to keep the EOF if we fall off the end of the main file. Forced includes look like regular nested includes at this point. PR preprocessor/95182 libcpp/ * macro.c (collect_args): Preserve EOFif we fell out of the main file. (cpp_get_token_1): Reformat a couple of short lines. --- gcc/testsuite/c-c++-common/cpp/eof-1.c | 7 +++++++ gcc/testsuite/c-c++-common/cpp/eof-2.c | 8 ++++++++ gcc/testsuite/c-c++-common/cpp/eof-2.h | 4 ++++ gcc/testsuite/c-c++-common/cpp/eof-3.c | 8 ++++++++ 4 files changed, 27 insertions(+) create mode 100644 gcc/testsuite/c-c++-common/cpp/eof-1.c create mode 100644 gcc/testsuite/c-c++-common/cpp/eof-2.c create mode 100644 gcc/testsuite/c-c++-common/cpp/eof-2.h create mode 100644 gcc/testsuite/c-c++-common/cpp/eof-3.c (limited to 'gcc') diff --git a/gcc/testsuite/c-c++-common/cpp/eof-1.c b/gcc/testsuite/c-c++-common/cpp/eof-1.c new file mode 100644 index 0000000..0a06f09 --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/eof-1.c @@ -0,0 +1,7 @@ +/* PR preprocess/95183 */ + +/* { dg-do preprocess } */ + +#define f(x) x + +f( /* { dg-error "-:unterminated" "unterminated macro" } */ diff --git a/gcc/testsuite/c-c++-common/cpp/eof-2.c b/gcc/testsuite/c-c++-common/cpp/eof-2.c new file mode 100644 index 0000000..3a4af7f --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/eof-2.c @@ -0,0 +1,8 @@ +/* PR preprocess/95183 */ + +/* { dg-do preprocess } */ + +#define f(x) x + +#include "eof-2.h" + /* { dg-regexp {[^\n]*eof-2.h:4: error: unterminated argument list invoking macro "f"\n} } */ diff --git a/gcc/testsuite/c-c++-common/cpp/eof-2.h b/gcc/testsuite/c-c++-common/cpp/eof-2.h new file mode 100644 index 0000000..48ad857 --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/eof-2.h @@ -0,0 +1,4 @@ + +#define f(x) x + +f( /* Error here */ diff --git a/gcc/testsuite/c-c++-common/cpp/eof-3.c b/gcc/testsuite/c-c++-common/cpp/eof-3.c new file mode 100644 index 0000000..316918e --- /dev/null +++ b/gcc/testsuite/c-c++-common/cpp/eof-3.c @@ -0,0 +1,8 @@ +/* PR preprocess/95183 */ + +/* { dg-do preprocess } */ +/* { dg-additional-options "-include $srcdir/c-c++-common/cpp/eof-2.h" } */ + + /* { dg-regexp {[^\n]*eof-2.h:4: error: unterminated argument list invoking macro "f"\n} } */ + +token ) -- cgit v1.1