[gcc r10-6026] Fix ICE caused by swallowing a token in c_parser_consume_token
Joseph Myers
jsm28@gcc.gnu.org
Thu Jan 16 23:43:00 GMT 2020
https://gcc.gnu.org/g:852f0ae80555238c425e33f98df5c7077694bd9f
commit r10-6026-g852f0ae80555238c425e33f98df5c7077694bd9f
Author: Kerem Kat <keremkat@gmail.com>
Date: Thu Jan 16 23:42:11 2020 +0000
Fix ICE caused by swallowing a token in c_parser_consume_token
This patch fixes ICE on invalid code, specifically files that have
conflict-marker-like signs before EOF.
PR c/92833
gcc/c/
* c-parser.c (c_parser_consume_token): Fix peeked token stack pop
to support 4 available tokens.
gcc/testsuite/
* c-c++-common/pr92833-1.c, c-c++-common/pr92833-2.c,
c-c++-common/pr92833-3.c, c-c++-common/pr92833-4.c: New tests.
Diff:
---
gcc/c/ChangeLog | 6 ++++++
gcc/c/c-parser.c | 6 +++++-
gcc/testsuite/ChangeLog | 6 ++++++
gcc/testsuite/c-c++-common/pr92833-1.c | 4 ++++
gcc/testsuite/c-c++-common/pr92833-2.c | 4 ++++
gcc/testsuite/c-c++-common/pr92833-3.c | 4 ++++
gcc/testsuite/c-c++-common/pr92833-4.c | 7 +++++++
7 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index b702b39..c638756 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2020-01-16 Kerem Kat <keremkat@gmail.com>
+
+ PR c/92833
+ * c-parser.c (c_parser_consume_token): Fix peeked token stack pop
+ to support 4 available tokens.
+
2020-01-15 Joseph Myers <joseph@codesourcery.com>
PR c/93072
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index bf9e3e0..6164017 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -846,7 +846,11 @@ c_parser_consume_token (c_parser *parser)
{
parser->tokens[0] = parser->tokens[1];
if (parser->tokens_avail >= 3)
- parser->tokens[1] = parser->tokens[2];
+ {
+ parser->tokens[1] = parser->tokens[2];
+ if (parser->tokens_avail >= 4)
+ parser->tokens[2] = parser->tokens[3];
+ }
}
parser->tokens_avail--;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2af4d34..b2bb021 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2020-01-16 Kerem Kat <keremkat@gmail.com>
+
+ PR c/92833
+ * c-c++-common/pr92833-1.c, c-c++-common/pr92833-2.c,
+ c-c++-common/pr92833-3.c, c-c++-common/pr92833-4.c: New tests.
+
2020-01-16 Stam Markianos-Wright <stam.markianos-wright@arm.com>
* g++.target/arm/bfloat_cpp_typecheck.C: New test.
diff --git a/gcc/testsuite/c-c++-common/pr92833-1.c b/gcc/testsuite/c-c++-common/pr92833-1.c
new file mode 100644
index 0000000..ab164aa
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr92833-1.c
@@ -0,0 +1,4 @@
+/* Six marker characters at EOF, causes conflict marker detector to peek 4
+ tokens. */
+
+/* { dg-error "expected" } */ <<<<<<
\ No newline at end of file
diff --git a/gcc/testsuite/c-c++-common/pr92833-2.c b/gcc/testsuite/c-c++-common/pr92833-2.c
new file mode 100644
index 0000000..8347f35
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr92833-2.c
@@ -0,0 +1,4 @@
+/* Six marker characters at EOF, causes conflict marker detector to peek 4
+ tokens. */
+
+/* { dg-error "expected" } */ ======
\ No newline at end of file
diff --git a/gcc/testsuite/c-c++-common/pr92833-3.c b/gcc/testsuite/c-c++-common/pr92833-3.c
new file mode 100644
index 0000000..fe4f6d4
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr92833-3.c
@@ -0,0 +1,4 @@
+/* Six marker characters at EOF, causes conflict marker detector to peek 4
+ tokens. */
+
+/* { dg-error "expected" } */ >>>>>>
\ No newline at end of file
diff --git a/gcc/testsuite/c-c++-common/pr92833-4.c b/gcc/testsuite/c-c++-common/pr92833-4.c
new file mode 100644
index 0000000..b591ea9
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pr92833-4.c
@@ -0,0 +1,7 @@
+/* Six marker characters at EOF, causes conflict marker detector to peek 4
+ tokens. */
+
+/* { dg-message "expected" "expected" { target *-*-* } .3 } */
+>>
+>>
+>>
\ No newline at end of file
More information about the Gcc-cvs
mailing list