aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/c-c++-common/cpp/pr88974.c1
-rw-r--r--gcc/testsuite/c-c++-common/cpp/pr93545-1.c4
-rw-r--r--gcc/testsuite/c-c++-common/cpp/pr93545-2.c4
-rw-r--r--gcc/testsuite/c-c++-common/cpp/pr93545-3.c4
-rw-r--r--gcc/testsuite/c-c++-common/cpp/pr93545-4.c4
-rw-r--r--libcpp/ChangeLog7
-rw-r--r--libcpp/macro.c23
8 files changed, 54 insertions, 3 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8e24530..e46561a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,13 @@
+2020-02-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/93545
+ * c-c++-common/cpp/pr88974.c: Expect another diagnostics during error
+ recovery.
+ * c-c++-common/cpp/pr93545-1.c: New test.
+ * c-c++-common/cpp/pr93545-2.c: New test.
+ * c-c++-common/cpp/pr93545-3.c: New test.
+ * c-c++-common/cpp/pr93545-4.c: New test.
+
2020-02-04 Iain Sandoe <iain@sandoe.co.uk>
* g++.dg/coroutines/coro-missing-promise.C: New test.
diff --git a/gcc/testsuite/c-c++-common/cpp/pr88974.c b/gcc/testsuite/c-c++-common/cpp/pr88974.c
index c375d83..d6c2414 100644
--- a/gcc/testsuite/c-c++-common/cpp/pr88974.c
+++ b/gcc/testsuite/c-c++-common/cpp/pr88974.c
@@ -3,4 +3,5 @@
#if __has_include (<pr88974.h)
/* { dg-error "missing terminating > character" "" { target *-*-* } .-1 } */
+/* { dg-error "missing '\\\)' after .__has_include. operand" "" { target *-*-* } .-2 } */
#endif
diff --git a/gcc/testsuite/c-c++-common/cpp/pr93545-1.c b/gcc/testsuite/c-c++-common/cpp/pr93545-1.c
new file mode 100644
index 0000000..757277b
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cpp/pr93545-1.c
@@ -0,0 +1,4 @@
+/* PR preprocessor/93545 */
+/* { dg-do preprocess } */
+
+__has_include /* { dg-error "" } */
diff --git a/gcc/testsuite/c-c++-common/cpp/pr93545-2.c b/gcc/testsuite/c-c++-common/cpp/pr93545-2.c
new file mode 100644
index 0000000..5ed2dab
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cpp/pr93545-2.c
@@ -0,0 +1,4 @@
+/* PR preprocessor/93545 */
+/* { dg-do preprocess } */
+
+__has_include ( /* { dg-error "" } */
diff --git a/gcc/testsuite/c-c++-common/cpp/pr93545-3.c b/gcc/testsuite/c-c++-common/cpp/pr93545-3.c
new file mode 100644
index 0000000..eae13bd
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cpp/pr93545-3.c
@@ -0,0 +1,4 @@
+/* PR preprocessor/93545 */
+/* { dg-do preprocess } */
+
+__has_include ("foobarbaz" /* { dg-error "" } */
diff --git a/gcc/testsuite/c-c++-common/cpp/pr93545-4.c b/gcc/testsuite/c-c++-common/cpp/pr93545-4.c
new file mode 100644
index 0000000..977d210
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/cpp/pr93545-4.c
@@ -0,0 +1,4 @@
+/* PR preprocessor/93545 */
+/* { dg-do preprocess } */
+
+__has_include () /* { dg-error "" } */
diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog
index e61700f..11c0773 100644
--- a/libcpp/ChangeLog
+++ b/libcpp/ChangeLog
@@ -1,3 +1,10 @@
+2020-02-04 Jakub Jelinek <jakub@redhat.com>
+
+ PR preprocessor/93545
+ * macro.c (cpp_get_token_no_padding): New function.
+ (builtin_has_include): Use it instead of cpp_get_token. Don't check
+ SEEN_EOL.
+
2020-02-01 Andrew Burgess <andrew.burgess@embecosm.com>
* configure: Regenerate.
diff --git a/libcpp/macro.c b/libcpp/macro.c
index ec3f8b7..9f9f831 100644
--- a/libcpp/macro.c
+++ b/libcpp/macro.c
@@ -336,6 +336,22 @@ unsigned num_expanded_macros_counter = 0;
from macro expansion. */
unsigned num_macro_tokens_counter = 0;
+/* Wrapper around cpp_get_token to skip CPP_PADDING tokens
+ and not consume CPP_EOF. */
+static const cpp_token *
+cpp_get_token_no_padding (cpp_reader *pfile)
+{
+ for (;;)
+ {
+ const cpp_token *ret = cpp_peek_token (pfile, 0);
+ if (ret->type == CPP_EOF)
+ return ret;
+ ret = cpp_get_token (pfile);
+ if (ret->type != CPP_PADDING)
+ return ret;
+ }
+}
+
/* Handle meeting "__has_include" builtin macro. */
static int
@@ -344,10 +360,10 @@ builtin_has_include (cpp_reader *pfile, cpp_hashnode *op, bool has_next)
int result = 0;
pfile->state.angled_headers = true;
- const cpp_token *token = cpp_get_token (pfile);
+ const cpp_token *token = cpp_get_token_no_padding (pfile);
bool paren = token->type == CPP_OPEN_PAREN;
if (paren)
- token = cpp_get_token (pfile);
+ token = cpp_get_token_no_padding (pfile);
else
cpp_error (pfile, CPP_DL_ERROR,
"missing '(' before \"%s\" operand", NODE_NAME (op));
@@ -379,7 +395,8 @@ builtin_has_include (cpp_reader *pfile, cpp_hashnode *op, bool has_next)
XDELETEVEC (fname);
}
- if (paren && !SEEN_EOL () && cpp_get_token (pfile)->type != CPP_CLOSE_PAREN)
+ if (paren
+ && cpp_get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
cpp_error (pfile, CPP_DL_ERROR,
"missing ')' after \"%s\" operand", NODE_NAME (op));