diff options
Diffstat (limited to 'gcc/genmatch.c')
-rw-r--r-- | gcc/genmatch.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gcc/genmatch.c b/gcc/genmatch.c index 5621aa05b59..3527e499cbf 100644 --- a/gcc/genmatch.c +++ b/gcc/genmatch.c @@ -2054,7 +2054,11 @@ capture_info::walk_match (operand *o, unsigned toplevel_arg, if (c->what && (e = dyn_cast <expr *> (c->what))) { - info[where].expr_p = true; + /* Zero-operand expression captures like ADDR_EXPR@0 are + similar as predicates -- if they are not mentioned in + the result we have to force them to have no side-effects. */ + if (e->ops.length () != 0) + info[where].expr_p = true; info[where].force_single_use |= e->force_single_use; } } |