This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Handle EOF in c_parser_parse_rtl_body


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]