Commit d0af2c65 by Richard Biener Committed by Richard Biener

genmatch.c (parser::parser): Initialize capture_ids.

2014-12-16  Richard Biener  <rguenther@suse.de>

	* genmatch.c (parser::parser): Initialize capture_ids.
	(parser::parse_pattern): Properly allocate capture_ids before
	using them.  Set capture_ids to zero when its lifetime is
	supposed to finish.
	(parser::parse_simplify): Allocate capture_ids only if
	required.

From-SVN: r218786
parent 7e2ac29e
2014-12-16 Richard Biener <rguenther@suse.de>
* genmatch.c (parser::parser): Initialize capture_ids.
(parser::parse_pattern): Properly allocate capture_ids before
using them. Set capture_ids to zero when its lifetime is
supposed to finish.
(parser::parse_simplify): Allocate capture_ids only if
required.
2014-12-16 Michael Haubenwallner <michael.haubenwallner@ssi-schaefer.com>
Both config.h and system.h define ABI/API macros for system headers.
......@@ -3171,7 +3171,8 @@ parser::parse_simplify (source_location match_location,
expr *result)
{
/* Reset the capture map. */
capture_ids = new cid_map_t;
if (!capture_ids)
capture_ids = new cid_map_t;
/* Reset oper_lists and set. */
hash_set <user_id *> olist;
oper_lists_set = &olist;
......@@ -3489,7 +3490,10 @@ parser::parse_pattern ()
const cpp_token *token = peek ();
const char *id = get_ident ();
if (strcmp (id, "simplify") == 0)
parse_simplify (token->src_loc, simplifiers, NULL, NULL);
{
parse_simplify (token->src_loc, simplifiers, NULL, NULL);
capture_ids = NULL;
}
else if (strcmp (id, "match") == 0)
{
bool with_args = false;
......@@ -3514,6 +3518,7 @@ parser::parse_pattern ()
expr *e = NULL;
if (with_args)
{
capture_ids = new cid_map_t;
e = new expr (p);
while (peek ()->type == CPP_ATSIGN)
e->append_op (parse_capture (NULL));
......@@ -3525,6 +3530,7 @@ parser::parse_pattern ()
fatal_at (token, "non-matching number of match operands");
p->nargs = e ? e->ops.length () : 0;
parse_simplify (token->src_loc, p->matchers, p, e);
capture_ids = NULL;
}
else if (strcmp (id, "for") == 0)
parse_for (token->src_loc);
......@@ -3562,6 +3568,7 @@ parser::parser (cpp_reader *r_)
simplifiers = vNULL;
oper_lists_set = NULL;
oper_lists = vNULL;
capture_ids = NULL;
user_predicates = vNULL;
parsing_match_operand = false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment