On Thu, Mar 03, 2016 at 10:51:14PM -0700, Jeff Law wrote: > On 03/03/2016 07:15 AM, Marek Polacek wrote: > >This is ICE on invalid Cilk+ code. cilk_spawn expects a function call, so > >e.g. > >_Cilk_spawn (void) is invalid. The function call after the cilk_spawn > >keyword > >is parsed using recursive call in c_parser_postfix_expression (case > >RID_CILK_SPAWN). Now, c_parser_postfix_expression sees '(' followed by a > >typename, so it thinks we're inside a compound literal, which means it > >expects > >'{', but that isn't there, so we crash on the assert in c_parser_braced_init: > >gcc_assert (c_parser_next_token_is (parser, CPP_OPEN_BRACE)); > >But as the comment in c_parser_postfix_expression says, the code for parsing > >a compound literal here is likely dead. I made an experiment and added > >gcc_unreachable () in that block, ran regtest, and there were no failures. > >Thus it should be safe to just remove the code, which also fixes this ICE; > >with > >the patch we just give a proper error and don't crash anymore. > > > >Bootstrapped/regtested on x86_64-linux, ok for trunk? I'm actually slightly > >nervous about the change, so maybe better table until gcc7? > > > >2016-03-03 Marek Polacek <pola...@redhat.com> > > > > PR c/69798 > > * c-parser.c (c_parser_postfix_expression): Remove code dealing with > > compound literals. > > > > * gcc.dg/cilk-plus/pr69798-1.c: New test. > > * gcc.dg/cilk-plus/pr69798-2.c: New test. > FWIW, I don't particularly like this version. My worry about just removing > this code is that I expect our testsuite doesn't cover parsing issues all > that well. > > I'd feel better if it'd been run through one of the commercial suites. Even > then those suites don't cover the GNU extensions, but at least the scope of > things that might go wrong is significantly diminished.
I agree but unfortunately I don't have the means to run such a suite. Compound literals are ISO C99 thing, so hopefully they are well-covered in those test suites. Ultimately I want to either do away with the code, or add tests that exercise the codepath. Marek