On Fri, 26 Aug 2016, Prasad Ghangal wrote:

> >> Thanks for your feedback. I had missed removing some unwanted code
> >> while code cleanup. I have updated the patch.
> >> I am not sure if we should move all gimple parsing related functions
> >> to the new file (?)
> >
> > I think it might be good to make the parts of the C parser you use more
> > obvious (you'd need to export functions like c_parser_next_token_is).
> >
> > The easiest way to "force" that is to put all of the gimple parsing into
> > a separate file.
> >
> > Note I am not so much concerned about this at the moment, the parts to
> > improve would be avoiding more of the C-isms like convert_lvalue_to_rvalue,
> > handling of SIZEOF_EXPR and other stuff that looks redundant (you've
> > probably copied this from the C parsing routines and refactored it).
> > Also the GIMPLE parser shouldn't do any warnings (just spotted
> > a call to warn_for_memset).
> >
> PFA updated patch (successfully bootstrapped and tested on
> x86_64-pc-linux-gnu). I have removed unnecessary code. On side I am
> also trying to move gimple parser related functions to new file. But
> for it we also have to move structs like c_token, c_parser. Won't it
> disturb the c-parser code structure ?

I think the GIMPLE parsing should go in a separate file (meaning exporting 
relevant types and function declarations in a new c-parser.h).

> diff --git a/gcc/c-family/c.opt b/gcc/c-family/c.opt
> index a5358ed..3c4d2cc 100644
> --- a/gcc/c-family/c.opt
> +++ b/gcc/c-family/c.opt
> @@ -200,6 +200,10 @@ F
>  Driver C ObjC C++ ObjC++ Joined Separate MissingArgError(missing path after 
> %qs)
>  -F <dir>     Add <dir> to the end of the main framework include path.
>  
> +fgimple
> +C Var(flag_gimple) Init(0)
> +Enable parsing GIMPLE

You should get a test failure here from the missing "." at the end of the 
help text.

Of course the option also needs documenting in invoke.texi.

> @@ -1659,6 +1695,9 @@ c_parser_declaration_or_fndef (c_parser *parser, bool 
> fndef_ok,
>    tree all_prefix_attrs;
>    bool diagnosed_no_specs = false;
>    location_t here = c_parser_peek_token (parser)->location;
> +  bool gimple_body_p = false;
> +  opt_pass *pass = NULL;
> +  bool startwith_p = false;

The comment above the function needs updating to document the new syntax.

> +static void
> +c_parser_gimple_expression (c_parser *parser, gimple_seq *seq)
> +{
> +  struct c_expr lhs, rhs;
> +  gimple *assign = NULL;
> +  enum tree_code subcode = NOP_EXPR;
> +  location_t loc;
> +  tree arg = NULL_TREE;
> +  auto_vec<tree> vargs;
> +
> +  lhs = c_parser_gimple_unary_expression (parser);
> +  rhs.value = error_mark_node;
> +
> +  if (c_parser_next_token_is (parser, CPP_EQ))
> +    {
> +      c_parser_consume_token (parser);
> +    }

Redundant braces around a single statement.  Also, this looks wrong, in 
that it seems like you'd accept a random '=' token at this point 
regardless of what follows and whether '=' makes sense in this context.  
You need to have proper cases: if '=' parse what makes sense after '=', 
otherwise parse what makes sense without '=', so that invalid syntax is 
not accepted.

> +  if (c_parser_next_token_is (parser, CPP_AND) ||
> +      c_parser_next_token_is (parser, CPP_MULT) ||
> +      c_parser_next_token_is (parser, CPP_PLUS) ||
> +      c_parser_next_token_is (parser, CPP_MINUS) ||
> +      c_parser_next_token_is (parser, CPP_COMPL) ||
> +      c_parser_next_token_is (parser, CPP_NOT))

Operators go at the start of a continuation line, not at the end of the 
line.

> +      if (!c_parser_require (parser, CPP_OPEN_PAREN, "expected %<(%>"))
> +     {
> +       return;
> +     }

Please generally review the patch for redundant braces and remove them.

> +  /* ssa token string.  */
> +  const char *ssa_token = IDENTIFIER_POINTER (c_parser_peek_token 
> (parser)->value);
> +  token = new char [strlen (ssa_token)];
> +  strcpy (token, ssa_token);

That looks like a buffer overrun.  To copy a string ssa_token, you need 
strlen (ssa_token) + 1 bytes of space.

> +  /* seperate var name and version.  */

Uppercase letters at start of comments, throughout the patch (and it 
should be "Separate", with 'a' not 'e').

-- 
Joseph S. Myers
jos...@codesourcery.com

Reply via email to