aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-parser.c
diff options
context:
space:
mode:
authorKerem Kat <keremkat@gmail.com>2020-01-16 23:42:11 +0000
committerJoseph Myers <joseph@codesourcery.com>2020-01-16 23:42:11 +0000
commit852f0ae80555238c425e33f98df5c7077694bd9f (patch)
treeaf3277d077383ad1305ca29e09c7bf5621392927 /gcc/c/c-parser.c
parentf5b25e15165adde1356af42e9066ab75c5b37a19 (diff)
downloadgcc-852f0ae80555238c425e33f98df5c7077694bd9f.zip
gcc-852f0ae80555238c425e33f98df5c7077694bd9f.tar.gz
gcc-852f0ae80555238c425e33f98df5c7077694bd9f.tar.bz2
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.
Diffstat (limited to 'gcc/c/c-parser.c')
-rw-r--r--gcc/c/c-parser.c6
1 files changed, 5 insertions, 1 deletions
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--;
}