[Bug tree-optimization/85627] [6/7/8/9 Regression] ICE in update_phi_components in tree-complex.c
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu May 3 10:52:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85627
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
Fixing the nothrow issue reveals:
Index: tree.c
===================================================================
--- tree.c (revision 259879)
+++ tree.c (working copy)
@@ -10386,17 +10386,19 @@ build_common_builtin_nodes (void)
*q = TOLOWER (*p);
*q = '\0';
+ /* For -ftrapping-math these should throw from a former
+ -fnon-call-exception stmt. */
built_in_names[mcode] = concat (prefix, "mul", mode_name_buf, "3",
NULL);
local_define_builtin (built_in_names[mcode], ftype, mcode,
built_in_names[mcode],
- ECF_CONST | ECF_NOTHROW | ECF_LEAF);
+ ECF_CONST | ECF_LEAF);
built_in_names[dcode] = concat (prefix, "div", mode_name_buf, "3",
NULL);
local_define_builtin (built_in_names[dcode], ftype, dcode,
built_in_names[dcode],
- ECF_CONST | ECF_NOTHROW | ECF_LEAF);
+ ECF_CONST | ECF_LEAF);
}
}
t.ii:2:1: error: statement marked for throw in middle of block
foo (__complex double a, __complex double b)
^~~
_6 = __muldc3 (a$real_10, a$imag_11, b$real_12, b$imag_13);
during GIMPLE pass: cplxlower
t.ii:2:1: internal compiler error: verify_gimple failed
this is because the components are extracted after the call:
<bb 2> [local count: 1073741825]:
a$real_10 = REALPART_EXPR <a_4(D)>;
a$imag_11 = IMAGPART_EXPR <a_4(D)>;
b$real_12 = REALPART_EXPR <b_5(D)>;
b$imag_13 = IMAGPART_EXPR <b_5(D)>;
_6 = __muldc3 (a$real_10, a$imag_11, b$real_12, b$imag_13);
_14 = REALPART_EXPR <_6>;
_15 = IMAGPART_EXPR <_6>;
<bb 3> [local count: 1073741825]:
# res_2 = PHI <_6(2), b_5(D)(4)>
# res$real_16 = PHI <_14(2), b$real_12(4)>
# res$imag_17 = PHI <_15(2), b$imag_13(4)>
return res_2;
thus with EH we need to split the block after the call.
More information about the Gcc-bugs
mailing list