[Bug tree-optimization/71104] [7 Regression] ICE: verify_ssa failed (with vfork / error: definition in block 3 does not dominate use in block 7 )
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue May 17 10:55:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71104
--- Comment #6 from Richard Biener <rguenth at gcc dot gnu.org> ---
C11 6.5.16/3 suggests that the LHS "operand" is evaluated in unspecified order.
6.5.2.2/10 says function argument "operands" are evaluated before the actual
call (which denotes a sequence point) and the rest are "indeterminately
sequenced"
with respect to the call.
This means that the following patch should be valid (not requiring to spill
the load of the pointer would improve code-gen as well). Let's see if it
passes testing.
Index: gcc/gimplify.c
===================================================================
--- gcc/gimplify.c (revision 236309)
+++ gcc/gimplify.c (working copy)
@@ -4708,10 +4708,6 @@ gimplify_modify_expr (tree *expr_p, gimp
that is what we must do here. */
maybe_with_size_expr (from_p);
- ret = gimplify_expr (to_p, pre_p, post_p, is_gimple_lvalue, fb_lvalue);
- if (ret == GS_ERROR)
- return ret;
-
/* As a special case, we have to temporarily allow for assignments
with a CALL_EXPR on the RHS. Since in GIMPLE a function call is
a toplevel statement, when gimplifying the GENERIC expression
@@ -4729,6 +4725,10 @@ gimplify_modify_expr (tree *expr_p, gimp
if (ret == GS_ERROR)
return ret;
+ ret = gimplify_expr (to_p, pre_p, post_p, is_gimple_lvalue, fb_lvalue);
+ if (ret == GS_ERROR)
+ return ret;
+
/* In case of va_arg internal fn wrappped in a WITH_SIZE_EXPR, add the type
size as argument to the call. */
if (TREE_CODE (*from_p) == WITH_SIZE_EXPR)
More information about the Gcc-bugs
mailing list