diff options
author | Nathan Sidwell <nathan@acm.org> | 2020-05-19 06:11:22 -0700 |
---|---|---|
committer | Nathan Sidwell <nathan@acm.org> | 2020-05-19 06:19:31 -0700 |
commit | a641d6d3e631e523e8cf0cfc8b8e324da118dff2 (patch) | |
tree | e758c982763a130f5ec3e92f0decd43d84affaf4 /gcc | |
parent | 92ea8e1bccc6a703407570471f6323bfa554af99 (diff) | |
download | gcc-a641d6d3e631e523e8cf0cfc8b8e324da118dff2.zip gcc-a641d6d3e631e523e8cf0cfc8b8e324da118dff2.tar.gz gcc-a641d6d3e631e523e8cf0cfc8b8e324da118dff2.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/c-c++-common/cpp/eof-1.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/cpp/eof-2.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/cpp/eof-2.h | 4 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/cpp/eof-3.c | 8 |
4 files changed, 27 insertions, 0 deletions
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 ) |