On Fri, 2016-11-18 at 22:13 +0000, Joseph Myers wrote: > On Fri, 18 Nov 2016, David Malcolm wrote: > > > + /* Consume all tokens, up to the closing brace, handling > > + matching pairs of braces in the rtl dump. */ > > + int num_open_braces = 1; > > + while (1) > > + { > > + switch (c_parser_peek_token (parser)->type) > > + { > > + case CPP_OPEN_BRACE: > > + num_open_braces++; > > + break; > > + case CPP_CLOSE_BRACE: > > + if (--num_open_braces == 0) > > + goto found_closing_brace; > > + break; > > + default: > > + break; > > + } > > + c_parser_consume_token (parser); > > + } > > What if you have an EOF without the close brace being found? I'd > expect > you to hit the > > gcc_assert (parser->tokens[0].type != CPP_EOF); > > in c_parser_consume_token.
Oops; thanks. Here's a patch on top of v5 that (I hope) addresses that. gcc/c/ChangeLog: * c-parser.c (c_parser_parse_rtl_body): Handle CPP_EOF. gcc/testsuite/ChangeLog: * gcc.dg/rtl/truncated-rtl-file.c: New test case. --- gcc/c/c-parser.c | 4 ++++ gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c | 2 ++ 2 files changed, 6 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index d645d29..fef882a 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -18326,6 +18326,10 @@ c_parser_parse_rtl_body (c_parser *parser, char *start_with_pass) if (--num_open_braces == 0) goto found_closing_brace; break; + case CPP_EOF: + error_at (start_loc, "no closing brace"); + free (start_with_pass); + return; default: break; } diff --git a/gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c b/gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c new file mode 100644 index 0000000..4dd8214 --- /dev/null +++ b/gcc/testsuite/gcc.dg/rtl/truncated-rtl-file.c @@ -0,0 +1,2 @@ +void __RTL test (void) +{ /* { dg-error "no closing brace" } */ -- 1.8.5.3